Оригинальный DVD-ROM: eXeL@B DVD !
eXeL@B ВИДЕОКУРС !

ВИДЕОКУРС ВЗЛОМ
выпущен 28 января!


УЗНАТЬ БОЛЬШЕ >>
Домой | Статьи | RAR-cтатьи | FAQ | Форум | Скачать | Видеокурс
Новичку | Ссылки | Программирование | Интервью | Архив | Связь

АРХИВ ФОРУМА eXeL@B
https://exelab.ru/f/

   

gRad2003 И опять ASProtect 1.23 ... Находясь на EP (bpm 401000 x) ставлю


gRad2003 И опять ASProtect 1.23 ... Находясь на EP (bpm 401000 x) ставлю
bpm esp-24
После второй остановки вроде должен находиться на такой конструкции:
popad
jmp eax (eax=OEP)
Но похожего не наблюдалось...
Так вышеописанное действительно только до ASProtect 1.2, или у меня проблемы с руками
DiveSlip :: Ну во-первых прерываний (остановок) должно быть не два, а больше (лично у меня от 19-25). А во-вторых будет не:
popad
jmp eax (eax=OEP)
а вот что:
pushad
pushfd
........
popfd
popad
ret, отсюда надо трассировать до тех пор пока не увидишь:
0000
0000
0000 <--- Тут будут спертые восстановленные байты
0000
0000
call lalalatopolya <--- первая процедура
tut_chto_ugodno <--- мы окажемся тут
Вот ты и рядом с ОЕР, это правда я выяснил только что с помощью некого MozgC

MozgC :: вообщем чтобы не запутаться в срабатываниях bpm esp-24
ставь бряк на bpx mapviewoffile.
При срабатывании бряка когда он будет вызван из исследуемой программы пиши bpm esp-24 где вместо esp подставляй свое значение esp, которое при старте программы.
Вообще если аспротект относительно старый, 1.2 - начальные версии 1.23, то там надо ставить бряк на esp-4 и тогда действительно прервешься на popad после чего будет либо jmp OEP, либо push OEP, ret
Если аспротект новый, то там будут спертые байты, сложность и вид спертых и замусоренных байт зависят от версии аспротекта. Ты должен (после того как прервался по bpx mapviewoffile и поставил бряк на bpm esp-24) нажимать F5 до тех пор, пока не увидишь начало спертых байт. Как узнать начало ? Это будет выглядить как странные команды, частые jmp, постоянная работа со стеком. Далее все зависит от версии аспра. Если аспр совсем новый, то мусора, в котором перемешаны спертые команды будет очень и очень много. В этом случае надо как начнутся спертые байты, идти по ним с помощью F10 до первого ret’a (ниже которого будет много нулей). Потом когда сработает команда ret ты вылетишь на

pushad
pushfd
........
popfd
popad
ret

Когда сработает и этот ret то иди еще до одного ret’а а потом еще возможно до одного. Остановись тогда, когда после выполнения ret’a ты окажешься в таком месте:

0000
0000
0000 <--- Тут будут спертые восстановленные байты
0000
0000
call lalalatopolya <--- первая процедура
tut_chto_ugodno <--- мы окажемся тут

call lalalatopolya может выглядеть не как call а как левые команды, если отладчик не правильно распознает эти байты. Тогда ориентируйся по нулям выше этого места. Первый или второй (если первый относится к предыдщей команде) и будет OEP.

Это справедливо для последней версии аспра.

В чуть более старых версиях мусора поменьше, и прыжок на OEP там будет либо как jmp OEP либо как
push OEP
ret

В этом случае мусора будет максимум на 2 экрана софтайса.

Не думаю, что мое писалово тебе чем-то поможет. Так как это надо самому пробовать пробовать и пробовать, а лучше прочитать полную статью. Когда-нибудь я ее допишу =)))

gRad2003 :: >> esp, которое при старте программы
Т.е. надо запомнить значение esp находясь на 401000, или в некотором другом месте?

MozgC :: Вот вопрос из ФАКа:

Q: Читал статьи по распаковке программ, в частности по распаковке AsProtect и там почему-то пишут, что надо ставить breakpoint на esp-4 или esp-24 для нахождения OEP. Почему?
A: Привожу отрывок из своей статьи (MozgC):

"Для нахождения OEP используем тот факт, что при старте программы в Windows, указатель на верхушку стека (esp) должен быть одним и тем же. Это не обязательно, но это стандарт. Например, в Windows 2K/XP, esp при старте программы равен 12FFC4h. Хотя конечно если изменить esp вручную, ради интереса, находясь на EP, то ничего страшного не произойдет. Однако, повторюсь, такой стандарт сохраняется, и мы его используем для нахождения OEP. При запуске программы, упакованной ASProtect’ом, esp равен этому стандартному значению. Так как ASProtect во время своей работы следит за стеком (т.е. сколько поместил в стек, столько потом и достал из стека), то перед прыжком на OEP esp должен быть опять равен этому "стандартному значению". Например в ранних версиях ASProtect’a, когда ASProtect восстанавливал стек перед переходом на OEP, считывалось значение в стеке по адресу esp-4 (имеется ввиду что esp = "стандартному значению") следующий элемент стека уже был по адресу esp, и ASProtect его трогать не должен, т.к. не он ложил этот элемент в стек. Т.е. используя тот факт, что последним будет считываться значение по адресу esp-4, можно поставить брейкпоинт на тот момент, когда это будет происходить (bpm esp-4), и когда этот брейкпоинт сработает последний раз перед непосредтвенным запуском программы, мы окажемся перед переходом на OEP"

Если вдруг не понял, то значение esp при старте программ в Windows всегда одинаковое, его можно посмотреть остановившись на EP программы. В частности в твоем случае с ASProtectom, EP = 401000, там и смотри.






   
Оригинальный DVD-ROM: eXeL@B DVD !


Вы находитесь на EXELAB.rU
Проект ReactOS