寂寞的季节 发表于 2008-2-16 21:39:06

菜鸟也脱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 编辑 ]

月之精灵 发表于 2008-2-16 21:59:19

好啊,谢谢分享,顶一个先啊,写得很详细,学习了

fonge 发表于 2008-2-16 23:19:37

十分工整!

glts 发表于 2008-2-16 23:19:49

/:good 非常工整,很好!贴子排得很整齐.

寂寞的季节 发表于 2008-2-16 23:34:55

几位客气了,也见笑了.

啊CR 发表于 2008-2-16 23:34:55

xuexi排版技术

齐东野人 发表于 2008-2-17 00:05:05

学习一下,谢谢发文

tkl110 发表于 2008-2-24 09:30:41

学习下 好文 谢谢

baby520 发表于 2008-2-26 22:00:38

请吧 连接地址贴出来 下来练练手
谢谢楼主的强文

guguangxing 发表于 2008-2-27 19:25:25

好东西,就该多支持
页: [1] 2 3
查看完整版本: 菜鸟也脱Armadillo的Code Splicing和Import Table Elimination