Сейчас на форуме: vsv1, _MBK_ (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Проблема после распаковки (аспр)
Посл.ответ Сообщение

Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2007 15:21
· Личное сообщение · #1

У меня маленкая проблема после того как я распаковал HexCmp. Импорт вроде хороший, но когда я запускаю программу то получаеца краш в _init_exit_proc на адресе 4а7ffa. Почему краш в этой функтии? Это же код генерированный борландом.. :S

0b4f_07.07.2007_CRACKLAB.rU.tgz - HexCmp_d_.rar



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 июля 2007 15:22
· Личное сообщение · #2

Оригинал не поместился...

d159_07.07.2007_CRACKLAB.rU.tgz - HexCmp_orig.rar



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 10:51
· Личное сообщение · #3

Держи распакованный файл.
slil.ru/24605711



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 14:35
· Личное сообщение · #4

Sturgeon: Раскажи как ты сделал

Я делаю вот так:

Запускаю прогу в оли и считаю 27 "Access violation at 0000...".
Ставлю бряк на секции кода и потом шифт-ф9 чтобы попасть на OEP (401000)
Делаю дамп из оли без реконструкции импорта
Запускаю ImpRec и реконстрыирую импорт (смотри аттач)
Прикручиваю импорт в виде новой секции и запускаю программу
Краш на адресе 4а8008.

В твоей версии этого краша конечно нет. Я попробовал анулировать блок после 4d4600 но тогда у меня краш на c10a03. Я тоже заметил что ты поменял информацию на 4bb4dc и 4bb598 - почему?

7270_08.07.2007_CRACKLAB.rU.tgz - iat2.txt



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 15:18 · Поправил: Sturgeon
· Личное сообщение · #5

Да, я смотрел твой дамп из первого поста. Прога падает на обращении к несуществующим адресам. Почему так происходит я не знаю, потому что чайник еще.
Есть небольшая заморочка со снятием дампа. Сам недавно узнал. Обычно это с Дельфовыми прогами бывает, но вот тебе тоже повезло. Там немного в другом месте нужно снимать дамп. Вот, почитай:
[url=http://www.exelab.ru/pro/faq.php?pg=1828
]http://www.exelab.ru/pro/faq.php?pg=1828
[/url]
Попробуй поковыряйся. Если не получится потом напишешь, где и что не получается. Расскажу. Сразу писать тутор не хочу, потому что это неспортивно
P.S. Да! Чуть не забыл. Когда восстанавлиываешь импорт, то используй плагин ASProtect 1.22.dll. ASPR_1.23-ImpREC_Plugin.dll хотя и поновее, но он в данной ситуации не справляется. У меня тоже сначала были праблы.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 18:13 · Поправил: pixl
· Личное сообщение · #6

edit...

Cделал дамп хороший тем методом и сейчас краша болше нет, но дамп всеравно не хочит работать. Программа просто выходит через ExitProcess.. У тебя тоже так было? В чем проблема?



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 18:36
· Личное сообщение · #7

00B028CC 5B POP EBX ; 00B15A04
00B028CD ^ EB CE JMP SHORT 00B0289D
00B028CF 61 POPAD <- Ты здесь
00B028D0 E8 3A000000 CALL 00B0290F <- ВХОДИ В ЭТУ ФУНКЦИЮ
00B028D5 68 DE28B000 PUSH 0B028DE
00B028DA FF0424 INC DWORD PTR SS:[ESP]
00B028DD C3 RETN

Ты стоишь на адресе 00B028D0 (у тебя может быть другой адрес). Теперь ты входишь ВНУТРЬ функции CALL 00B0290F (ф7). Скролишь потихоньку вниз и увидишь такой код:

00B0297B 60 PUSHAD
00B0297C 68 2453B000 PUSH 0B05324
00B02981 8D45 F4 LEA EAX,DWORD PTR SS:[EBP-C]
00B02984 FF35 7869B000 PUSH DWORD PTR DS:[B06978] ; HexCmp_o.00400000
00B0298A FF10 CALL DWORD PTR DS:[EAX]
00B0298C 61 POPAD

Вот на этот POPAD ставишь бряк. Здесь же дампишь и восстанавливаешь импорт. Вот можешь почитать:
http://www.exelab.ru/f/action=vthread&topic=9048&forum=5&p age=-1
Это я недавно тоже парился с аспром.
З.Ы. После распаковки есть еще одна хитрая заморочка. Потом расскажу. И взломать HexCmp у меня кстати не получается. Очень сложно для меня.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 18:40
· Личное сообщение · #8

нашел все ети pop/push и сдампил. С заморочкой ты имееш в виду то что программа выходит сразу после старта?



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 18:51
· Личное сообщение · #9

pixl пишет:
С заморочкой ты имееш в виду то что программа выходит сразу после старта?

Ну да. Есть желание потрахаться самому?;)



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 19:56
· Личное сообщение · #10

хмм интересно.. подскажи мне как ты нашел адрес функции каторую маин вызевает, и как этот адрес попадает на место после копираита.. С хреновым accessviolation диалогом буду потом боротся



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 20:51 · Поправил: Sturgeon
· Личное сообщение · #11

После того ка ты снял дамп и восстановил импорт прога перестала выдавть сообщение об ошибке. Но и не запускается. Сначала я думал, что там есть проверка на контрольную сумму или размер файла.
Я сделал вот как.
Открыл распакованную прогу в Оле. Поставил бряк на ExitProcess
Брякнулся здесь:
004B52EF \. E8864E0000 CALL <JMP.&kernel32.ExitProcess> ; \ExitProcess
В стек посмотрел откуда вызывается эта процедура.
(Должна быть такая строчка)
0012FF84 |004B4701 RETURN to cmp.004B4701 from cmp.004B52E8
Перешел по адресу 004B4701.
Чуть выше вызов этой самой процедуры с выходом.
004B46FC |. E8 E70B0000 CALL r55555_.004B52E8
Поставил на него бряк. Еще чуть выше есть условный переход, который перепрыгивает эту функцию. Поставил на него бряк тоже.

Вышел еще на пару процедур вверх. Адреса возврата смотрел в стеке.

004B471C и 004B55CC

Скролишь экран вверх и смотришь где начало функции
PUSH EBP
MOV EBP,ESP
ADD ESP,-0C
Ставишь на начало функции бряк.

Когда дойдешь до адреса 004B55CC и найдешь начало функции (по адресу 004B5474), увидишь, что переход на эту функцию осуществляется офигенно длнинным прыжком с адреса 00401054. Поскольку переход этот безусловный, то можно считать, что место ошибки мы локализовали. Ставим еще один бряк бряк на этот адрес. И перезапускаем прогу.
Сразу скажу, что все попытки менять переходы ничем не закончились, и прога все также не запускадась. Тогда я избрал другую тактику. Перезапустил пргу. (Бряки не убирай они еще будут нужны), а рядом открыл в отладчике оригинальную запакованную прогу. Ну дальше, в принципе понятно. Трассируем в соседних окнах оригинальную и распакованную прогу и сравниваем, где будут отличия.
Если подробнее, то это было так:
В запакованной проге доходим до ОЕР (401000) и расставляем те же бряки, что и в нашей распакованной проге. Тоесть брякаемся на длинном прыжке 00401054 и начинаем трассировать. Увидишь, что по адресу 004B55C0 в оригинальной проге запустится окно, а в распакованной проге нет. Вот тут-то собака и зарыта. Перезапускаем обе проги и брякаемся по адресу 004B55C0. Входи в функцию. Трассируем внитри функции по Ф8 и видим, что в запакованной проге условный переход по адресу 004041F1 не выполняется, а в распакованной проге - выполняется. Будем искать причину, почему такая разница. Вот этот кусочек кода:

004041EA . CMP DWORD PTR DS:[4BB598],0 Здесь команда сравнения
004041F1 . JE SHORT HexCmp_o.004041F9 Собственно, интересующий нас переход
004041F3 . CALL DWORD PTR DS:[4BB598] Вызов окна программы

То есть из кода понятно, что после того как значение в ячейке 4BB598 сравнивается с нулем происходит или не происходит старт программы. Посмотрим чему это значение равно в оригинальной и распакованной проге. Перезапускаем опять обе проги. Это в последний раз. Брякаемся по адресу 004041EA и смотрим, что лежит в вышеупомянутой ячейке в одной и другой проге. В распакованной проге ноль, а в оригинальной число 004039EC. Похоже на каой-то адрес. В принципе это и есть адрес, потому что двумя строчками ниже идет вызов функции по этому адресу

004041F3.CALL DWORD PTR DS:[4BB598] То есть, на самом деле, выполняется CALL 004039EC

Остается только в распакованной проге в ячейки по адресу 4BB598 вписать значение 004039EC. Сделать это можно в любом хекс-редакторе, только не забывай писать задом наперед.

Уфф... Умаялся столько писать
Со взломом чего-то не получается Не могу отловить где создается главное окно программы. Смотрел и в DeDe, и в SourceRescue. Скорее всего эта ячейка с подозрительным адресом и играет ключевую роль. Как мне кажется в зарегестрированной версии в ней должен лежать адрес функции мэйн. Кстати ключ, который вводится в окно регистрации по-моему не просто проверяется на правильность, а еще и выполняет какую-то функцию. Обрати внимание на звук, который сопровождает закрытие программы. Очень похоже на какую-то ошибку. Пробовал отловить в отладчике и не смог. В общем я такое не взломаю, но было бы очень интересно и познавательно посмотреть как борются с такими защитами.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 21:28 · Поправил: pixl
· Личное сообщение · #12

Спасибо за такой длинный ответ Я пришол к заключению что аспр вызывает какието функции в главном коде перед тем как прыгать на оеп. Глубко в одной из етих функций находица код который копирует этот адрес на свое место. Одна из этих функций даже пишет дату первого запуска гдето в программе. Твой дамп у меня показывает что мой триал закончился, а оригинал у меня работает. Я не помню где первый адрес пишется в сектию, но это можно найти с помощю бряков на секции где эта ячеика находится (4bb000). Запускаеш программу, отркрываеш сектию и нажимаеш шифт ф9 до того как сектиа станет распакована. Ставиш бряк на целой сектии и смотреш когда код туда пишет.



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 21:40 · Поправил: Sturgeon
· Личное сообщение · #13

В принципе, может такое быть. Я, честно говоря, сглупил. Перевел системные часы вперед и хотел поймать где проверяется время использования. А теперь не могу запустить ни запакованную ни распакованную прогу. Так что мой дамп может быть и неликвидый вообще. Попробуй распаковать свой работающий файл. Если проверка завязана на сам аспр, то есть шанс, что после распаковки защита пропадет. Хотя бы ее триальная часть.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 21:58 · Поправил: pixl
· Личное сообщение · #14

Я распаковал его. Он запускается, но у меня выскакивает диалог "EAccessViolation". Это потому что адреса B3xxxx не существуют. Посматрел где это аллокируется, и нашел 5d749c - в коде который находится в дата сектии.. Ты натыкалса на чтото такое?

edit..



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 08 июля 2007 22:56
· Личное сообщение · #15

Я заметил что в твоем дампе ты прыгаеш на 4039ес. Это функция показывает диалог регистрации и вычодит. Почему этот адрес? Может ты ошибся ;) Потому что оригинал прыгает на 403d8c...



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 08 июля 2007 23:06
· Личное сообщение · #16

pixl пишет:
оригинал прыгает на 403d8c

Может быть. Откуда я взял этот адрес я уже писал выше. Получилось так, что я возился с файлом уже просрочившим триал. Может быть там есть, что-то типа враппера. То есть вызываются похожие функции, а дальше код идет в совсем другом направлении. Попробую еще поковыряться завтра, а то на меня моя женщина уже ругается. Пошел исполнять псевдосупружеские обязанности. Это у меня лучше получается, чем аспротект снимать



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 09 июля 2007 11:17
· Личное сообщение · #17

Доброе утро Ну как успехи? Нашел что нибудь?
Я вот тут поковырялся еще немного. Если прыгать на тот адрес, что ты дал, то заметно, что появляется окно программы, а потом исчезает. Где оно исчезает я вроде отловил.

004B46AE JNZ SHORT rrr65687.004B46CC
004B46B0 CMP DWORD PTR DS:[4D2440],0
004B46B7 JE SHORT rrr65687.004B46BF ; Если ноль, то нафиг
004B46B9 CALL DWORD PTR DS:[4D2440]
004B46BF CALL rrr65687.004B53D4 ; Закрывается программа
004B46C4 CALL DWORD PTR DS:[4D2444] ; rrr65687.004AFC2C


Вот этот код интересный. Он похож на тот, что я приводил выше. То есть сравнивается значение в ячейке 4D2440, а дальше либо навылет, если оно равно нулю, либо выполняется переход на адрес, который там лежит. У меня (в просроченной программе) это значение равно нулю. Можешь посмотреть какое значение у тебя в этой ячейке?

З.Ы. Жалко, что никто из "взрослых" не обращает внимания на этот топик. Сильно сложная защита для чайников



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 09 июля 2007 12:16
· Личное сообщение · #18

pixl Ты какой класс закончил? Второй или третий. Я в твоем посте pixl пишет:Спасибо за такой длинный ответ...... насчитал 17 орфографических ошибок
Sturgeon пишет:
Сильно сложная защита для чайников

В любом туторе для чайников пишут: "теперь посмотрим ссылки на строки"
А ты посмотрел? Если бы посмотрел, увидел бы
00408901 MOV EDX, 004BCE71 ; ASCII "Sorry, but your 15-day trial has expired!
Please, register your copy."
Чуть выше ссылка на эту строку. Перейди по ней и увидишь три условных джампа. Дальше думаю разберешься сам



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 09 июля 2007 12:37 · Поправил: Sturgeon
· Личное сообщение · #19

Вот ведь...
crc1
Конечно смотрел строки. И нашел даже целых четыре! И переходы видел.
Я ступил в том, что немного неправильно поправил адрес в дампе. (Это можно почитать выше). И у меня вместо нормального Эбаута вылезала "пустышка". И, естественно, правка всех этих переходов ничего не давала.
А после того, как я исправил адрес на более правильный, я уже и не лез в эти строки, потому что думал, что все намного сложнее. А оказалась лажа. В следующий раз буду иметь ввиду.
Уже в который раз хочу выразить искреннюю благодарность и признательность crc1 за помощь и разъяснения!
P.S. Вроде без ошибок все написал;)



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 09 июля 2007 22:18
· Личное сообщение · #20

crc1 пишет:
Ты какой класс закончил? Второй или третий. Я в твоем посте pixl пишет:Спасибо за такой длинный ответ...... насчитал 17 орфографических ошибок


12 я закончил. Есле бе ты по русски лет восем не говорил то мы бе посмотрели сколко у тебя ошибок было ;) Извените за все ошибки, я пытаюсь писать как чисто как могу

Спасибо за все ответы.. Наконецто я полностью ее распаковал и убрал етот наг. Программа конешно хреновая, но ввиде урока по распоковке хороша...

Sturgeon: Почемуто у меня только твой дамп работает... в моем некоторые крашы... попробую все сначала сделать. Конечно сейчас у меня уже есть работающей дамп для сравнения



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 09 июля 2007 23:48
· Личное сообщение · #21

Слушай, а наг как нашел и убрал? Чего-то я поковырялся ни ничего не нашел.



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2007 00:28 · Поправил: pixl
· Личное сообщение · #22

Ок, посмотри на адрес 4бб4е8, сдес я думал что ты чтото поменял, потомучто информациа на этом адресе отличается в моем дампе. Я поставил мемори бряк на этих четырех баитах и запустил дамп. Брякнулся на 41д602. Решил поменять число на этих баитах на 10, чтобы обое джампа не прыголи ни куда. Нажимаю ф9 и вижу что у меня 16 дней триала. Оказивается эти 4 байта на 4бб4е8 репрезентируют сколько дней триала у тебя осталось. Это важно исправить чтобы у тебя окно не скрывалось.

Теперь на наг. Запускаю программу и поевляется наг. Паузирую программу и нажимаю алт ф9 чтобы дойти до кода программы. Выхожу на каком нибуть адресе в программе (может быть любой адрес) и ищу какуюнебуть петлю каторая сидит на наге. Для этого я иду с ф8 в оле и к концу выхожу на петле каторая находится на 4614с5. Ставлю бряк после петли и нажимаю ок на наге. Брякыюсь после петли и иду с ф8.. На 461539 пропадает наг.. иду далше с ф8. В конце концов выхожу на 408883. Ставлю бряк на вызове и перезагружаю программу. Пробою аннулировать вызов и жму ф9. Ура!! нет нага!

Интересно что я отвечаю сам на мой вопрос.. хотя без ваших ответов я бы навернека сейчас сидел на стадии распаковки



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 10 июля 2007 07:56 · Поправил: crc1
· Личное сообщение · #23

Sturgeon пишет:
Слушай, а наг как нашел и убрал

Вот три условных джампа, про которые я писал выше
00408266 TEST CL, CL
00408268 JE 0040896C ;если прыгнешь здесь, НАГ'а не будет. Прога зарегана
0040826E CMP DWORD PTR DS:[4BB4E4], 0
00408275 JLE 00408888 ; Прыжок тут - конец триала, прога закроется
0040827B CMP DWORD PTR DS:[4BB4E4], 9
00408282 JLE 0040857E ;здесь(не важно прыг/не прыг) - НАГ, работа в триале

В переменную [4BB4E4] AsProtect пишет кол-во триальных дней. Ты снял дамп когда триал кончился, т.е. в переменной [4BB4E4] было FFFFFFFF, поэтому и дамп твой закрывается
pixl
Извиняй, не хотел обидеть



Ранг: 105.9 (ветеран), 1thx
Активность: 0.090
Статус: Участник

Создано: 10 июля 2007 11:18
· Личное сообщение · #24

Все понятно. А я все джампы взял и занопил. Поэтому имел проблемы. Кстати, таких мест вроде два?
pixlМетод похож на туторы от Лены;)
И еще один вопрос. Если вы снимаете дамп с рабочй проги, то есть у которой еще не кончился триал, естьли там проблемы с пропавшим адресом? Ну, то есть надо ли будет вручную забивать адрес перехода?



Ранг: 138.7 (ветеран), 135thx
Активность: 0.110
Статус: Участник

Создано: 10 июля 2007 15:08
· Личное сообщение · #25

Sturgeon пишет:
естьли там проблемы с пропавшим адресом?

А ты попробуй Трашрегом сними аспровский триал, потом сними новый дамп



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 10 июля 2007 22:30
· Личное сообщение · #26

Sturgeon: У меня во время дампа адрес ноль. Беру дамп на b421fb, прямо после того как аспр копирует все три декриптированные сектии на свое место.


 eXeL@B —› Вопросы новичков —› Проблема после распаковки (аспр)
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати