穿山甲Armadillo 9.x高版本手动过注册并手动脱壳
运行环境:Win2003、Win7 x64;Win10 x64;
涉及工具:
OllyDbg 1.10、Scylla 0.98、Lord PE、ImpREC 1.7;
教程类型:
破解限制;
视频是否带有论坛水印:
是;视频前五秒及记事本课件带有论坛水印;
是否讲解思路和原理:
是;
是否为悬赏杀手:
是;https://www.52hb.com/thread-56501-1-1.html
以下为图文内容:
穿山甲Armadillo 9.x高版本手动过注册并手动脱壳
boot 吾爱汇编论坛
Always your best friend !
2022.07.16
============
这份教程分为两大部分:
1、过注册并解码;
2、在1、的基础上,直接脱壳;
============
关于Armadillo穿山甲壳:
Armadillo 授权特征,硬件特征码xxxx-xxxx(比如200C-A9BD)密钥为xx xxxx-xxxx-xxxx-xxxx(比如34 BEEA-ED90-F536-DC77);
Armadillo 9.x版本特征,PEID 0.9x查壳显示Microsoft Visual C++ 8 *,区段是.text1,载入OD的第一句是CALL xxxxxxxx,相邻几句为JMP xxxxxxxx;
输入正确的密钥后,注册框消失,正常载入软件;
============
================================================
第一部分 1、过注册并解码;
================================================
1、过注册并解码;
通过查壳并载入OD,观察基址004开头,初步判断:这是个伪装成dll的exe文件,把后缀改成exe,果然是。
一般dll基址或者地址是1xx开头或者2xx,甚至更大...
准备,
非常推荐在XP或者Win 2003脱壳;
正版硬件特征码:200C-A9BD <=> 简写成200CA9BD
正版密钥:34 BEEA-ED90-F536-DC77
我的硬件特征码:DFF0-ADF0 <=> 简写成DFF0ADF0
步骤:
(1)VirtualProtect下断一次,观察堆栈,获取到关键地址:00E51000
注意:
xp或者win 2003 系统只用断1次即可取得关键地址,我的Win7 x64虚拟机断到第11次才能取到关键地址,Win10 x64虚拟机是断1次就能取到了;
但是,xp或者win 2003系统下的关键地址是固定的;Win7 x64、Win10 x64的关键地址是动态变化的,即使关闭ASLR也无法解决,这给我们脱壳或者打补丁的定位造成干扰;
所以推荐XP 或者Win 2003系统进行操作;
(2)跟随这个关键地址:00E51000;跟进段首,右键->查看->参考文本字符串,搜索FINGERPRINT
(3)这个00E66F01 是生成机器码的地方,我们找这个关键call 00E66EDF 断下,断下之后跟进,直到单步到段尾,段尾下断。
此时段尾的地址,我们标记成“拦截机器码”地址:00E5B53F
(4)观察此时的寄存器EAX==,寄存器的值就是我们硬件特征码的值;我们修改成正版的硬件特征码,连续改8次,按8次F9;直到弹出注册成功,此时注册信息已写入。
一般情况下注册核对通过后,会直接载入软件界面,此时却直接报错;
(5)处理报错,以及报错原因分析?
报错原因分析?
============
DLL的优先加载原则:
dll加载机制:就近加载原则:如果exe目录下有同名dll则加载这个dll,如果找不到,则加载系统的dll。
即:这个软件运行必须具备mfc100.dll组件;这个组件必须位于和软件xieru.exe同一目录,软件运行后会优先加载目录下的mfc100.dll;
如果软件目录找不到mfc100.dll,则加载系统system32文件夹下的默认mfc100.dll。
被这个软件坑过,网上下载的mfc100.dll无法兼容软件,即使正确过注册后,软件仍然缺少组件,无法运行;自然无法进行下一步脱壳;
所以用软件包自带的mfc100.dll。
另外,再举个例子,常用的劫持补丁,通常劫持一个特殊的dll:winspool.drv ,这是个打印机驱动文件。软件启动后优先加载exe目录下的winspool.drv;
一般补丁喜欢劫持这个从而破解......
============
(6)处理报错后,再次尝试过注册。
可以看到,这次是需要补10次机器码(前面是8次,这次再补2次);软件成功运行,搜索401000可以看到已经解码,字符串也可以被搜索到了。
=================第一部分(完)======================
================================================
第二部分 2、在1、的基础上,直接脱壳;
================================================
2、在1、的基础上,直接脱壳;
(1)VirtualProtect中断一次,之后在“拦截机器码”地址:00E5B53F 直接下断;修改八次机器码,留意,改完第八次后不要按F9;
(2)GetModuleHandleA中断一次,之后执行到用户代码;
2.1)Bypass Magic_JMP 并过解码校验:
修改三处:
Magic_JMP 00E9006C
00E9006C /EB 5F jmp short 00E900CD ; Magic_JMP
JNZ_100E900D9
00E900D9 90 nop ; JNZ_1
00E900DA 90 nop
JNZ_2 00E9011A
00E9011A 90 nop ; JNZ_2
00E9011B 90 nop
在两个salc之前的JMP断下后撤销三处修改;并在“拦截机器码”地址: 00E5B53F继续下断;继续补两次机器码,改完第2次后不要按F9,
(3)CreateThread中断一次,之后执行到用户代码;
(4)单步到CALL EDX,F7单步,进入到OEP;此时到达OEP;
脱壳、修复与跨平台(跨系统):
1.推荐:用Scylla_x86 CN.exe修复,遇到无效指针直接删除掉即可,经过Scylla 0.98修复的,是可以实现跨平台(跨系统)的;
2.不推荐用:ImpREC FINAL 1.7汉化版修复,只能本机运行,不能跨平台,应该指针修复问题,具体我没单步跟......;
测试跨平台:
Win XP、Win 2003:OK
Win 7 x64:部分OK
Win 10 x64:部分OK
=================第二部分(完)======================
现象,XP或者Win 2003最适合脱壳/Patch。Win7、win10,Patch之后如果文件不全,有概率无法正常载入/报错。
============
为什么是八次?因为之后kernel32.dll是合适的返回时机。
为什么补两次?因为软件需要总共修改10次才能正常解码并运行;
总思路:八次,留意,改完第八次后不要按F9,GetModuleHandleA;Bypass Magic_JMP 并过解码校验 ,在两个salc之前的JMP断下后恢复。继续补两次机器码,改完第2次后不要按F9,CreateThread 单步到OEP。
还有其他问题?
============
Q:破解Armadillo授权必须需要一个正版硬件码和正版密钥吗?
A:是的,一个正版硬件码匹配一个正版密钥,如果密钥不对,则无法解码,00401000段首为空,解码失败,程序无法运行;
我尝试过,低版本或许可以通过暂停+单步定位到关键跳,并且在修改关键跳后能够跳过注册框,但是只是提示正确注册,但仍然无法载入软件。
Q:关于补丁?
A:我尝试过baymax补丁或者是其他补丁,无法劫持/无法中断,所以放弃了打补丁的想法。
早期版本是可以通过制作Security.dll补丁进行过注册,由于我没有补丁及源码,所以没有尝试过。
Q:此类程序最好的解决措施?
A:直接脱壳,其步骤是:Patch机器码->过注册->Bypass校验->脱壳。
============
Q:附带一提?脱壳时机,为什么是到了OEP且程序处于(Pause)暂停的状态下,进行Dump并修复?为什么不是(Run)的状态完成?
A:程序运行后,全局变量改变,此时脱壳,Dump时机不对,会导致脱壳后报错。
============
OK!
截图预览:
文件预览:
视频:28min、78.5MB;课件9.0MB;
下载链接:**** Hidden Message *****
@寒宇 问题不大,决定上传教程;
boot教程质量一如既往的高 谢谢分享!!!!!!!!!!!!!!! boot大神yyds
很好的事例教程,学习方法了 大佬 NB 膜拜~ 感谢分享 厉害了,膜拜大佬。 看看这个教程如何呢 感谢分享,下载学习一下