首页
社区
课程
招聘
[求助]请各位大牛指点DLL脱壳dump的问题
发表于: 2012-5-4 00:47 3489

[求助]请各位大牛指点DLL脱壳dump的问题

2012-5-4 00:47
3489
下面附件是此DLL原始文件,采用protection plus 4.x加壳:
SKCL.rar
采用ESP定律找到OEP,并跳过IAT加密,此原始文件imagebase为35630000,加载时基址不变。因此我就直接dump了。下面附件是dump出来的文件:
dump-SKCL.rar
此附件已经修复IAT了,修复过程提示仍有16个函数无法修复,看情况似乎是没用的函数,于是直接删除。

接下来,该修复重定位表了,可是,问题来了,有些不明白该如何操作,请各位指教:
重定位代码如下:
00FE1F54    33D2                         xor     edx, edx
00FE1F56    8A50 04                      mov     dl, byte ptr [eax+4]
00FE1F59    83EA 00                      sub     edx, 0
00FE1F5C    74 1C                        je      short 00FE1F7A
00FE1F5E    4A                           dec     edx
00FE1F5F    74 0E                        je      short 00FE1F6F
00FE1F61    4A                           dec     edx
00FE1F62    75 1E                        jnz     short 00FE1F82
00FE1F64    8B10                         mov     edx, dword ptr [eax]
00FE1F66    8B19                         mov     ebx, dword ptr [ecx]
00FE1F68    03D3                         add     edx, ebx
00FE1F6A    66:0132                      add     word ptr [edx], si
00FE1F6D    EB 13                        jmp     short 00FE1F82
00FE1F6F    8B10                         mov     edx, dword ptr [eax]
00FE1F71    8B19                         mov     ebx, dword ptr [ecx]
00FE1F73    03D3                         add     edx, ebx
00FE1F75    66:013A                      add     word ptr [edx], di
00FE1F78    EB 08                        jmp     short 00FE1F82
00FE1F7A    8B10                         mov     edx, dword ptr [eax]
00FE1F7C    8B19                         mov     ebx, dword ptr [ecx]
00FE1F7E    03D3                         add     edx, ebx
00FE1F80    0132                         add     dword ptr [edx], esi   这一句应该是重定位了,调试时,dword ptr [edx]的值是100XXXXX,esi则等于25630000。
00FE1F82    8B50 05                      mov     edx, dword ptr [eax+5]
00FE1F85    83C0 05                      add     eax, 5
00FE1F88    85D2                         test    edx, edx
00FE1F8A  ^ 75 C8                        jnz     short 00FE1F54
00FE1F8C    5B                           pop     ebx
00FE1F8D    5F                           pop     edi
00FE1F8E    5E                           pop     esi
00FE1F8F    C2 0400                      retn    4

以下是代码部分重定位后的情况:
35657ACF  |.  8B75 0C                    mov     esi, dword ptr [ebp+C]
35657AD2  |.  57                         push    edi
35657AD3  |.  8B7D 10                    mov     edi, dword ptr [ebp+10]
35657AD6  |.  85F6                       test    esi, esi
35657AD8  |.  75 09                      jnz     short 35657AE3
35657ADA  |.  833D A0976635 00           cmp     dword ptr [356697A0], 0    这句已经重定位了
35657AE1  |.  EB 26                      jmp     short 35657B09
35657AE3  |>  83FE 01                    cmp     esi, 1
35657AE6  |.  74 05                      je      short 35657AED
35657AE8  |.  83FE 02                    cmp     esi, 2
35657AEB  |.  75 22                      jnz     short 35657B0F
35657AED  |>  A1 ACB10310                mov     eax, dword ptr [1003B1AC]   这句还没有重定位
35657AF2  |.  85C0                       test    eax, eax
35657AF4  |.  74 09                      je      short 35657AFF

由此我们看出,加壳前的文件,imaebase应该是10000000,作者在对DLL加壳时把IMAGEBASE人为改成35630000,DLL加载时,外壳程序先解密原始代码,然后经外壳程序重定位后才变成与磁盘文件的imagebase一致。给人的感觉,此dll在加载后没有重定位。因此,dump前我没有刻意修改程序,使其不进行重定位,因为这样一改,反而使内存文件与磁盘的imagebase不一致了。

现在的问题是,我如此这般dump出来的文件能有效么?(dump后的程序,imagebase是35630000,找到OEP进行Dump时,代码中各绝对地址也是加上此基址后的绝对数值)

我是不是应该在外壳对DLL重定位前就dump呢?这样才能保证DLL与加壳前一致(基址是10000000),如果这样,我是不是只需要nop掉重定位的这个call,然后执行至EOP,dump,再对dump出来的dll简单修改一下imagebase就可以了。(把35630000改成10000000)。

dump出来的文件,还没有重建重定位表,本人是第一次练习脱壳,有些疑惑,请各位指点。谢谢!

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回