首页
社区
课程
招聘
[讨论]第二部分比赛[第三回]CrackMe破解提交
发表于: 2009-9-9 17:49 4315

[讨论]第二部分比赛[第三回]CrackMe破解提交

2009-9-9 17:49
4315
rocky-Cracked.rar

填充下字数,这个CrackMe把信心换给我了,哈哈·~~

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 168
活跃值: (152)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
2
出去了下,回来发现,原来我刚发帖不久就被爆了,哎,早知道这么容易,我先搞定它再出去就好了~,后悔呀~
        不多说了,下面是我的分析:
       
        W32dsm的字符串参考,很快就能定位到关键地方:

	004018AE    F7EA            imul    edx
	004018B0    8BC2            mov     eax, edx
	004018B2    C1E8 1F         shr     eax, 0x1F
	004018B5    03D0            add     edx, eax
	004018B7    8BEA            mov     ebp, edx
	004018B9    3BE9            cmp     ebp, ecx
	004018BB    74 1F           je      short 004018DC                   ; 密码有问题,应该让它调走
	004018BD    8D4B 64         lea     ecx, dword ptr [ebx+0x64]
	004018C0    68 B8604100     push    004160B8                         ; 错误提示压栈
	004018C5    51              push    ecx
	004018C6    E8 9C6F0000     call    00408867
	004018CB    83C4 08         add     esp, 0x8
	004018CE    8BCB            mov     ecx, ebx
	004018D0    6A 00           push    0x0
	004018D2    E8 C1AD0000     call    0040C698

       
00401BAF  ^\75 DB           jnz     short 00401B8C
	00401BB1    33C0            xor     eax, eax
	00401BB3    EB 05           jmp     short 00401BBA
	00401BB5    1BC0            sbb     eax, eax
	00401BB7    83D8 FF         sbb     eax, -0x1
	00401BBA    85C0            test    eax, eax
	00401BBC    74 1C           je      short 00401BDA                   ; 如果这里跳了,就提示恭喜你
	00401BBE    8D43 64         lea     eax, dword ptr [ebx+0x64]
	00401BC1    68 B8604100     push    004160B8                         ; 这里提示密码有问题
	00401BC6    50              push    eax
	00401BC7    E8 9B6C0000     call    00408867
	00401BCC    83C4 08         add     esp, 0x8
	00401BCF    8BCB            mov     ecx, ebx
	00401BD1    6A 00           push    0x0
	00401BD3    E8 C0AA0000     call    0040C698
	00401BD8    EB 58           jmp     short 00401C32
	00401BDA    8D4B 64         lea     ecx, dword ptr [ebx+0x64]        ; 这里提示恭喜你
	00401BDD    68 B0604100     push    004160B0
	00401BE2    51              push    ecx

        把上面跳转改成JMP本以为大功告成,结果提示还是密码有问题。再上下看了这个错误提示的地方,发现,有个跳转直接跳转到这个错误地址的地址,如下:
       
       
00401AA9    2B7410 FC       sub     esi, dword ptr [eax+edx-0x4]
	00401AAD    83EE 02         sub     esi, 0x2
	00401AB0    0F88 08010000   js      00401BBE                         ; 这个跳转跳到密码有问题的地方
	...
	00401BC1    68 B8604100     push    004160B8                         ; 这里提示密码有问题
	00401BC6    50              push    eax
	00401BC7    E8 9B6C0000     call    00408867
	00401BCC    83C4 08         add     esp, 0x8
	00401BCF    8BCB            mov     ecx, ebx
	00401BD1    6A 00           push    0x0
	00401BD3    E8 C0AA0000     call    0040C698
	00401BD8    EB 58           jmp     short 00401C32
	00401BDA    8D4B 64         lea     ecx, dword ptr [ebx+0x64]        ; 这里提示恭喜你
	00401BDD    68 B0604100     push    004160B0

        看到了吧,我们让他JMP到成功的地方就OK了,把代码改成如下模样:
       
00401AAD    83EE 02         sub     esi, 0x2
	00401AB0    E9 25010000     jmp     00401BDA                         ; 这个跳转跳到密码有问题的地方
	00401AB5    90              nop
	00401AB6    8D0CB5 00000000 lea     ecx, dword ptr [esi*4]


        本以为这样就真的可以了。结果一运行,异常了……
        但不跟踪,发现问题出在下面这函数中。
       
00401BF8    52              push    edx
	00401BF9    E8 EB7C0000     call    004098E9
	00401BFE    8B4424 28       mov     eax, dword ptr [esp+0x28]
	00401C02    50              push    eax                              ; 密码前两位压栈
	00401C03    E8 E17C0000     call    004098E9
	00401C08    8B8C24 B4000000 mov     ecx, dword ptr [esp+0xB4]        ; 密码再两位
	00401C0F    51              push    ecx
	00401C10    E8 D47C0000     call    004098E9
	00401C15    8B5424 20       mov     edx, dword ptr [esp+0x20]
	00401C19    52              push    edx
	00401C1A    E8 CA7C0000     call    004098E9                         ; 这里异常了
	00401C1F    57              push    edi
	00401C20    E8 C47C0000     call    004098E9
	00401C25    8B4424 30       mov     eax, dword ptr [esp+0x30]
	00401C29    50              push    eax
	00401C2A    E8 BA7C0000     call    004098E9
	00401C2F    83C4 18         add     esp, 0x18


        这些代码调用的都是同一个CALL,结果出问题了,仔细看代码,发现这些函数的堆栈一起平衡的,那我们跳过这些函数调用看看“
       
00401BDA    8D4B 64         lea     ecx, dword ptr [ebx+0x64]        ; 这里提示恭喜你
	00401BDD    68 B0604100     push    004160B0
	00401BE2    51              push    ecx
	00401BE3    E8 7F6C0000     call    00408867
	00401BE8    83C4 08         add     esp, 0x8
	00401BEB    8BCB            mov     ecx, ebx
	00401BED    6A 00           push    0x0
	00401BEF    E8 A4AA0000     call    0040C698
	00401BF4    EB 3C           jmp     short 00401C32                   ; 这里改成JMP,跳过下面的函数调用,以免程序异常
	00401BF6    90              nop
	00401BF7    90              nop

        再运行,OK,收工了~
2009-9-9 17:54
0
雪    币: 1969
活跃值: (46)
能力值: (RANK:550 )
在线值:
发帖
回帖
粉丝
3
验证通过
时长:354Min
得分:39.35
2009-9-11 12:36
0
游客
登录 | 注册 方可回帖
返回
//