![]() |
eXeL@B —› Вопросы новичков —› Помогите добить crackme |
Посл.ответ | Сообщение |
|
Создано: 07 сентября 2007 00:51 · Поправил: GlOFF · Личное сообщение · #1 |
|
Создано: 07 сентября 2007 12:01 · Личное сообщение · #2 |
|
Создано: 07 сентября 2007 13:31 · Личное сообщение · #3 Мне пока не понятно как это работает, но вот что я наколупал. Имя и пароль беруться посылкой сообщение WM_GETTEXT, сохраняются сначала в выделенную память по адресам 840000 и 850000, потом имя и пароль попадают в стек и память освобождается. Если трейсить вручную, то просто тонешь в исключениях, кода не видно, он отображается как dd, и все это завершается ошибкой по адресу 850000, там где у нас был пароль. Если не трейсить, а отпустить код по Shift + F9, то вылазит ошибка Debug detect. Ищо, кусок кода, который вызывает MessageBox закодирован или запакован, но это не важно. ![]() |
|
Создано: 07 сентября 2007 13:49 · Личное сообщение · #4 Весь фокус в том что где-то именно по таймеру или SEH обработчику идет и защита, и проверка валидности, но вот отладка затруднена и код очень не читабельный... Dr3d пишет: Ищо, кусок кода, который вызывает MessageBox закодирован или запакован, но это не важно. А мне кажется просто так код уложен, что олька не может правильно дизасмить Например есть код идет прыжок, но на адресс не равный текущему "выравниванию", поэтому как бы получается совсем другая интерпритация команд после прыжка... // Dr3d Спс, что откликнулся ![]() |
|
Создано: 07 сентября 2007 14:49 · Поправил: Dr3d · Личное сообщение · #5 GlOFF пишет: А мне кажется просто так код уложен, что олька не может правильно дизасмить Я тоже так подумал, но на самом деле не так. байтики не сходятся )) Я вот не пойму как он детектит дебагер, там все время слип и слип теоретически могу предполажить что да как, вот только не могу разобрать в этой проге как это сделано тяжеловато анализировать алгоритм по опкоду ![]() ![]() |
|
Создано: 07 сентября 2007 15:44 · Личное сообщение · #6 |
|
Создано: 07 сентября 2007 16:06 · Личное сообщение · #7 там два патока, один из которых именьшает на единицу DWORD по адресу 403063, и если это значение уменьшается до нуля - вылазит сообщение Debug Detect и завершается. По адресу 401328 идет обращение к несуществующей памяти 850000, отладчик на этом вспотыкается, а без отладчика проходит как надо. Где идет проверка пароля так и не нашел, точнее не дошел ещё.. А откуда этот крякмис, и какой его уровень? ![]() |
|
Создано: 07 сентября 2007 16:13 · Личное сообщение · #8 |
|
Создано: 07 сентября 2007 16:14 · Личное сообщение · #9 Там все просто 1600 исключений Оля обрабатывает очень долго. GLOBAL Tic db ? GLOBAL flag dw ? GLOBAL Tic1 dd ? exit_process: invoke MessageBox,0,"Debug Detected !!!" thread: invoke Sleep,50 dec Tic1 jz exit_process mov eax,Tic1 sub eax,edi ;должен уменьшатся jnz exit_process mov edi,Tic1 jmp thread Check_SEH: ..... Check_SEH3: .... mov flag,3 push Tic1 wait_: pop ebx cmp ebx,Tic1 jnz no_wait push ebx invoke Sleep,10 jmp wait_ no_wait: mov flag,0 ..... xor eax,eax mov [ebp].iDr6,eax mov [ebp].iDr7,eax ret timer1 proc hWin:DWORD,.. cmp flag,0 jz tim_end dec flag cmp flag,1 jne tim_end jmp exit_process tim_end: ret timer1 endp Код я из исходника вырезал, и поправил. ![]() ![]() |
|
Создано: 07 сентября 2007 16:48 · Личное сообщение · #10 |
|
Создано: 07 сентября 2007 18:15 · Личное сообщение · #11 |
|
Создано: 07 сентября 2007 20:02 · Поправил: GlOFF · Личное сообщение · #12 |
|
Создано: 07 сентября 2007 21:07 · Личное сообщение · #13 Нельзя патчить. (можно, если вставить секцию с копией кода и перенаправить распаковщик) Каждый байт исполняемого кода участвует в распаковке скрытого кода. И как только программа начнет выполняться, на совершенно неправильном секретном коде, возникнет исключение, которое не сможет обработать SEH. И опять появится invoke MessageBox "Debug Detected !!!" ![]() |
|
Создано: 07 сентября 2007 23:26 · Личное сообщение · #14 Xserg пишет: Каждый байт исполняемого кода участвует в распаковке скрытого кода. Например есть код идет прыжок, но на адресс не равный текущему "выравниванию", поэтому как бы получается совсем другая интерпритация команд после прыжка... Хитро уложено и главное, сколько прокручивал вроде все понятно и нигде сравнение валидности name\serial не идет... P.S. Xserg Кто-нибудь сломал уже? ![]() |
|
Создано: 08 сентября 2007 08:30 · Личное сообщение · #15 >Кто-нибудь сломал уже? Я всегда пишу не ломаемые crackme. ![]() Методы защиты в них непопулярные, и малоизученные. А этот метод против Olly (почти RDTSC программный), я вообще не встречал. Тем кто умеет ломать, лень разбираться. >Например есть код идет прыжок, но на адресс не равный текущему "выравниванию" db 0e8h,0ffh,0ffh,0ffh,0ffh,08h ; dec dword ptr [eax] ;esp-4 db 0ebh,0ffh,0c0h ; inc eax ; Slieep,10 --------------------- push 10 ;без -1 дизассемблер показал бы адрес Sleep mov eax,Sleep-1 db 0ebh,0ffh,0c0h ;inc eax push offset wait_ ;адрес возврата db 0ebh,0ffh,0e0h ;jmp eax ;---------------------------------- M1: jmp M1+1 ; db 0ebh,0ffh inc eax ; 0ffh,0c0h вмете получается db 0ebh,0ffh,0c0h ; inc eax И ни один дизассемблер такие конструкции правильно не покажет. >сколько прокручивал вроде все понятно и нигде сравнение валидности name\serial не идет.. . Koд ниже постепенно распаковывается через 1600 исключений. Реальным он станет на 1600ом исключении. prog_Check: ;сравнение валидности name\serial ![]() …. …. reset_kod: mov edi,offset prog_Check mov ecx,offset reset_cod-offset prog_Check+0eh xor al,al rep stosb ;заполняется 0 весь код проверки вместе с rep stosb ;на случай приаттачивания к программе ![]() invoke TerminateThread,TH,0 ret bad_pass: call reset_kod call bad_Z db " Fik !!! ",0 bad_Z: pop ebx call bad_mes db " need good password !!!",0 bad_mes: pop eax invoke MessageBox,0,eax,ebx,MB_OK bad_pass_e: pop fs:[0] pop eax ret ![]() |
|
Создано: 10 сентября 2007 08:48 · Личное сообщение · #16 |
|
Создано: 10 сентября 2007 09:17 · Личное сообщение · #17 |
|
Создано: 10 сентября 2007 15:04 · Личное сообщение · #18 |
|
Создано: 10 сентября 2007 17:09 · Личное сообщение · #19 |
|
Создано: 10 сентября 2007 21:26 · Личное сообщение · #20 |
|
Создано: 10 сентября 2007 21:30 · Личное сообщение · #21 |
|
Создано: 18 сентября 2007 19:24 · Личное сообщение · #22 |
|
Создано: 18 сентября 2007 19:24 · Личное сообщение · #23 |
|
Создано: 18 сентября 2007 19:37 · Поправил: Xserg · Личное сообщение · #24 |
|
Создано: 18 сентября 2007 19:58 · Личное сообщение · #25 |
![]() |
eXeL@B —› Вопросы новичков —› Помогите добить crackme |