菜鸟也脱Armadillo的Code Splicing和Import Table Elimination
【文章标题】: 菜鸟也脱Armadillo的Code Splicing和Import Table Elimination【文章作者】: 寂寞的季节
【作者邮箱】: [email protected]
【作者主页】: www.TheJiMo.cn
【软件名称】: 《侠义道II·侠义菜鸟辅助》
【下载地址】: 看雪论坛求助贴
【保护方式】: Armadillo的Code Splicing和Import Table Elimination
【使用工具】: OllyDBD、PEiD、LordPE、ImportREC、ArmInline
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
先八卦一下:
假期快结束了,又懒散过了一个月.啥也没学,就老想女生了....俺真失败.总要找点东西去做,否则会更颓废的.神啊 救救我吧
长期潜水来,第一次写脱文,因为俺很懒.
_____________________________________________________________
【大概流程】:
1.寻找OEP
2.IAT大小
3.ArmInline解决Code Splicing和Import Table Elimination
4.修复
_____________________________________________________________
!- Protected Armadillo
Protection system (Professional)
!- <Protection Options>
Standard protection or Minimum protection
Enable Import Table Elimination
Enable Strategic Code Splicing
!- <Backup Key Options>
Fixed Backup Keys
!- <Compression Options>
Best/Slowest Compression
!- <Other Options>
!- Version 4.40 31October2005
标准版的保护方式,不是很麻烦.
_____________________________________________________________
一.OEP
1.寻找Magic Jump返回的时机
忽略所有异常,隐藏OD0051BC43 >55 push ebp
0051BC44 8BEC mov ebp,esp
0051BC46 6A FF push -1
0051BC48 68 904F5400 push Loader.00544F90
0051BC4D 68 80B95100 push Loader.0051B980
0051BC52 64:A1 00000000 mov eax,dword ptr fs:
0051BC58 50 push eax
0051BC59 64:8925 00000000 mov dword ptr fs:,esp
0051BC60 83EC 58 sub esp,58
0051BC63 53 push ebx
0051BC64 56 push esi下断:he GetModuleHandleA+5Shift+F9 观察堆栈0012FF34/0012FFC0
0012FF38|0051BD0B返回到 Loader.0051BD0B 来自 kernel32.GetModuleHandleA0012EE60/0012EE98
0012EE64|5D175324返回到 5D175324 来自 kernel32.GetModuleHandleA
0012EE68|5D175370ASCII "kernel32.dll" 0012EF20/0012EF3C
0012EF24|77F45BD8返回到 SHLWAPI.77F45BD8 来自 kernel32.GetModuleHandleA
0012EF28|77F4501CASCII "KERNEL32.DLL" 0012F738/0012F7A0
0012F73C|005068F3返回到 Loader.005068F3 来自 kernel32.GetModuleHandleA00129524/0012EC6C
00129528|00C27105返回到 00C27105 来自 kernel32.GetModuleHandleA
0012952C|00C3BC1CASCII "kernel32.dll"
00129530|00C3CEC4ASCII "VirtualAlloc" 00129524/0012EC6C
00129528|00C27122返回到 00C27122 来自 kernel32.GetModuleHandleA
0012952C|00C3BC1CASCII "kernel32.dll"
00129530|00C3CEB8ASCII "VirtualFree"
00129288/00129528
0012928C|00C15FC9返回到 00C15FC9 来自 kernel32.GetModuleHandleA
00129290|001293DCASCII "kernel32.dll"删除断点 ALT+F9返回00C15FE3 FF15 BC62C300 call dword ptr ds: ; kernel32.LoadLibraryA
00C15FE9 8B0D AC40C400 mov ecx,dword ptr ds:
00C15FEF 89040E mov dword ptr ds:,eax
00C15FF2 A1 AC40C400 mov eax,dword ptr ds:
00C15FF7 391C06 cmp dword ptr ds:,ebx
00C15FFA 0F84 2F010000 je 00C1612F
00C16000 33C9 xor ecx,ecx
00C16002 8B07 mov eax,dword ptr ds:
00C16004 3918 cmp dword ptr ds:,ebxje 00C1612F修改jmp 00C1612F 回车跟到下面00C1612F 83C7 0C add edi,0C
00C16132 89BD 78FDFFFF mov dword ptr ss:,edi
00C16138 83C6 04 add esi,4
00C1613B 395F FC cmp dword ptr ds:,ebx
00C1613E^ 0F85 49FEFFFF jnz 00C15F8D
00C16144 EB 03 jmp short 00C16149
00C16146 D6 salc
00C16147 D6 salcjmp short 00C16149 下硬件断点Shift+F9 断下 删除断点
向上找回原来的Magic Jump撤销选择
下断:BP CreateThread7C810637 >8BFF mov edi,edi
7C810639 55 push ebp
7C81063A 8BEC mov ebp,esp
7C81063C FF75 1C push dword ptr ss:
7C81063F FF75 18 push dword ptr ss:
7C810642 FF75 14 push dword ptr ss:
7C810645 FF75 10 push dword ptr ss:
7C810648 FF75 0C push dword ptr ss:
7C81064B FF75 08 push dword ptr ss:取消断点 ALT+F900C1C51E 50 push eax
00C1C51F FF15 4C62C300 call dword ptr ds: ; kernel32.CloseHandle
00C1C525 5F pop edi
00C1C526 5E pop esi
00C1C527 C9 leave
00C1C528 C3 retnF8一路向下 00C2F9CC /75 1B jnz short 00C2F9E9
00C2F9CE |FF77 04 push dword ptr ds:
00C2F9D1 |FF77 08 push dword ptr ds:
00C2F9D4 |6A 00 push 0
00C2F9D6 |FF77 0C push dword ptr ds:
00C2F9D9 |8B50 60 mov edx,dword ptr ds:
00C2F9DC |3350 44 xor edx,dword ptr ds:
00C2F9DF |3350 1C xor edx,dword ptr ds:
00C2F9E2 |2BCA sub ecx,edx
00C2F9E4 |FFD1 call ecx ; F7跟进去004C5324 55 push ebp OEP
004C5325 8BEC mov ebp,esp
004C5327 83C4 F0 add esp,-10
004C532A B8 A44E4C00 mov eax,Loader.004C4EA4
004C532F E8 DC17F4FF call Loader.00406B10
004C5334 A1 8C9C4C00 mov eax,dword ptr ds:
004C5339 8B00 mov eax,dword ptr ds:
004C533B E8 94FDF9FF call Loader.004650D4_____________________________________________________________
二.寻找IAT大小
Ctrl+b 搜索 FF 25004012FC- FF25 E81BE400 jmp dword ptr ds: ; ntdll.RtlUnwind
00401302 8BC0 mov eax,eax
00401304- FF25 1C16E400 jmp dword ptr ds: ; kernel32.UnhandledExceptionFilter
0040130A 8BC0 mov eax,eax
0040130C- FF25 D018E400 jmp dword ptr ds: ; kernel32.WriteFile
00401312 8BC0 mov eax,eax
00401314- FF25 AC1BE400 jmp dword ptr ds: ; USER32.CharNextA
0040131A 8BC0 mov eax,eax
0040131C- FF25 8014E400 jmp dword ptr ds: ; kernel32.CreateThreadjmp dword ptr ds:
数据窗口中跟随 内存地址00E413B80006012C
00E413BC021C0756
00E413C077D2F8EAUSER32.FrameRect
00E413C477D18E28USER32.RegisterWindowMessageA
00E41D6876B10000winmm.76B10000
00E41D6CBAADF00DIAT头00E413BC
IAT大小00E41D6C-00E413BC=9B0
_____________________________________________________________
三.ArmInline解决Code Splicing和Import Table Elimination
打开ArmInline选择进程Loader.exe
Code Splicing选项中将代码长度改为20000
Import Table输入自己记录数据 IAT头00E413BC 大小9B0 新建的IAT它提供的信息是4CC000 我们到内存窗口看下
内存映射,项目 26
地址=004CC000
大小=00003000 (12288.)
物主=Loader 00400000
区段=.idata
类型=Imag 01001002
访问=R
初始访问=RWE
正好不用修改了 删除拼接和变基IAT
_____________________________________________________________
四.修复
ArmInline修复完毕后就可以用LordPE来dump进程了
ImportREC载入修复,全是有效的,保存吧
可以运行了Borland Delphi 6.0 - 7.0
--------------------------------------------------------------------------------
【经验总结】
标准版的没啥难度,非标准版就麻烦许多,而且没有CC保护更容易了. 感谢观赏
--------------------------------------------------------------------------------
【版权声明】: 转载请注明作者并保持文章的完整, 谢谢!
2008年02月16日 下午 07:46:04
[ 本帖最后由 寂寞的季节 于 2008-2-16 22:30 编辑 ] 好啊,谢谢分享,顶一个先啊,写得很详细,学习了 十分工整! /:good 非常工整,很好!贴子排得很整齐. 几位客气了,也见笑了. xuexi排版技术 学习一下,谢谢发文 学习下 好文 谢谢 请吧 连接地址贴出来 下来练练手
谢谢楼主的强文 好东西,就该多支持