首页
社区
课程
招聘
[求助]DCG_3_3求助
发表于: 2007-11-14 14:21 4142

[求助]DCG_3_3求助

2007-11-14 14:21
4142
程序入口处从00401051至0040106A对数据块[0040106C,0040106C+0EC9*4]进行还原.
于是在0040106C处设断,然后F9运行,Dump到DCG_3_3_Dump.exe.

使用IDA的脚本来实现代码还原也很简单.代码如下:

#include <idc.idc>

static main()
{
        auto address, newvalue, t;
        address = 0x0040106C;
               
        for(t = 0; t<0x0ec9; t=t+1)
        {
                newvalue = Dword(address)^0x5DC2DEF8+0x9F9345AC;
                PatchDword( address, newvalue );
                address = address+4;
        }
}

written:00401051                 public start
written:00401051 start:
written:00401051                 mov     edx, offset loc_40106C
written:00401056                 mov     ecx, 0EC9h
written:00401056
written:0040105B
written:0040105B loc_40105B:                           
written:0040105B                 xor     dword ptr [edx], 5DC2DEF8h
written:00401061                 add     dword ptr [edx], 9F9345ACh
written:00401067                 add     edx, 4
written:0040106A                 loop    loc_40105B
written:0040106A
written:0040106C
written:0040106C loc_40106C:                           
written:0040106C                 les     edx, [edx]

使用IDA分析DCG_3_3_Dump.exe. 其中还有些小干扰就不贴了.

0040142D处创建线程,线程函数在00401526处.

written:0040142D                 push    offset ThreadProc
written:0040142D sub_40141F      endp
written:0040142D
written:00401432                 push    1000h
written:00401437                 push    0
written:00401439                 call    CreateThread

written:00401526 ThreadProc      proc near               
written:00401526 arg_8           = dword ptr  10h
written:00401526
written:00401526                 push    ebp
written:00401527                 mov     ebp, esp
written:00401529                 mov     byte_40166A, 0
written:00401530                 call    Trapper
written:00401535                 push    ebp
written:00401536                 mov     ebp, esp
written:00401538                 push    ebx
written:00401539                 push    esi
written:0040153A                 push    edi
written:0040153B                 mov     edx, [ebp+arg_8]
written:0040153E                 mov     dword ptr [edx+0B8h], offset loc_401571
written:00401548
written:00401548 loc_401548:
written:00401548                 mov     dword ptr [edx+18h], 155h
written:0040154F
written:0040154F loc_40154F:
written:0040154F                 add     edx, 4
written:00401552                 sub     eax, eax
written:00401554                 mov     [edx], eax
written:00401556                 mov     [edx+4], eax
written:00401559                 mov     [edx+8], eax
written:0040155C                 mov     [edx+0Ch], eax
written:0040155F                 pop     edi
written:00401560                 pop     esi
written:00401561                 pop     ebx
written:00401562                 pop     ebp
written:00401563                 retn
written:00401563 ThreadProc      endp ; sp = -4

written:00401564 Trapper:                                
written:00401564                 push    dword ptr fs:0
written:0040156A                 mov     fs:0, esp
written:00401570                 int     3               ; Trap to Debugger
written:00401571
written:00401571 loc_401571:                             
written:00401571                 pop     dword ptr fs:0
written:00401577                 add     esp, 4
written:0040157A                 call    sub_4015CC
written:0040157F                 push    ebp
written:00401580                 mov     ebp, esp
written:00401582                 push    ebx
written:00401583                 push    esi
written:00401584                 push    edi
written:00401585                 mov     esi, [ebp+10h]
written:00401588                 mov     dword ptr [esi+0B8h], offset loc_4015DD
written:00401592                 and     eax, 0
written:00401595                 call    near ptr sub_4015AA

下面计算包含SEH的代码的检验和,检验代码有没有被修改. 我先把00401570处的INT3
改为90, 运行到下面的代码时,再把90改回INT3,这样希望能得到正确的检验和.

written:004015F4 loc_4015F4:                             
written:004015F4                 dec     esi
written:004015F5 loc_4015F5:                             
written:004015F5                 cmp     esi, offset ThreadProc
written:004015FB                 jb      short loc_401607
written:004015FB
written:004015FD                 lodsb
written:004015FE                 dec     dl
written:00401600                 xor     dl, al
written:00401602                 sub     dl, 37h
written:00401605                 jmp     short loc_4015F5

跑到下面这块代码我没折了.0040165A处根据al来修正下面的代码.
虽然00401615 处提示,我还是不知道该怎么办了.

written:00401607 loc_401607:                             
written:00401607                 mov     al, dl
written:00401609                 stosb
written:0040160A                 push    edi
written:0040160B                 mov     ecx, 2Eh
written:00401610                 call    loc_401643
written:00401610
written:00401610 ; ---------------------------------------------------------------------------
written:00401615 s_YouAreJustASi db 'you are just a SINGLE STEP away from the core',0
written:00401643 ; ---------------------------------------------------------------------------
written:00401643
written:00401643 loc_401643:                           
written:00401643                 pop     esi
written:00401644                 inc     edi
written:00401645                 cld
written:00401646                 repe cmpsb
written:00401648                 pop     eax
written:00401649                 xchg    eax, edi
written:0040164A                 mov     ebx, eax
written:0040164C                 sub     eax, edi
written:0040164E                 dec     eax
written:0040164F                 cdq
written:00401650                 mov     ecx, 2Eh
written:00401655                 div     ecx
written:00401657                 shl     eax, 3
written:0040165A                 or      byte_40166A, al
written:00401660                 shl     eax, 1
written:00401662                 or      byte_40166A, al
written:00401662
written:00401662 ; ---------------------------------------------------------------------------
written:00401668                 db 0FFh, 24h
written:0040166A*byte_40166A     db 0                  
written:0040166A*                                        ; written:0040165Aw
written:0040166A*                                        ; written:00401662w

在网上没找到这破文,所以请那位大侠指教一二,不胜感谢:).没有权限,所以不能上传附件.需要的话发邮件给我:

icommander@163.com

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 1844
活跃值: (35)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
2
这是考试 CM ? 如果是就不要公开讨论
2007-11-14 21:00
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
我倒不是想用这个CrackMe来通过考试. 实在是技穷无着了.
网上同种性质的CrackMe的文章一大把, 就是没有这个.
2007-11-15 09:56
0
游客
登录 | 注册 方可回帖
返回
//