Современные решения

для защиты Windows приложений

и восстановления исходного кода
АвтъA: vins. Дат? ??бликации: 21.10.2004

Рас????вк? ALEXPROT v1.0 beta 2

Цел?:
ALEXPROT v1.0 beta 2

ИыPтрументы:
OllyDbg
ImpRec

В ??инци??, та? ыGчего сльEыMго ыDту. Я та? ????? та? главыM? ыDудь@ство  ?то ????ыC? RDTSC.
КьKанда RDTSC вы?????ет чтение счетчи?? ??то? реал??ьB? времен? (TSC –Time Stamp Counter) содержимьD ??торого ин??ементирует?? ? ??ждым та??ьK ??ъGессорньB? ?др?. П??то?? ее ??жн? ис????зовать дл? ????чеыG? ????чествеыLьH ъGен?? работы ??ьBра???, ил? участк? ??да.

ВъC ??со? ??да бе? jmp’о?:

CODE NOW!
007C0B6E 83C4 04 ADD ESP,4
007C0B71 0F31 RDTSC
007C0B73 8BD8 MOV EBX,EAX
007C0B82 83C4 04 ADD ESP,4
007C0B85 8BCA MOV ECX,EDX
007C0B94 83C4 04 ADD ESP,4
007C0B97 0F31 RDTSC
007C0B99 2BC3 SUB EAX,EBX
007C0BA8 83C4 04 ADD ESP,4
007C0BAB 1BD1 SBB EDX,ECX
007C0BAD 0F31 RDTSC
007C0BAF 03C3 ADD EAX,EBX
007C0BBE 83C4 04 ADD ESP,4
007C0BC1 13D1 ADC EDX,ECX
007C0BC3 0F31 RDTSC
007C0BC5 2BC3 SUB EAX,EBX
007C0BD4 83C4 04 ADD ESP,4
007C0BEB 83C4 04 ADD ESP,4
007C0BEE 1BD1 SBB EDX,ECX
007C0BFD 83C4 04 ADD ESP,4
007C0C00 85D2 TEST EDX,EDX
007C0C02 ^75 D6 JNZ SHORT 007C0BDA ;??ъFьH ??ыжьI



чть@ ??ьHти ?то? ??? ыRжн? ??ъBто ?? jmp’а? добрат? до TEST EDX,EDX( выде??ем jmp ъьжи??ем Enter, тоже са??? ? call’а??), ??ставит? туда бр?? F2 ? за??стит? ??ьB?.

НачыD?

Запус??ем ??ьBра???, ? Options->Debugging Options->Exceptions снимае? га??? ? Ignore following exceptions. Запус??ем ??ьB?. Оъь ъBтаъьвливаетс? ыDскьJ??? ра? ъь:

CODE NOW!
00хххххх FFFF ??? ; Unknown command



??ъ@ус??ем ?то ?? Shift+F9.
ПъCьK буде?:

CODE NOW!
007C13C2 3300 XOR EAX,DWORD PTR DS:[EAX]
007C13C4 83C4 04 ADD ESP,4
007C13C7 FFE3 JMP EBX



ъьжи??ем 1 ра? Shift+F9 ? смъCри? чт? твъAит??? ? се??ии Code. Есл? ??? расшифрова???, то ищем та? чт? то ??хоже? ъь:

CODE NOW!
004095AC FF25 1E180200 JMP DWORD PTR DS:[2181E]
004095B2 FF25 0CBA1000 JMP DWORD PTR DS:[10BA0C]
004095B8 FF25 321D4F01 JMP DWORD PTR DS:[14F1D32]
004095BE FF25 1C33A700 JMP DWORD PTR DS:[A7331C]
004095C4 FF25 40025700 JMP DWORD PTR DS:[570240]
004095CA FF25 A6983F00 JMP DWORD PTR DS:[3F98A6]



?то ?? идее до??ыZ быть jmp’ы ъь Api фуыIци?.
Тепер? ставим ъь ?то? ??? бр?? ъь за??сь (Memory, on write), ??ъ@ус??ем ?????тишеыZ ?? Shift+F9
И ъBтаъьвливае??? ъь:

CODE NOW!
007C0C05 8901 MOV DWORD PTR DS:[ECX],EAX
007C0C07 83C7 04 ADD EDI,4
007C0C0A FECB DEC BL
007C0C0C 58 POP EAX



Тут ??ьGсхьCит за??сь ??реходникьA. В ecx адре? ??да ??ше?, eax адре? ??реходник?.
Тепер? ищем ??ст? гд? ? eax за??сывает?? ?то адре?. Иде? ?? F8 до:

CODE NOW!
007C09C0 83C7 02 ADD EDI,2
007C09C3 57 PUSH EDI
007C09C4 FF95 C8244000 CALL DWORD PTR SS:[EBP+4024C8]
007C09CA 85C0 TEST EAX,EAX
007C09CC 0F85 AC000000 JNZ 007C0A7E



?то ??ст? ъь? ??игьCит??? дл? восстаыMвлен?? им??рт?. ЗапьKинае? адре?.
Иде? да??ше ? доходи? до:

CODE NOW!
007C0A96 57 PUSH EDI
007C0A97 FFB5 7C244000 PUSH DWORD PTR SS:[EBP+40247C]
007C0A9D FF95 C4244000 CALL DWORD PTR SS:[EBP+4024C4] KERNEL32.GetProcAddress
007C0AA3 33DB XOR EBX,EBX



ту? идет ????чеыG? адресо? Api.
Дал??? доходи? до:

CODE NOW!
007C0B58 50 PUSH EAX ; shell32.ShellExecuteA
007C0B59 8B0F MOV ECX,DWORD PTR DS:[EDI]
007C0B5B E8 62090000 CALL 007C14C2
007C0B60 60 PUSHAD



В ?то? Call’е реал??ые адреса ?????тс? ъь ??реходник?.
Так, те??рь ?? знае? важные ??ст?:
1) 007C14C2 ту? созд??тс? ??реходник?
2) 007C0C05 ту? ??? вписыв??тс?
3) 007C09C0 ????ет?? библиоте??

Перезапус??ем ??ьB? ? ъBтаъьвливае??? ъь 1 ??ст?.
В eax ? ecx ??? ра? то чт? ? че? ? уж? говори?, адре? api ? адре? jmp [xxxx]. В ??ыU? ?то? ??ъGедур?
? eax уж? адре? ??реходник?, ? та? ??? ?? ъь? ыD ыRже?, ?? туда ъь??ше? свьH ???:

CODE NOW!
007C14C2 60 PUSHAD ;ъBтавл?ем
007C14C3 BA 04B04000 MOV EDX,40B000 ;ту? буде? ъь? им??рт
007C14C8 66:8305 C4147C00 04 ADD WORD PTR DS:[7C14C4],4
;?то дл? увеличен?? 40B000 ъь 4 чть@ за??сывать адреса.
007C14D0 8902 MOV DWORD PTR DS:[EDX],EAX ;??ше? адре? ап?
007C14D2 8BC2 MOV EAX,EDX ;те??рь ? еа? адре? гд? ??жи? Api
007C14D4 8901 MOV DWORD PTR DS:[ECX],EAX ;??ше? ег? ??да ъьдо
007C14D6 61 POPAD ;вс? ъь ??ст?
007C14D7 C3 RETN



Стави? бр?? ъь втъAьH адре? ? за??скае?.
ТъA??зи?:

CODE NOW!
007C0C04 61 POPAD
007C0C05 8901 MOV DWORD PTR DS:[ECX],EAX ; ?то ъьдо



заыM??ть та? ??? ?? уж? туда
за??са?? то чт? ыRжн?.

CODE NOW!
007C0C07 83C7 04 ADD EDI,4



П??иж? буде?:
CODE NOW!
007C0C22 0F84 DE000000 JE 007C0D06 ;?то выхо?



Стави? бр?? ъь 3 адре?.
Останав??ваем??. У ъь? уж? есть ыMрмал??ые адреса ? им??рт?, ыM ыRжн? ещ? добавить разделение ??жд? разным? ??ба??. Тут вызывает LoadLibrary , ? ъь? ъьдо добавить ??да свьH ???. С??трим ??да ?? ??идем ?? джам??? ? за????ъьем. Тепер? ??ше? :

CODE NOW!
007C09C0 66:8305 C4147C00 04 ADD WORD PTR DS:[7C14C4],4 добавл?ем ??ъ@ус?
007C09C8 83C7 02 ADD EDI,2 ;?то старый ???
007C09CB 57 PUSH EDI
007C09CC FF95 C8244000 CALL DWORD PTR SS:[EBP+4024C8]
007C09D2 85C0 TEST EAX,EAX
007C09D4 0F85 A4000000 JNZ 007C0A7E
007C09DA 60 PUSHAD
007C09DB E9 96000000 JMP 007C0A76 то ??ст? ??да ?? ??иш?? ?? джам???
007C09E0 90 NOP



ПъHти вс?. Тепер? снимае? вс? бр??? ? ставим бр?? ъь 007C0D06, ?то то ??да ?? ??ыгыD? ъь выходе. Запус??ем, тормьFим ъь:

CODE NOW!
007C0D06 E8 97060000 CALL 007C13A2



заходи? ? ?то? call. Стави? бр?? сраз? ъь

CODE NOW!
007C13C4 83C4 04 ADD ESP,4
007C13C7 FFE3 JMP EBX



за??скае?, ??ъ@ус??ем ?????тишеыZ. ПъB?? JMP EBX ????даем ъь ??чу rdtsc. Про??учивае? ? ыG? ? ищем чт? ыG будь ??хоже? ъь выхо?:

CODE NOW!
007C11DA 8B85 AD234000 MOV EAX,DWORD PTR SS:[EBP+4023AD]
007C11E0 894424 1C MOV DWORD PTR SS:[ESP+1C],EAX
007C11E4 61 POPAD
007C11E5 FFE0 JMP EAX
007C11E7 60 PUSHAD
007C11E8 8BF0 MOV ESI,EAX
007C11EA 8BF9 MOV EDI,ECX
007C11EC FC CLD
007C11ED 33C9 XOR ECX,ECX



ставим бр?? ъь JMP EAX за??скае?.
ПъB?? ?того jmp ьIазывае??? ? ??ст? гд? идет вы????ение сперты? байт. Так ??? та? ??чт? вс? ????ыC? ??втъA??тс?, ??жн? ъьйт? ??вы?, ?то ? буду? сперты?. Что? быстре?, ??жн? сделат? трей?: ъC??ывае? Command line, ??ше? tc eip== адре? ??следыD? инстру??ии, ? ъь? ?то:
007E0C5E -E9 A45EC2FF JMP alexprot.00406B07
значит tc eip==007e0c5e. КьBда бр???ет?? жмем ??ьB? ра? ъь “–? смъCри? ъь регистры ? ъь стек, ъь то? ????ыC? гд? буде? ????ть?? ?то ? буде? сперта? ????ыC?, ? ъьше? случае ?то
007E07EF 6A 00 PUSH 0
Ж??? F8 ? ?? ъь OEP те??рь восстаъьвливае? сперты? байт?, да??им ? ??икручиваем им??рт.

МьEет, ??жн? бы?? ? ?? другьK?, ыM ?то ??рвьD чт? ??иш?? ??? ? го??ву
Усе

Комментарии

Добавил: WELL Дата: 21.10.2004

Взяли заломали Лёхин протектор. Редиски =)

Добавил: Anonymous Дата: 21.10.2004

DrGolova автораспаковщик даже написал, а китайцы тутор написали по распаковке

Добавил: vins Дата: 21.10.2004

Понятно хоть написано? :)

Добавил: Anonymous Дата: 22.10.2004

Да, все отлично


Добавление комментария


Ваше имя (на форуме):

Ваш пароль (на форуме):

Комментарии могут добавлять только пользователи,
зарегистрированные на форуме данного сайта. Если Вы не
зарегистрированы, то сначала зарегистрируйтесь тут

Комментарий: