Сейчас на форуме: rtsgreg1989, zds, _MBK_ (+5 невидимых) |
![]() |
eXeL@B —› Основной форум —› Лоадер не тормозит прогу. Почему? |
. 1 . 2 . >> |
Посл.ответ | Сообщение |
|
Создано: 05 сентября 2007 11:53 · Личное сообщение · #1 Есть прога накрытая StarForce v.3.4.49.1 Сделал лоадер, тормознул на OEP, дамп, импорт и все ОК, старфос отломан. Вышла новая версия проги. Версия стара 3.4.76.0 Опять делаю лоадер, но прога на OEP не тормозитцо, а запускается. Аттачусь к проге, смотрю на OEP байты EBFEh, т.е. прога в памяти пропатчена, а не тормозится ![]() Может кто-нить че посоветует OEP нашел 100% Прога на делфях. Вот исходник лодера .486 .model flat, stdcall option casemap :none include \masm32\include\windows.inc include \masm32\include\masm32.inc include \masm32\include\user32.inc include \masm32\include\kernel32.inc includelib \masm32\lib\masm32.lib includelib \masm32\lib\user32.lib includelib \masm32\lib\kernel32.lib .data hWnd dd 0 App db "Error",0 Err1 db "Program not found ",0 prog db "C:\Program Files\AD\AD.exe",0 bufwr DWORD 0EBh bufwr1 DWORD 0FEh va DWORD 0074E03Ch va1 DWORD 0074E03Dh .data? bufr dw ? pinfo PROCESS_INFORMATION <> sinfo STARTUPINFO <> n DWORD ? .code start: invoke CreateProcess,addr prog,NULL,NULL,NULL,FALSE,NULL,NULL,NULL,addr sinfo,addr pinfo .IF eax == 0 invoke MessageBox,NULL,addr Err1,addr App,MB_OK invoke ExitProcess,0 .ENDIF .WHILE TRUE invoke ReadProcessMemory,pinfo.hProcess,va,addr bufr,1,n .IF eax != 0 .IF bufr == 055h invoke SuspendThread,addr pinfo.hThread invoke WriteProcessMemory,pinfo.hProcess,va,addr bufwr,1,n invoke WriteProcessMemory,pinfo.hProcess,va1,addr bufwr1,1,n invoke ResumeThread,addr pinfo.hThread invoke CloseHandle,pinfo.hThread invoke ExitProcess,0 .ENDIF .ENDIF .ENDW end start ![]() |
|
Создано: 05 сентября 2007 12:09 · Личное сообщение · #2 |
|
Создано: 05 сентября 2007 12:19 · Личное сообщение · #3 |
|
Создано: 05 сентября 2007 12:22 · Личное сообщение · #4 |
|
Создано: 05 сентября 2007 12:50 · Личное сообщение · #5 |
|
Создано: 05 сентября 2007 12:56 · Личное сообщение · #6 |
|
Создано: 05 сентября 2007 13:12 · Личное сообщение · #7 |
|
Создано: 05 сентября 2007 13:12 · Личное сообщение · #8 |
|
Создано: 05 сентября 2007 13:30 · Личное сообщение · #9 |
|
Создано: 05 сентября 2007 13:50 · Личное сообщение · #10 |
|
Создано: 05 сентября 2007 14:08 · Личное сообщение · #11 @ crc1 Странно, что у тебя в первый раз получилось. Попробуй так, может повезет опять. Но лучше делать по науке. invoke SetThreadPriority,addr pinfo.hThread,THREAD_PRIORITY_LOWEST .WHILE TRUE invoke SuspendThread,addr pinfo.hThread invoke ReadProcessMemory,pinfo.hProcess,va,addr bufr,1,n .IF eax != 0 .IF bufr == 055h invoke WriteProcessMemory,pinfo.hProcess,va,addr bufwr,1,n invoke WriteProcessMemory,pinfo.hProcess,va1,addr bufwr1,1,n invoke ResumeThread,addr pinfo.hThread invoke CloseHandle,pinfo.hThread invoke ExitProcess,0 .ENDIF .ENDIF invoke ResumeThread,addr pinfo.hThread .ENDW ![]() |
|
Создано: 05 сентября 2007 14:09 · Личное сообщение · #12 |
|
Создано: 05 сентября 2007 14:20 · Личное сообщение · #13 |
|
Создано: 05 сентября 2007 15:34 · Личное сообщение · #14 |
|
Создано: 05 сентября 2007 15:36 · Личное сообщение · #15 Конечно, при следущей загрузке лоадера будет дефолтный приоритет. Как вариант-можешь его менять сразу из лоадера. Точного кода под рукой нет, но уверен, что гугл и дофига сайтов по программированию это знают. Насчёт лоадеров-также кода под рукой нет, посмотри примеры других лоадеров, статейки почитай, типа статеек по трейсерам у ARTeam. Если кратко, то процесс дебажиццо фактически твоим лоадером и в нужный момент меняет память. ![]() |
|
Создано: 05 сентября 2007 19:25 · Личное сообщение · #16 ~~ в лоадере для одной ботвы (написан на VS2005 C++) применил такой алгоритм : читаем необходимые байты до тех пор, пока они не станут такие, какие должны быть, затем РайтПроцессМемори + плюс сразу читаем эту мемори - такая как нам надо ? ок, выход, нет - пишем опять + после РайтПроцессМемори вызов ГетЛастЕррор для контроля + все это в консольной версии с выводом ретурнВалуе от ГетЛастЕррора и выводом прочитанных и вписанных байтов - этакая отладка визуальная... .... тк написана на С++ и успевает вписать - то Резум и Саспент убрал, а у тебя на дельфине, то код на АССЕМБЛЕРЕ успее 100% !!! ... кстати, может защита проверяет участок кода и есть резон писать теда до тех пор, пока он не пройдет через EIP ? ![]() |
|
Создано: 05 сентября 2007 20:35 · Личное сообщение · #17 |
|
Создано: 05 сентября 2007 21:01 · Личное сообщение · #18 vins пишет: а не пробывал запускать процес суспенденым, а не суспендить его потом? ...это,во-первых. А во-вторых лучше действительно перехватывать функции в исследуемом процессе,например,ту же GetModuleHandleA.Перехватывать методом внедрения своей библиотеки,а потом из этой библиотеки сплайсить функции.Почитать можно например тут: www.xakep.ru/post/28092/default.asp?print=true ...смотри тот раздел,что "Внедрение DLL, находящейся на диске". Приложу исходник с моей программкой для перехвата функции GetModuleHandleA, чтобы остановиться чуть ниже OEP.Не знаю правда как это будет работать со старом,но с седьмым Securom'ом работает.В общем,смотри исходник(MASM32) и заодно потестишь ![]() ![]() ----- the Power of Reversing team ![]() |
|
Создано: 06 сентября 2007 05:58 · Личное сообщение · #19 |
|
Создано: 06 сентября 2007 10:07 · Личное сообщение · #20 |
|
Создано: 06 сентября 2007 11:29 · Личное сообщение · #21 |
|
Создано: 06 сентября 2007 11:41 · Личное сообщение · #22 |
|
Создано: 06 сентября 2007 19:01 · Личное сообщение · #23 |
|
Создано: 06 сентября 2007 20:02 · Личное сообщение · #24 |
|
Создано: 06 сентября 2007 21:05 · Поправил: vins · Личное сообщение · #25 |
|
Создано: 07 сентября 2007 07:03 · Личное сообщение · #26 |
|
Создано: 07 сентября 2007 17:03 · Личное сообщение · #27 |
|
Создано: 08 сентября 2007 05:57 · Личное сообщение · #28 можно юзать в EBFE где-нить по ходу распаковки в таком месте чтобы на этом EBFE код c OEP был уже распакован, тогда можно циклически проверять код с OEP(или другого места проги) не боясь что прога запустится, как только код распаковался можно сделать SuspendThread, убрать EBFE далее по смыслу в зависимости от сложности пакера ![]() |
|
Создано: 08 сентября 2007 11:38 · Личное сообщение · #29 |
|
Создано: 08 сентября 2007 23:00 · Поправил: Faza · Личное сообщение · #30 crc1 то место это второй Jmp eax в VM Циклишь прогу на ОЕП стара, аттачишся, из ОЕП идешь в вызов ВМ смотришь конец функции там есть jmp eax , ставишь на него бряк (один бряк 3 стар позволяет ольке поставить ) , правишь OEP отправляешь прогу на волю как следствие брякаешься смотришь что там в eax , в этом eax идешь в низ функции внимательно высматриваешь первый jmp "кудатотам" , идешь в"кудатотам" там будет начало, таково вида MOV EDX,DWORD PTR DS:[EDI] , в конце этой штуки есть jmp eax за ним куча нулей , там и патч. Адрес второго джампа один и тот же так, что делаешь лоадер, чтоб он туда сразу пачил как надо , через этот джам стар пробежит раз тыщу и раз сто после того как распакует прогу и будет мудрить с импортом, так что там не промахнешся и передачей управления вагон. ![]() |
. 1 . 2 . >> |
![]() |
eXeL@B —› Основной форум —› Лоадер не тормозит прогу. Почему? |