Сейчас на форуме: vsv1, _MBK_ (+4 невидимых)

 eXeL@B —› Вопросы новичков —› Помогите добить crackme
Посл.ответ Сообщение

Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2007 00:51 · Поправил: GlOFF
· Личное сообщение · #1

Помогите с crackme. Как я понял, вся идея прожки в том, что она сравнивает время на обработку исключений в OllyDBG и в realtime... Но как добраться до кода проверки валидности name\serial ? Подскажите что к чему?

// P.S. http://ifolder.ru/3258212 http://ifolder.ru/3258212



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2007 12:01
· Личное сообщение · #2

Гляньте у кого будет свободное время. Что не делаю -> "Debug Detect" . Есть таймер и поток, а также замена SEH, при обработки которых тратиться больше времени в контексте отладчика, чем в реалтайме...




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 07 сентября 2007 13:31
· Личное сообщение · #3

Мне пока не понятно как это работает, но вот что я наколупал.
Имя и пароль беруться посылкой сообщение WM_GETTEXT, сохраняются сначала в выделенную память по адресам 840000 и 850000, потом имя и пароль попадают в стек и память освобождается.
Если трейсить вручную, то просто тонешь в исключениях, кода не видно, он отображается как dd, и все это завершается ошибкой по адресу 850000, там где у нас был пароль.
Если не трейсить, а отпустить код по Shift + F9, то вылазит ошибка Debug detect.
Ищо, кусок кода, который вызывает MessageBox закодирован или запакован, но это не важно.



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2007 13:49
· Личное сообщение · #4

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

Dr3d пишет:
Ищо, кусок кода, который вызывает MessageBox закодирован или запакован, но это не важно.


А мне кажется просто так код уложен, что олька не может правильно дизасмить
Например есть код идет прыжок, но на адресс не равный текущему "выравниванию", поэтому как бы получается совсем другая интерпритация команд после прыжка...

// Dr3d Спс, что откликнулся




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 07 сентября 2007 14:49 · Поправил: Dr3d
· Личное сообщение · #5

GlOFF пишет:
А мне кажется просто так код уложен, что олька не может правильно дизасмить

Я тоже так подумал, но на самом деле не так.
байтики не сходятся ))

Я вот не пойму как он детектит дебагер, там все время слип и слип
теоретически могу предполажить что да как, вот только не могу разобрать в этой проге как это сделано
тяжеловато анализировать алгоритм по опкоду



Ранг: 2.2 (гость)
Активность: 0=0
Статус: Участник

Создано: 07 сентября 2007 15:44
· Личное сообщение · #6

А у меня никакого "Debug detect" не вылезает.

Ни по Shift+F9, ни просто по F9.

Он просто останавливается на:
00401328 3002 XOR BYTE PTR DS:[EDX],AL




Ранг: 68.0 (постоянный), 6thx
Активность: 0.060
Статус: Участник

Создано: 07 сентября 2007 16:06
· Личное сообщение · #7

там два патока, один из которых именьшает на единицу DWORD по адресу 403063, и если это значение уменьшается до нуля - вылазит сообщение Debug Detect и завершается.

По адресу 401328 идет обращение к несуществующей памяти 850000, отладчик на этом вспотыкается, а без отладчика проходит как надо.

Где идет проверка пароля так и не нашел, точнее не дошел ещё..

А откуда этот крякмис, и какой его уровень?



Ранг: 222.2 (наставник), 115thx
Активность: 0.140.01
Статус: Участник

Создано: 07 сентября 2007 16:13
· Личное сообщение · #8

White Rabbit в опциях OllyDBG поставте галки напротив всех исключений (Ignore all exeptions, вкладка "Exeptions"). Как раз на этом адресе срабатывает исключение.

-----
все багрепорты - в личные сообщения




Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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

Код я из исходника вырезал, и поправил.



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2007 16:48
· Личное сообщение · #10

Dr3d пишет:
А откуда этот крякмис, и какой его уровень?


Да вот и сам автор Xserg, ну чтож спасибо за пояснение в защите. Пойду подумаю



Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 сентября 2007 18:15
· Личное сообщение · #11

Часть исходника мало поможет.
Сложность для новичков (тяжело)

Вероятность сломать пальцы, вместо крякмикса очень высокая.

Тут надо технически…
(Скрипт или своя программа)



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2007 20:02 · Поправил: GlOFF
· Личное сообщение · #12

Xserg Ну а если патчить местами и создать необходимые условия для того, чтобы алго-защиты не различило разницы контекст отладчика или нет его? Или при обработке SEH происходит проверка целостности опкодов защиты



Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 07 сентября 2007 21:07
· Личное сообщение · #13

Нельзя патчить.
(можно, если вставить секцию с копией кода и перенаправить распаковщик)
Каждый байт исполняемого кода участвует в распаковке скрытого кода.
И как только программа начнет выполняться, на совершенно неправильном секретном коде, возникнет исключение, которое не сможет обработать SEH.
И опять появится invoke MessageBox "Debug Detected !!!"



Ранг: 51.7 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 07 сентября 2007 23:26
· Личное сообщение · #14

Xserg пишет:
Каждый байт исполняемого кода участвует в распаковке скрытого кода.


Например есть код идет прыжок, но на адресс не равный текущему "выравниванию", поэтому как бы получается совсем другая интерпритация команд после прыжка... Хитро уложено и главное, сколько прокручивал вроде все понятно и нигде сравнение валидности name\serial не идет...

P.S. Xserg Кто-нибудь сломал уже?



Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 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



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 10 сентября 2007 08:48
· Личное сообщение · #16

пишед дэбугер детектед, хотя я никуя не запускал...



Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2007 09:17
· Личное сообщение · #17

sniperZ
Может у тебя драйвер SoftIce загружен.



Ранг: 54.0 (постоянный)
Активность: 0.020
Статус: Участник

Создано: 10 сентября 2007 15:04
· Личное сообщение · #18

Xserg
Pro100ya
9004qe8jk2kZ8l9P
правильно?



Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 10 сентября 2007 17:09
· Личное сообщение · #19

В крякми нет привязки к Железу, конечно правильно.



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 10 сентября 2007 21:26
· Личное сообщение · #20

Xserg пишет:
Может у тебя драйвер SoftIce загружен.

у мну его даже не стояло...



Ранг: 260.2 (наставник)
Активность: 0.190
Статус: Участник

Создано: 10 сентября 2007 21:30
· Личное сообщение · #21

биля, жестокий крякми. Xserg, больше не пеши...



Ранг: 8.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 сентября 2007 19:24
· Личное сообщение · #22

нафик всё!

TeruS
X43k561qi7j1Up93



Ранг: 8.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 сентября 2007 19:24
· Личное сообщение · #23

PS Xserg если не жалко, кинь сорец)



Ранг: 24.9 (новичок)
Активность: 0.010
Статус: Участник

Создано: 18 сентября 2007 19:37 · Поправил: Xserg
· Личное сообщение · #24

Не жалко, но там 2 сырца и оба без комментариев, к тому же на другом компьютере.
Короче завтра. // может и прокомментирую



Ранг: 8.4 (гость)
Активность: 0=0
Статус: Участник

Создано: 18 сентября 2007 19:58
· Личное сообщение · #25

Спасиба)


 eXeL@B —› Вопросы новичков —› Помогите добить crackme
:: Ваш ответ
Жирный  Курсив  Подчеркнутый  Перечеркнутый  {mpf5}  Код  Вставить ссылку 
:s1: :s2: :s3: :s4: :s5: :s6: :s7: :s8: :s9: :s10: :s11: :s12: :s13: :s14: :s15: :s16:


Максимальный размер аттача: 500KB.
Ваш логин: german1505 » Выход » ЛС
   Для печати Для печати