脱DLL双层壳+修复
双层壳:ASPack 2.11+PECompact(原的+脱的在附件)OD载入在:
003E0001 > 60 pushad-------------------F8
003E0002E9 3D040000 jmp 1.003E0444---------------------HR ESP---F9
003E0007A1 30D3CFB9 mov eax,dword ptr ds:
003E000CF6 ??? ; 未知命令
003E000DCF iretd
断在:
003E03AB/75 08 jnz short 1.003E03B5---删除断点---F8
003E03AD|B8 01000000 mov eax,1
003E03B2|C2 0C00 retn 0C
003E03B5\68 00B03D00 push 1.003DB000
003E03BAC3 retn
003DB000/EB 06 jmp short 1.003DB008----------第二层壳的入口---F8
003DB002|68 14450000 push 4514----------OEP的RVA(直接在003D4514处下 硬件执行 断点,或者下内存断点,F9运行就中断在OEP了。但在这个DLL脱了不能运行,只好一步步往下走)
003DB007|C3 retn
003DB008\9C pushfd
003DB00960 pushad
003DB00AE8 02000000 call 1.003DB011--------------------F7
003DB00F33C0 xor eax,eax
003DB0118BC4 mov eax,esp
003DB01383C0 04 add eax,4
003DB01693 xchg eax,ebx
003DB0178BE3 mov esp,ebx
003DB0198B5B FC mov ebx,dword ptr ds:
003DB01C81EB 0FA04000 sub ebx,40A00F
003DB02287DD xchg ebp,ebx
............
003DC1EF/EB 14 jmp short 1.003DC205
003DC1F1|6E outs dx,byte ptr es:
003DC1F2|F1 int1
003DC1F3|3D 0011B000 cmp eax,0B01100
003DC1F8|0000 add byte ptr ds:,al
003DC1FA|003D 0000B000 add byte ptr ds:,bh
003DC200|0000 add byte ptr ds:,al
003DC202|F0:0000 lock add byte ptr ds:,al
003DC205\8BB5 A6A04000 mov esi,dword ptr ss:
Ctrl+S在整个段块搜索命令序列:
代码:
add esi,ebx
xor eax,eax
找到以下代码:
003DC5758B9D A6A04000 mov ebx,dword ptr ss:---硬件执行断点---F9
003DC57B3B9D 3BA64000 cmp ebx,dword ptr ss:
003DC58175 01 jnz short 1.003DC584---如与映像基址不符则重定位处理!
003DC583C3 retn
003DC5848BB5 3FA64000 mov esi,dword ptr ss:
ss:=00009000 ---重定位表的开始 RVA
003DC58A03F3 add esi,ebx
003DC58C33C0 xor eax,eax
003DC58E66:8B43 3C mov ax,word ptr ds:
003DC59203C3 add eax,ebx
003DC5948B80 C0000000 mov eax,dword ptr ds:
003DC59A85C0 test eax,eax
003DC59C75 08 jnz short 1.003DC5A6
003DC59E2B9D 3BA64000 sub ebx,dword ptr ss:
003DC5A4EB 0F jmp short 1.003DC5B5
003DC5A603C3 add eax,ebx
003DC5A82B9D 3BA64000 sub ebx,dword ptr ss:
003DC5AE0118 add dword ptr ds:,ebx
003DC5B083C0 04 add eax,4
003DC5B30118 add dword ptr ds:,ebx
003DC5B5AD lods dword ptr ds:---开始处理一段
003DC5B60BC0 or eax,eax
003DC5B874 6F je short 1.003DC629
003DC5BA8BD0 mov edx,eax
003DC5BC0395 A6A04000 add edx,dword ptr ss:
003DC5C2AD lods dword ptr ds:
003DC5C38BC8 mov ecx,eax
003DC5C583E9 08 sub ecx,8
003DC5C8D1E9 shr ecx,1
003DC5CA66:C785 31A64000 00>mov word ptr ss:,0---初始值, 变形的关键
003DC5D333C0 xor eax,eax
003DC5D566:AD lods word ptr ds:
003DC5D70BC0 or eax,eax
003DC5D974 49 je short 1.003DC624
003DC5DB66:0385 31A64000add ax,word ptr ss:
003DC5E266:8985 31A64000mov word ptr ss:,ax
003DC5E950 push eax---------------变形值已还原(改动为:)
003DC5E966:8946 FE mov word ptr ds:,ax
003DC5ED49 dec ecx
003DC5EE ^ 75 E3 jnz short 1.003DC5D3
003DC5F0 ^ EB C3 jmp short 1.003DC5B5
..........
003DC621/EB 01 jmp short 1.003DC624
003DC623|58 pop eax
003DC624\49 dec ecx
003DC625 ^ 75 AC jnz short 1.003DC5D3
003DC627 ^ EB 8C jmp short 1.003DC5B5
003DC629C3 retn-------------------硬件执行断点---F9
ESI=003D9354
重定位表结束地址=003D9354-4=003D9350
重定位表大小=003D9350-003D9000=350
LordPE 修改重定位表为 重定位=9000, 大小=350, OK.
F8往下:
003DC482E8 8F0C0000 call 1.003DD116
003DC48761 popad
003DC4889D popfd
003DC48950 push eax
003DC48A68 14453D00 push 1.003D4514
003DC48FC2 0400 retn 4---------------F8
003D451455 push ebp------------------OEP
003D45158BEC mov ebp,esp
003D451783C4 C4 add esp,-3C
003D451AB8 E4444000 mov eax,4044E4
003D451FE8 CCFBFFFF call 1.003D40F0
003D4524E8 D3F2FFFF call 1.003D37FC
003D45298D40 00 lea eax,dword ptr ds:
003D452C0000 add byte ptr ds:,al
003D452E0000 add byte ptr ds:,al
003D45300000 add byte ptr ds:,al
003D45320000 add byte ptr ds:,al
003D45340000 add byte ptr ds:,al
003D45360000 add byte ptr ds:,al
003D45380000 add byte ptr ds:,al
003D453A0000 add byte ptr ds:,al
用LordPE选中Ollydbg的loaddll.exe的进程,在下面的列表里选择1.dll,然后完整脱壳,得到dumped.dll。
Dump完之后,不要关闭Ollydbg,还要为下面的处理重定位表提供点准备。
随便从程序找一个API调用,如:
003D1000$- FF25 E8703D00 jmp dword ptr ds: kernel32.CloseHandle
在转存中跟随003D1000,上下看到许多函数地址,很明显的可以找到IAT开始和结束的地址:
开始地址=003D7078
结束地址=003D7128
大小=003D7128-003D7078=50
运行ImportREC,选中Ollydbg的loaddll.exe的进程,然后点“选取DLL”,选择1.dll,填入RVA=00007078、大小=50、OEP=00004514 ,点“Get Import”。用PEditor纠正dumped.dll的DumpFixer,修正区块。FixDump!
脱壳DLL经测试成功! 学习DLL脱壳重定位~~~ 学习一下先了.哈哈~~~ 正在找这方面的资料,可惜壳不一样。学习了 下来研究研究,谢谢了 DLL最可怕的重定位,也是最麻烦的来学习啦!!!! 好东西哦 收下了 感谢楼主发布 必须顶一下 。。。。弄不明白 下来研究研究 学习下
页:
[1]