-
-
[求助]请各位大牛指点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出来的文件,还没有重建重定位表,本人是第一次练习脱壳,有些疑惑,请各位指点。谢谢!
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出来的文件,还没有重建重定位表,本人是第一次练习脱壳,有些疑惑,请各位指点。谢谢!
赞赏
赞赏
雪币:
留言: