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

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


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

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

   

Python


Python_Max Неважно чем запакована/запротекчена программа! Сдесь будет описан способ патча, который не требует распаковки «исследуемой» программы.
Основная мысль: Подождем пока пакер/протектор сам это сделает!
Основывается на Memory Patcher by -= Alex =- .
Надеюсь автор оригинала оставит сдесь свое мнение ;)

Python_Max :: Как все было.
Моя проблема подробно описана в теме «О patcher’e -=Alexa=-».
В двух словах: Необходимо снять наг. Прога защищена ASProtect’ом, нашел, где забить два NOP’а, чтобы решить проблему, нашел OEP, нашел jmp ‹OEP›, но изменить его на свой jump, как оказалось, невозможно. Тогда решил попробовать Memory Patcher by -= Alex =-, но с помощью него не успевались байты заменяться и наг все-равно появлялся, если записать их сразу после распаковки - Protection Error 15 :(

Решение.
Несмотря на то, что ASProtect - сила, а я, мягко говоря, начинающий (может у меня мало опыта и я ни разу не дотрассировал до конца код аспра, но мозги, слава Богу, работают :) ), вобщем я не остановился! Как оказалось ненапрасно.
Решил очередной раз посмотреть что делает программа сразу после распаковки.
Трассирование начал с OEP. Дошел до места:
mov [0074C4DC],EAX
и задумался... Посмотрел, что в EAX - там наш ImageBase 0040000, а что у нас по адресу 0074C4DC до комманды MOV? Нули! Хе-хе... Вот оно! Т.е. после этого мува у нас по вполне определенному, а главное _постоянному_ адресу [0074C4DE] находится 40h !!!

Вобщем в код мемори патчера добавил еще один ReadProcessMemory и все!
Вот кусок кода (мои комменты в квадратных скобках, комменты автора оставил):

[===============================]
while true do
// Читаем один байт [тот, который нужно изменить, не знаю почему именно этот :) ]
if readprocessmemory(lppi.hProcess,pointer($73F5EC),@ buf[0],1,i)
then
if buf[0]‹›$0 then // Проверяем на распакованность, если не 0 - то распаковалась

// [ Теперь то, о чем я говорил ]
// [ По сути, это проверка на то, закончил ли работу ASProtect ]

if readprocessmemory(lppi.hProcess,pointer($74C4DE),@ buf[0],1,i)
then if buf[0]‹›$0 then
begin
// [Это уже не нужно]
// Подождем, пока ASProtect проверит память,
// иначе будет писать ’Protection Error 15’
// sleep(300);
// [То, что вверху уже не нужно!!!]
//остановили процесс
suspendthread(lppi.hThread);
//записали что хотели
writeprocessmemory(lppi.hProcess,pointer($73F5EC), @buf[1],1,i);
writeprocessmemory(lppi.hProcess,pointer($73F5ED), @buf[1],1,i);
//поехали дальше!
resumethread(lppi.hThread);
closehandle(lppi.hprocess);
// Сами закрываемся
halt;
end;
[===============================]

Я думаю, что если сделать так, как я написал, то будет САБЖ !!!
Скажите плиз, что думаете по этому поводу.

Да, чуть не забыл, если кто такое уже делал, то почему не отозвались?

ЗЫ: убрав наг, я убрал триал, сам того не ожидав :)))
Thx 2 -= Alex =- 4 Memory Patcher :)

MozgC [TSRh] :: Блин это же убого... лоадеры... Я бы лучше не релизил программу чем релизить лоадер. Хотя не думаю что есть вариант что нельзя сделать cracked.exe, но можно лоадер. Всегда лучше распаковать, чем делать лоадер.

Python_Max :: Я ее релизить не собираюсь.

А cracked.exe распакованный ты бы выложил?

MozgC [TSRh] :: А я все время выкладываю =) И не только я. А лоадеры вообще многие за релиз не считают.

-= ALEX =- :: ну а теперь начнем по теме. вот этот адресок $74C4DE это чисто для тебя только такой. почему - попытаюсь объяснить. как я уже и говорил - многослойная паковка. чтобы что-то куда-то распаковать надо выделяется память. (VirtualAlloc) причем адрес указывающий на выделенную память может быть разным, а на других осях и вовсе другой. код же распаковщиков, или назовем его «тело аспра» оффсетнонезависим (о как назвал), поэтому ему по барабану какой будет адресок.... поэтому можешь радоваться что на твоем компе ну или даже пускай на такой же ОСи работает такой лоадер. Ну а если хочешь сделать лоадер для аспра, который будет точно на OEP останавливаться, придется пару деньков, а может даже и больше просидеть в отладчике и полностью проходить все этапы распаковки проги... можешь взглянуть как это делает asprdebuger (про который все тут речь ведут) благо исходники есть.... наверное после просмотра у тебя желание пропадет. в общем смотри, дело твое. А вообще если сделать такой кряк, т.е. лоадер для себя или для друга - это хорошо. Но если уж захотел релизить, то увы - лоадеры не в моде :(
P.S. статью эту я написал тогда, когда только-только начал учиться этому искусству... тогда я даже и не представлял, что ваще такое АСПР... просто я заметил, что не всегда выскакивает месага, если подряд лупить по файлу быстро... из этого сделал вывод, что нужно время на проверку... поэтому и ставил sleep. кстати, беспонтовый способ и зависит от проца.






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


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