第十四课 穿山甲壳的单进程标准脱法一
第十四课 穿山甲壳的单进程标准脱法一
今天开始进入我们加密壳脱壳环节。
一,关于 Armadillo壳:
Armadillo也称穿山甲,是一款应用面较广的壳。可以运用各种手段来保护你的软件,同时也可以为软件加上种种限制,包括时间、次数,启动画面等等!很多商用软件采用其加壳。Armadillo对外发行时有Public,Custom两个版本。Public是公开演示的版本,Custom是注册用户拿到的版本。只有Custom才有完整的功能,Public版有功能限制,没什么强度,不建议采用。
二, Armadillo分类:
穿山甲这个壳变化非常多,各种不同的分法都可以分出不同类型的壳。
线程个分:
可以分为单线程双线程(即子父线程,需要父进程解码子进程)
保护手段分:
可以分Nanomites(即int3,或者有人叫CC保护方式)Code Splicing(又叫远程地址,把部分代码放到穿山甲壳所申请的内存地址去)Import Table Elimination(输入表乱序)Memory-Patching Protections(内存校验),加密情况可以分是否带KEY,当然还有版本不同的分(穿山甲壳版本不是特别重要)。
三, 如何侦查穿山甲壳
这里我们用的侦壳工具(PEID,FI)相对的还是FI比较准确点。
当然今天要介绍一款针对穿山甲壳的利器——Armadillo Find Protected V1.3
(Armadillo Find Protected可以识别出Armadillo的版本和保护方式)
四, 脱穿山甲壳步骤(单线程的标准壳)
1.FI侦壳
2.OD载入(忽略所有异常(异常选项全部勾选),隐藏OD)
3.命令行下断 HE(空格) 硬件执行断点 GetModuleHandle 后面直接跟参数A/W
A:代表ANSI编码函数。W:代表Unicode编码函数.一般软件为ANSI编码
所以这样写:HE GetModuleHandleA
4.F9运行,注意堆栈(运行一次停下来观察)
找到关键位置“ASCII "VirtualAlloc"”,其下一次运行到包含“ASCII "VirtualFree"”
5.到达(“ASCII "VirtualFree"”),再一次F9会提示不能绕过命令,确定掉提示后Shfift+F9,然后ALT+F9返回到主线程。
6.删除硬件断点,找到MAGIC跳(一般情况下是一个JE条件大跨度跳转,而且离我们的返回地址非常近,一般是 kernel32.loadLibraryA下面的第一个JE跳转。)找到MAGIC跳(je)后,我们就修改为无条件je为jmp
如:
7.查看内存,在00401000 处F2下断。然后SHIFT+F9
8.接着单步慢慢向下调试,调试到CALL ECX,F7步入
9.脱壳 LOADPE(选种进程,纠正映像大小,完整脱壳)
10.ImportREC修复,无效指针不用修复,直接CUT(减切)掉。