Исследование крякмикса от SerHackПриветствую! Сегодня мы будем исследовать крякмис , любе3но и3готовленный SerHack'ом .
Target : CrackMe by SerHack ....::Приступим::.... Крякмис не требует распаковки для своего в3лома , тк UPX не особо 3аботиться о 3ащите программы . C первого в3гляда кажется , что все очень 3апутанно , но это не так [вы сами скоро в этом убедитесь] . Вводим левые данные ....
name : DrNet .... И вылетает стандартный мессагбокс .... Вообще маленькие программы очень часто исполь3уют API , а это нам на руку -] . Я предлагаю начать исследование с бряка на GetDlgItemtextA . 0167:0040107E E81B040000 CALL USER32!GetDlgItemTextA 0167:00401083 85C0 TEST EAX,EAX 0167:00401085 0F845C020000 JZ 004012E7Ввели ли мы чего-нибудь в поле name ? 0167:0040108B 83F803 CMP EAX,03 0167:0040108E 0F8C37020000 JL 004012CBName должен быть >= 3 0167:004010B7 A1D2204000 MOV EAX,[004020D2] // в eax 4 символа name 0167:004010BC A393204000 MOV [00402093],EAX // эти 4 символа в другое место -] 0167:004010C1 B9A8204000 MOV ECX,004020A8 // в ecx адрес name 0167:004010C6 51 PUSH ECX // Передаем 0167:004010C7 6893204000 PUSH 00402093 // параметры 0167:004010CC 68BD204000 PUSH 004020BD 0167:004010D1 E8B9020000 CALL 0040138F // вот этой ф-ции 0167:004010D6 83C408 ADD ESP,08 // 0167:004010D9 0F84D0010000 JZ 004012AF // комп 3ависает , если прыгаем ;] 0167:004010DF 59 POP ECX // в ecx адрес name 0167:004010E0 8A01 MOV AL,[ECX] // AL=1-ый символ password в hex 0167:004010E2 3C37 CMP AL,37 // сравниваем с 37h='7' 0167:004010E4 0F84BD010000 JZ 004012A7Тут происходит прыжок на код , который и3меняет символ password на '#' 0167:004010EA 33D2 XOR EDX,EDX // очищение edx 0167:004010EC BA32000000 MOV EDX,00000032 // начало и3вращений +] 0167:004010F1 42 INC EDX // 0167:004010F2 C1E204 SHL EDX,04 // 0167:004010F5 42 INC EDX // 0167:004010F6 42 INC EDX // 0167:004010F7 4A DEC EDX // Конец и3вращений 0167:004010F8 8B19 MOV EBX,[ECX] 0167:004010FA C1EB08 SHR EBX,08 0167:004010FD 8ACB MOV CL,BL 0167:004010FF 80F953 CMP CL,53 0167:00401102 7404 JZ 00401108 0167:00401104 33D2 XOR EDX,EDX 0167:00401106 EB01 JMP 00401109 0167:00401108 42 INC EDX 0167:00401109 52 PUSH EDX 0167:0040110A 6893204000 PUSH 00402093 0167:0040110F 68BD204000 PUSH 004020BD 0167:00401114 E876020000 CALL 0040138F 0167:00401119 83C408 ADD ESP,08 0167:0040111C 5A POP EDX 0167:0040111D 85D2 TEST EDX,EDX 0167:0040111F 7505 JNZ 00401126 // продолжение 0167:00401121 E989010000 JMP 004012AF // обломЭтот кусок добирается до второго символа passa , и если он неравен 'S' , то ксорится edx , в котором находится ре3ультат и3вращений ;] => мессаг "Bad cracker" . Нам надо , чтобы 3начение сохранялось и осуществлялся джамп на продолжение проверки , 3аменяем 2-ой символ passa на 'S'. Продолжаем ......... 0167:00401126 33C0 XOR EAX,EAX 0167:00401128 33C9 XOR ECX,ECX 0167:0040112A 83F301 XOR EBX,01 0167:0040112D 33D2 XOR EDX,EDX 0167:0040112F B9A8204000 MOV ECX,004020A8 0167:00401134 33DB XOR EBX,EBX 0167:00401136 8A4102 MOV AL,[ECX+02] 0167:00401139 8A5903 MOV BL,[ECX+03] 0167:0040113C 8A5104 MOV DL,[ECX+04] 0167:0040113F 02D3 ADD DL,BL 0167:00401141 83F301 XOR EBX,01 0167:00401144 02C2 ADD AL,DL 0167:00401146 E9C0000000 JMP 0040120BСкладываем hex-3начения 3,4,5 cимвола passa , ре3ультат - в al . 0167:0040120B 33C9 XOR ECX,ECX 0167:0040120D B9D2204000 MOV ECX,004020D2 // в ecx offset name 0167:00401212 3D90000000 CMP EAX,00000090 0167:00401217 741D JZ 00401236 0167:00401219 3D96000000 CMP EAX,00000096 0167:0040121E 0F8401010000 JZ 00401325 0167:00401224 3D97000000 CMP EAX,00000097 0167:00401229 0F84F6000000 JZ 00401325Два интересных джампа 00401229 и 0040121E .. Мы прыгаем , если наша сумма = 96 or 97 , те например "222" , 3аменяем в нашем passe 3начения и имеем уже "0S22254321". 0167:00401325 8B01 MOV EAX,[ECX] // в eax 4 первых символа name 0167:00401327 83C001 ADD EAX,01 // первый символ name + 1 0167:0040132A 3A05AD204000 CMP AL,[004020AD] // первый символ name + 1 = 6 символу pass ? => pass="0S222E4321" 0167:00401330 0F8500FFFFFF JNZ 00401236 // нет - облом 0167:00401336 E93CFEFFFF JMP 00401177 // да - едем дальше ;) 0167:00401177 B035 MOV AL,35 0167:00401179 3A05AE204000 CMP AL,[004020AE] 0167:0040117F 0F842A010000 JZ 004012AF 0167:00401185 B036 MOV AL,36 0167:00401187 3A05AE204000 CMP AL,[004020AE] 0167:0040118D 0F841C010000 JZ 004012AF 0167:00401193 B037 MOV AL,37 0167:00401195 3A05AE204000 CMP AL,[004020AE] 0167:0040119B 0F840E010000 JZ 004012AF 0167:004011A1 B031 MOV AL,31 0167:004011A3 3A05AE204000 CMP AL,[004020AE] 0167:004011A9 0F8400010000 JZ 004012AF 0167:004011AF B023 MOV AL,23 0167:004011B1 3A05A8204000 CMP AL,[004020A8] 0167:004011B7 0F85F2000000 JNZ 004012AFТут куча прыжков к облому , и единственное нужное нам сравнение 004011B7 : первый символ должен быть '#' или '7' [помните почти самое начало 004010E4]. Теперь наш pass буде таким "#S222E4321" 0167:004011BD A0AE204000 MOV AL,[004020AE] 0167:004011C2 0402 ADD AL,02 0167:004011C4 33D2 XOR EDX,EDX 0167:004011C6 8A15AF204000 MOV DL,[004020AF] 0167:004011CC 3AC2 CMP AL,DL 0167:004011CE 7405 JZ 004011D5 0167:004011D0 E966010000 JMP 0040133BЕнтот кусок кода сравнивает код 8-ого cимвола passa c суммой [ascii(7 cимвол)+2] => pass : "#S222E4621", дальше идет луп , добираемся до 004011F6 . 0167:004011F6 A0AD204000 MOV AL,[004020AD] 0167:004011FB 3A05B0204000 CMP AL,[004020B0] 0167:00401201 0F85A8000000 JNZ 004012AF 0167:00401207 33DB XOR EBX,EBX 0167:00401209 EB52 JMP 0040125DВидим , что 6 cимвол passa должен быть равен 9-ому , иначе - облом . 0167:0040125D A0B1204000 MOV AL,[004020B1] 0167:00401262 3C00 CMP AL,00 0167:00401264 7449 JZ 004012AF 0167:00401266 A0B2204000 MOV AL,[004020B2] 0167:0040126B 3C00 CMP AL,00 0167:0040126D 7540 JNZ 004012AF 0167:0040126F E9FC000000 JMP 00401370Вот мы и добрались до конца ;] 10 cимвол должен быть [он может быть любым , но должен присутствовать ] . А 11 быть не должно , как и 12,13 ....
....::Концы , Итоги::.... ЗЫ Просьба не ругать 3а кодинг + орф. и грам. ошибки , а также очепятки . Greetz jump out to [TeaM | TSRh] , UOFG's members [special 2 aSL! 4 HASP -] ] , HangUp , SWW , xtin , HeX , Kernel[X] , ®ove® [FA] , 1580.10-7A , d1gg3r , Freshka , VIT-3000 , not NewLamer , Craig Wardman , CrashMaster , -=789=- , ВиталЯн , KaSa , QWE , nyncuk , mister_durst , ProspeR[Prosper0] , Motya , $h@m@n , Grinder , MaD , Do$y@ , StameskA , [TinageeR] , Ze-0 , Zloy_Root , 3l3m3nt [B-52] , Spl@+ , ab$ , GraF [cDt] , Bill Gay and other ......... |