余晖王子 发表于 2007-4-1 01:03:23

太厉害了/:06 /:06

lixy8888 发表于 2008-8-13 17:15:28

只能爆破,怎么追码?

小生我怕怕 发表于 2008-8-14 00:18:44


只能爆破,追码能力有限!

[ 本帖最后由 小生我怕怕 于 2008-8-14 15:25 编辑 ]

x80x88 发表于 2008-8-14 13:36:47

凑个热闹!检测不出什么壳,当未知壳脱:
.......
00473EC0pushad
00473EC1mov   esi, 0044D000
00473EC6lea   edi, dword ptr
00473ECCmov   dword ptr , 9E48B7E4
00473ED6push    edi
00473ED7or      ebp, FFFFFFFF
00473EDAjmp   00473EEA
.......
00474019or      eax, eax
0047401Bje      short 00474024
0047401Dmov   dword ptr , eax
0047401Fadd   ebx, 4
00474022jmp   short 00474005
00474024call    dword ptr
0047402Apopad                                    ; 单步加F4,运行到这里
0047402Bjmp   00454EB8                         ; 跳往OEP?
00474030dec   eax
00474031inc   eax
如上所示,跳到00454EB8后,用OD的插件DUMP进程就OK了,不需修复直接可以运行

继续,OD载入脱壳后的进程,可以看到:
00454EB8 >push    ebp
00454EB9mov   ebp, esp
00454EBBadd   esp, -10
00454EBEmov   eax, 00454CD8
00454EC3call    00405E00
00454EC8call    00454C50                   ;将这个Call nop掉
00454ECDmov   eax, dword ptr
00454ED2mov   eax, dword ptr
00454ED4call    00452F08
00454ED9mov   eax, dword ptr
00454EDEmov   eax, dword ptr
00454EE0mov   edx, 00454F1C            ;ASCII "CrackMe #2"
00454EE5call    00452B18
.......
将00454EC8的那句Call 00454C50给和谐掉,至于原由嘛,前面有XD说过,是产生另外一个进程的,不nop掉的话我们是断不下程序的!
其余的就很简单了,搜索串式参考,可以找到关键的跳转,然后下断运行,
......
004548C2mov   edx, dword ptr     假码赋给EDX
004548C5mov   eax, dword ptr    真码赋给EAX
004548C8call    004043F8
004548CDje      short 00454921             关键跳转
004548CFinc   dword ptr
004548D5cmp   dword ptr , 3
004548DCjnz   short 004548E3
004548DEcall    00403EFC
004548E3mov   eax, 3
004548E8sub   eax, dword ptr
004548EEcmp   eax, 2
004548F1jnz   short 0045490A
004548F3push    0
004548F5mov   cx, word ptr
004548FCxor   edx, edx
004548FEmov   eax, 004549A0            ;ASCII "Bad Code!",CR,"2 attempt(s) remaining..."
00454903call    00427460
00454908jmp   short 00454942
0045490Apush    0
0045490Cmov   cx, word ptr
00454913xor   edx, edx
00454915mov   eax, 004549CC            ;ASCII "Bad Code!",CR,"1 attempt remaining..."
0045491Acall    00427460
0045491Fjmp   short 00454942
00454921push    0
00454923mov   cx, word ptr
0045492Amov   dl, 2
0045492Cmov   eax, 004549F8            ;ASCII "Code is OK!",CR,"Thanks for solving this CrackMe..."
........
算法很简单,不说了,看下面的对比就知道了
注册码需为20位,不足的在后面加0,多的截取前20位
用户名:x       8      0       x      8       8
注册码: 058   038030   058038   03800

如果用户名为X80X88那就是如下:
用户名:X       8      0       X      8       8
注册码: 158   038030   158038   03800

X的ASCII码值为58,其余不用多说了吧/:014
贴个图


[ 本帖最后由 x80x88 于 2008-8-14 14:24 编辑 ]

as3852711 发表于 2008-8-14 14:48:33

hanyu
04804104E05905500000

apzp000 发表于 2008-9-1 20:09:44

还好有大牛指点/:017
页: 1 [2]
查看完整版本: 2发CrackMe,大家来练习