Русский / Russian English / Английский

Сейчас на форуме: _MBK_, asamoile, UniSoft, bartolomeo (+3 невидимых)
 · Начало · Статистика · Регистрация · Поиск · ПРАВИЛА ФОРУМА · Язык · RSS ·

 eXeL@B —› Основной форум —› F-Secure Reverse Engineering Challenge
. 1 . 2 . 3 . 4 . >>
Посл.ответ Сообщение

Ранг: 284.8 (наставник)
Статус: Участник

Создано: 01 августа 2008 18:01 New!
Цитата · Личное сообщение · #1

Очередной конкурс по реверсингу от F-Secure.

В подарки за призовые места обещаны айподы и экскурсия по их лаборатории.

в общем, всем кому интересно: www.khallenge.com/



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 01 августа 2008 19:19 New!
Цитата · Личное сообщение · #2

Интересная штучка.. на первом уровне уже надо реверсить консольки =)) посмотрим, что будет дальше..



Ранг: 50.3 (постоянный)
Статус: Участник

Создано: 01 августа 2008 19:54 New!
Цитата · Личное сообщение · #3

Кто-то только что решил level 2 =)



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 01 августа 2008 20:02 New!
Цитата · Личное сообщение · #4

slip пишет:
Кто-то только что решил level 2 =)

ага, но там не все так просто.. плюс еще и md5 есть..



Ранг: 442.2 (мудрец)
Статус: Участник

Создано: 01 августа 2008 20:58 New!
Цитата · Личное сообщение · #5

я вообще догнать не могу что надо со вторым крякми делать. Подскажите, люди добрые



Ранг: 221.3 (наставник)
Статус: Участник

Создано: 01 августа 2008 21:42 New!
Цитата · Личное сообщение · #6

кигенить, че с ним делать то еще



Ранг: 442.2 (мудрец)
Статус: Участник

Создано: 01 августа 2008 23:09 New!
Цитата · Личное сообщение · #7

v0id2k
Оригинально, спасибо



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 01 августа 2008 23:11 New!
Цитата · Личное сообщение · #8

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



Ранг: 442.2 (мудрец)
Статус: Участник

Создано: 01 августа 2008 23:42 New!
Цитата · Личное сообщение · #9

kaiZer
спасибо, попробуем




Ранг: 990.2 (! ! !)
Статус: Модератор
Author of DiE

Создано: 02 августа 2008 00:17 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #10

ого второй кракмис не плохо так ))) тлс + модифицированный упх + отладчик ещё палит

з.ы. распаковывайте внимательно.



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 02 августа 2008 00:26 New!
Цитата · Личное сообщение · #11

Hellspawn пишет:
з.ы. распаковывайте внимательно.

тут же упх самим упх и снимается, вроде все нормально =)




Ранг: 990.2 (! ! !)
Статус: Модератор
Author of DiE

Создано: 02 августа 2008 00:37 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #12

kaiZer пишет:
тут же упх самим упх и снимается, вроде все нормально =)


это на первый взгляд))) там по-моему уже не подберёшь ключик...



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 02 августа 2008 00:41 New!
Цитата · Личное сообщение · #13

Hellspawn пишет:
это на первый взгляд))) там мо-моему уже не подберёшь ключик...

ну возможно.. ибо меня смущает то, что в регистре ЕАХ после 004012F5 |. E8 C6FEFFFF CALL FSC08_Le.004011C0 получается 0, чего быть не должно никак, после чего идет ксор с A462B469,

004012FA |. 8BF8 MOV EDI,EAX
004012FC |. 81F7 69B462A4 XOR EDI,A462B469
00401302 |. 81FF 69B462A4 CMP EDI,A462B469
00401308 |. 0F84 D6000000 JE FSC08_Le.004013E4

и если содержимое регистра EDI равно A462B469, то значит, что ключик нверный..




Ранг: 990.2 (! ! !)
Статус: Модератор
Author of DiE

Создано: 02 августа 2008 00:42 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #14

нашёл))

004012E1 |. E8 A00D0000 CALL <JMP.&KERNEL32.IsDebuggerPresent>
004012E6 |. 3305 C4414000 XOR EAX,DWORD PTR DS:[4041C4]
004012EC |. 3305 20404000 XOR EAX,DWORD PTR DS:[404020]
004012F2 |. 33C6 XOR EAX,ESI
004012F4 |. 50 PUSH EAX
004012F5 |. E8 C6FEFFFF CALL uFSC08_L.004011C0


в НЕ распакованной eax после IsDebuggerPresent = 11 (она сама туда пишет) а в анпакнутой = 0

и это не одно место, походу ещё что то есть...



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 02 августа 2008 00:48 New!
Цитата · Личное сообщение · #15

Hellspawn пишет:
в НЕ распакованной eax после IsDebuggerPresent = 11 а в анпакнутой = 0

а это вообще что-то меняет? там в call после IsDebuggerPresent в еах помещается уже так сказать сгенренное число, а это уходит вникуда..




Ранг: 990.2 (! ! !)
Статус: Модератор
Author of DiE

Создано: 02 августа 2008 00:57 · Поправил: Hellspawn New!
Цитата · Личное сообщение · #16

сам посмотрел бы конечно меняет и именно последний байт, который будет другим...

004012E1 E8 A00D0000 CALL FSC08_Le.00402086
004012E6 3305 C4414000 XOR EAX,DWORD PTR DS:[4041C4] // 11 xor [4041C4]
004012EC 3305 20404000 XOR EAX,DWORD PTR DS:[404020] // ...
004012F2 33C6 XOR EAX,ESI // ...
004012F4 50 PUSH EAX // последний байт будет бругим
004012F5 E8 C6FEFFFF CALL FSC08_Le.004011C0
...
004011C0:

004011C0 55 PUSH EBP
004011C1 8D6C24 08 LEA EBP,DWORD PTR SS:[ESP+8]
004011C5 60 PUSHAD
004011C6 8B45 04 MOV EAX,DWORD PTR SS:[EBP+4]
004011C9 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
004011CC 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
004011CF 8A5407 FF MOV DL,BYTE PTR DS:[EDI+EAX-1]
004011D3 3255 00 XOR DL,BYTE PTR SS:[EBP] // ксорим с именно этим байтом
...
004011DD 8A0C07 MOV CL,BYTE PTR DS:[EDI+EAX]
004011E0 32CA XOR CL,DL // используем результат
004011E2 3A0C06 CMP CL,BYTE PTR DS:[ESI+EAX]

вот так вот



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 02 августа 2008 01:02 New!
Цитата · Личное сообщение · #17

Ну так там же потом в проедурке есть DEC EAX, а после выхода из процедуры ЕАХ = 0.




Ранг: 990.2 (! ! !)
Статус: Модератор
Author of DiE

Создано: 02 августа 2008 01:05 New!
Цитата · Личное сообщение · #18

дык там сумма подсчитывается ты что не видишь чтоли?

004011E5 /75 0D JNZ SHORT FSC08_Le.004011F4
004011E7 |83CB 01 OR EBX,1
004011EA |80F1 05 XOR CL,5
004011ED |32CA XOR CL,DL
004011EF |33E9 XOR EBP,ECX
004011F1 |C1CD 07 ROR EBP,7
004011F4 \D1C3 ROL EBX,1
004011F6 83F8 00 CMP EAX,0
004011F9 ^ 75 E1 JNZ SHORT FSC08_Le.004011DC
004011FB 81FB 64010000 CMP EBX,164


а eax будет не 0, когда суммай сойдётся. вообщем сиди разбирайся)



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 02 августа 2008 01:08 New!
Цитата · Личное сообщение · #19

004011F6 83F8 00 CMP EAX,0 - ну еах же становится равен 0 =)) значения в регистре еах вроде же не изменяются, а тока уменьшаются на единицу в этом цикле.. или я чето не догоняю, но вроде все норм.. хотя мот час ночи дает о себе знать? =))




Ранг: 990.2 (! ! !)
Статус: Модератор
Author of DiE

Создано: 02 августа 2008 01:11 New!
Цитата · Личное сообщение · #20

в 16-ом посте читай комментарии мои, внимательно. вообщем грамотно всё сделанно. хехе, ещё кое-что нашёл...

з.ы. ушёл спать.




Ранг: 756.7 (! !)
Статус: Участник
Student

Создано: 02 августа 2008 01:42 New!
Цитата · Личное сообщение · #21

Мужики, колитесь... Из тех, кто 2ой решил сколько наших???



Ранг: 161.0 (ветеран)
Статус: Участник

Создано: 02 августа 2008 02:31 · Поправил: kaiZer New!
Цитата · Личное сообщение · #22

Хэлл, кстати, у меня и в запакованной программе после IsDebuggerPresent в еах возвратился 0.. мот у тя какой-то особый отладчик? =)
Все, я спать..




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 02 августа 2008 02:53 New!
Цитата · Личное сообщение · #23

=) kaiZer у меня также , странно то что раз на раз не приходится. Всех задолбало и все спать ))))))) 3 левел уже взломал первый чувак =) ... это кто то из нас ?




Ранг: 756.7 (! !)
Статус: Участник
Student

Создано: 02 августа 2008 03:03 New!
Цитата · Личное сообщение · #24

Короче пасс во втором из 9ти символов или я совсем заблудился...
а вместо call IsDebuggerPresent вообще xor eax,eax воткнул... и работает так же, как и в нераспакованом вроде
Надо тоже пойти поспать




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 02 августа 2008 05:38 New!
Цитата · Личное сообщение · #25

Короче то что я расспаковывал отстой, я сделал так запакованную прогу , запускал снимал защиту упх ниже указанным скриптом =) и шел далее обходя антиотладку =) , но я устал все спать точно. Издебугерпрезент возвращает 2 у меня постоянно =)

var x

loop:
findop eip, #E9??# // find jump to next loop
mov x, $RESULT
sub x, eip
cmp x, 10 // (@jmp - eip) use to be 10,
// we can handle different loop size this way
ja stub
go $RESULT
sto
jmp loop

stub:
// the terrific UPX OEP finder
eob end
sto
mov x, esp
bphws x, "r"
run

end:
bphwc x
sto
ret





Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 02 августа 2008 14:05 · Поправил: mak New!
Цитата · Личное сообщение · #26

Тема зависла =) пофиг на все главное результат. Сработает кучность , одному ковырять ну влом. 00407116 . 8D4424 80 LEA EAX,DWORD PTR SS:[ESP-80]
0040711A > 6A 00 PUSH 0
0040711C . 39C4 CMP ESP,EAX
0040711E .^75 FA JNZ SHORT FSC08_Le.0040711A
00407120 . 83EC 80 SUB ESP,-80
00407123 .-E9 08A3FFFF JMP FSC08_Le.00401430
00407128 48 DB 48 ; CHAR 'H'


это после скрипта переходим на jmp
тут на оепе

00401D3A 6A 28 PUSH 28
00401D3C 68 A0304000 PUSH FSC08_Le.004030A0
00401D41 E8 FA010000 CALL FSC08_Le.00401F40
00401D46 33FF XOR EDI,EDI
00401D48 57 PUSH EDI
00401D49 FF15 0C304000 CALL DWORD PTR DS:[40300C] ; kernel32.GetModuleHandleA



далее идут мне не знакомые манипуляции с Виртуалпротект , ну оч много раз.

этот код тоже странный =) может это динамическая переменная как раз генерируетсся

00401EE9 8D45 F8 LEA EAX,DWORD PTR SS:[EBP-8]
00401EEC 50 PUSH EAX
00401EED FF15 2C304000 CALL DWORD PTR DS:[40302C] ; kernel32.GetSystemTimeAsFileTime
00401EF3 8B75 FC MOV ESI,DWORD PTR SS:[EBP-4]
00401EF6 3375 F8 XOR ESI,DWORD PTR SS:[EBP-8]
00401EF9 FF15 14304000 CALL DWORD PTR DS:[403014] ; kernel32.GetCurrentProcessId
00401EFF 33F0 XOR ESI,EAX
00401F01 FF15 00304000 CALL DWORD PTR DS:[403000] ; kernel32.GetCurrentThreadId
00401F07 33F0 XOR ESI,EAX
00401F09 FF15 04304000 CALL DWORD PTR DS:[403004] ; kernel32.GetTickCount
00401F0F 33F0 XOR ESI,EAX
00401F11 8D45 F0 LEA EAX,DWORD PTR SS:[EBP-10]
00401F14 50 PUSH EAX
00401F15 FF15 08304000 CALL DWORD PTR DS:[403008] ; kernel32.QueryPerformanceCounter
00401F1B 8B45 F4 MOV EAX,DWORD PTR SS:[EBP-C]



вход на проверку и принт
00401E78 E8 93F3FFFF CALL FSC08_Le.00401210



Принт и сравнение есть ли пасс
0040122E 8B3D 80304000 MOV EDI,DWORD PTR DS:[403080] ; MSVCR71.printf
00401234 68 28404000 PUSH FSC08_Le.00404028 ; ASCII "
Assembly 2008 Reverse-Engineering Challenge - Level 2
F-Secure Corporation (c) 2008.

For more information visit:
[url=http://www.f-secure.com/security_center/asm.html
]http://www.f-secure.com/security_center/asm.html
[/url]

"
00401239 FFD7 CALL EDI
0040123B 83C4 04 ADD ESP,4
0040123E 837C24 28 02 CMP DWORD PTR SS:[ESP+28],2



тут не помню , проверка на что то еще
00401251 8A11 MOV DL,BYTE PTR DS:[ECX]
00401253 83C1 01 ADD ECX,1
00401256 84D2 TEST DL,DL
00401258 ^75 F7 JNZ SHORT FSC08_Le.00401251



следующая

00401270 8A08 MOV CL,BYTE PTR DS:[EAX]
00401272 83C0 01 ADD EAX,1
00401275 84C9 TEST CL,CL
00401277 ^75 F7 JNZ SHORT FSC08_Le.00401270



и третья

00401290 8A08 MOV CL,BYTE PTR DS:[EAX]
00401292 83C0 01 ADD EAX,1
00401295 84C9 TEST CL,CL
00401297 ^75 F7 JNZ SHORT FSC08_Le.00401290


и четвертая
004012B0 8A08 MOV CL,BYTE PTR DS:[EAX]
004012B2 83C0 01 ADD EAX,1
004012B5 84C9 TEST CL,CL
004012B7 ^75 F7 JNZ SHORT FSC08_Le.004012B0



далее вот это

004012BE FF15 14304000 CALL DWORD PTR DS:[403014] ; kernel32.GetCurrentProcessId
004012C4 8B0D DC404000 MOV ECX,DWORD PTR DS:[4040DC] ; FSC08_Le.00404160
004012CA 8BF0 MOV ESI,EAX
004012CC 8B45 04 MOV EAX,DWORD PTR SS:[EBP+4]
004012CF 3335 D8414000 XOR ESI,DWORD PTR DS:[4041D8]
004012D5 50 PUSH EAX
004012D6 83C1 00 ADD ECX,0
004012D9 51 PUSH ECX
004012DA 53 PUSH EBX
004012DB E8 60FEFFFF CALL FSC08_Le.00401140
004012E0 50 PUSH EAX
004012E1 E8 A00D0000 CALL FSC08_Le.00402086 ; JMP to kernel32.IsDebuggerPresent


возвращает цыфру 2

тут коолл на проверку и хсор паса


004012F5 E8 C6FEFFFF CALL FSC08_Le.004011C0



а вот и сама прока

004011C0 55 PUSH EBP <= тут генерится переменная всегда разная
004011C1 8D6C24 08 LEA EBP,DWORD PTR SS:[ESP+8]
004011C5 60 PUSHAD
004011C6 8B45 04 MOV EAX,DWORD PTR SS:[EBP+4]
004011C9 8B75 08 MOV ESI,DWORD PTR SS:[EBP+8]
004011CC 8B7D 0C MOV EDI,DWORD PTR SS:[EBP+C]
004011CF 8A5407 FF MOV DL,BYTE PTR DS:[EDI+EAX-1]
004011D3 3255 00 XOR DL,BYTE PTR SS:[EBP]
004011D6 33DB XOR EBX,EBX
004011D8 33ED XOR EBP,EBP
004011DA 33C9 XOR ECX,ECX
004011DC 48 DEC EAX <= и до сюда
004011DD 8A0C07 MOV CL,BYTE PTR DS:[EDI+EAX] <= адресс на пасс
004011E0 32CA XOR CL,DL <= тут постоянно разный байт что вводит в сомнение
004011E2 3A0C06 CMP CL,BYTE PTR DS:[ESI+EAX] <= адрес на таблицу байтов
004011E5 75 0D JNZ SHORT FSC08_Le.004011F4 <= проверка верно или нет
004011E7 83CB 01 OR EBX,1
004011EA 80F1 05 XOR CL,5
004011ED 32CA XOR CL,DL
004011EF 33E9 XOR EBP,ECX
004011F1 C1CD 07 ROR EBP,7
004011F4 D1C3 ROL EBX,1
004011F6 83F8 00 CMP EAX,0
004011F9 ^75 E1 JNZ SHORT FSC08_Le.004011DC
004011FB 81FB 64010000 CMP EBX,164 <= важный момент
00401201 74 02 JE SHORT FSC08_Le.00401205
00401203 33ED XOR EBP,EBP
00401205 896C24 1C MOV DWORD PTR SS:[ESP+1C],EBP
00401209 61 POPAD
0040120A 5D POP EBP
0040120B C2 1000 RETN 10



по выходу не должен быть 0 иначе хор на число и получится выход

004012FA 8BF8 MOV EDI,EAX
004012FC 81F7 69B462A4 XOR EDI,A462B469
00401302 81FF 69B462A4 CMP EDI,A462B469
00401308 0F84 D6000000 JE FSC08_Le.004013E4



а еще далее идет серия проверок опять , что мы уже видели в первом крякми
0040130E 8B55 04 MOV EDX,DWORD PTR SS:[EBP+4]
00401311 53 PUSH EBX
00401312 8D4C24 18 LEA ECX,DWORD PTR SS:[ESP+18]
00401316 E8 95090000 CALL FSC08_Le.00401CB0
0040131B B8 10000000 MOV EAX,10
00401320 B9 B4414000 MOV ECX,FSC08_Le.004041B4
00401325 8D5424 14 LEA EDX,DWORD PTR SS:[ESP+14]
00401329 8DA424 00000000 LEA ESP,DWORD PTR SS:[ESP]
00401330 8B32 MOV ESI,DWORD PTR DS:[EDX]
00401332 3B31 CMP ESI,DWORD PTR DS:[ECX]
00401334 75 12 JNZ SHORT FSC08_Le.00401348
00401336 83E8 04 SUB EAX,4
00401339 83C1 04 ADD ECX,4
0040133C 83C2 04 ADD EDX,4
0040133F 83F8 04 CMP EAX,4
00401342 ^73 EC JNB SHORT FSC08_Le.00401330
00401344 85C0 TEST EAX,EAX
00401346 74 65 JE SHORT FSC08_Le.004013AD
00401348 0FB629 MOVZX EBP,BYTE PTR DS:[ECX]
0040134B 0FB632 MOVZX ESI,BYTE PTR DS:[EDX]
0040134E 2BF5 SUB ESI,EBP
00401350 75 45 JNZ SHORT FSC08_Le.00401397
00401352 83E8 01 SUB EAX,1
00401355 83C1 01 ADD ECX,1
00401358 83C2 01 ADD EDX,1
0040135B 85C0 TEST EAX,EAX
0040135D 74 4A JE SHORT FSC08_Le.004013A9
0040135F 0FB629 MOVZX EBP,BYTE PTR DS:[ECX]
00401362 0FB632 MOVZX ESI,BYTE PTR DS:[EDX]
00401365 2BF5 SUB ESI,EBP
00401367 75 2E JNZ SHORT FSC08_Le.00401397
00401369 83E8 01 SUB EAX,1
0040136C 83C1 01 ADD ECX,1
0040136F 83C2 01 ADD EDX,1
00401372 85C0 TEST EAX,EAX
00401374 74 33 JE SHORT FSC08_Le.004013A9
00401376 0FB629 MOVZX EBP,BYTE PTR DS:[ECX]
00401379 0FB632 MOVZX ESI,BYTE PTR DS:[EDX]
0040137C 2BF5 SUB ESI,EBP
0040137E 75 17 JNZ SHORT FSC08_Le.00401397
00401380 83E8 01 SUB EAX,1
00401383 83C1 01 ADD ECX,1
00401386 83C2 01 ADD EDX,1
00401389 85C0 TEST EAX,EAX
0040138B 74 1C JE SHORT FSC08_Le.004013A9
0040138D 0FB601 MOVZX EAX,BYTE PTR DS:[ECX]
00401390 0FB632 MOVZX ESI,BYTE PTR DS:[EDX]
00401393 2BF0 SUB ESI,EAX
00401395 74 12 JE SHORT FSC08_Le.004013A9
00401397 85F6 TEST ESI,ESI
00401399 8B6C24 10 MOV EBP,DWORD PTR SS:[ESP+10]
0040139D B8 01000000 MOV EAX,1
004013A2 7F 0B JG SHORT FSC08_Le.004013AF
004013A4 83C8 FF OR EAX,FFFFFFFF
004013A7 EB 06 JMP SHORT FSC08_Le.004013AF
004013A9 8B6C24 10 MOV EBP,DWORD PTR SS:[ESP+10]
004013AD 33C0 XOR EAX,EAX
004013AF 85C0 TEST EAX,EAX
004013B1 75 31 JNZ SHORT FSC08_Le.004013E4
004013B3 8B45 04 MOV EAX,DWORD PTR SS:[EBP+4]
004013B6 0FBE4C18 FF MOVSX ECX,BYTE PTR DS:[EAX+EBX-1]
004013BB 0FBE10 MOVSX EDX,BYTE PTR DS:[EAX]
004013BE 51 PUSH ECX
004013BF 52 PUSH EDX
004013C0 57 PUSH EDI
004013C1 68 E0404000 PUSH FSC08_Le.004040E0 ; ASCII "
Congratulations! Please send an e-mail to Asm08%08x%c%c@khallenge.com

"
004013C6 FF15 80304000 CALL DWORD PTR DS:[403080] ; MSVCR71.printf



Емайл генерируется с правильного пасса ! Ахтунг !

В



Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 02 августа 2008 14:09 New!
Цитата · Личное сообщение · #27

mak пишет:
тут не помню , проверка на что то еще
следующая
и третья
и четвертая

это жеж блять просто длина вычисляеццо




Ранг: 673.3 (! !)
Статус: Участник
CyberMonk

Создано: 02 августа 2008 14:11 New!
Цитата · Личное сообщение · #28

=) ну да , , я помню что там была зависимость от длинны ,и выход если не то, но это не важно я другое решал



Ранг: 456.3 (мудрец)
Статус: Участник
Android Reverser

Создано: 02 августа 2008 14:13 New!
Цитата · Личное сообщение · #29

основная хуйня здесь 004011C0
проще всево брутер нопесать, каторый код будет генерить и прогонять по этой процедуре, чтоб CRC было 164. Но мне лениво песать ;)



Ранг: 221.3 (наставник)
Статус: Участник

Создано: 02 августа 2008 14:16 New!
Цитата · Личное сообщение · #30

SaNX пишет:
Но мне лениво песать ;)

айфон не хочешь?


. 1 . 2 . 3 . 4 . >>
 eXeL@B —› Основной форум —› F-Secure Reverse Engineering Challenge

Видеокурс ВЗЛОМ