Armadillo资料集锦
前段时间,我对Armadillo壳很感兴趣,于是收集了很多资料,想好好研究一番,
这些文章来自很多站点,感谢:看学论坛,白菜乐园,探索杂志……
最近又看到很多Cracker在对付Armadillo时遇到了麻烦,所以拿到新论坛共享
给大家.
*****************
第一章,大虾们的脱壳文章
*****************
----------------------------------------------------------------------
(1).
----------------------------------------------------------------------
标 题:手動脫殼的方法. (975字)
发信人:1212
时 间:2000-9-17 22:53:30
详细信息:
噫!我以前貼過Armadillo的脫殼方法,怎麼不能舉一反三.
[目標軟體]:VB power wrap V1.7
[保護機制]:Armadillo保護,防Soft-ICE,時間限制.
[使用工具]:1.Trw2000
2.Bw2000
3.Procdump32
4.Regmon
[手動脫殼]:1.第一次執行被Armadillo保護的軟體,Armadillo會在C:\WINDOWS\TEMP\的目錄
下解壓一個Armxxxx.tmp的文件,這是保護系統的dll,程式用它Anti-Debugger,設置時間標誌
等等,並將所取得的環境資訊寫入註冊表中,以供程式比對運用,這個Key的路徑在
HKLM\Software\The Sillicon Realms Toolworks\Armadillo,故若你的軟件試用期已過,你便
需要把這個Key刪除,重新獲得試用。
2.若你有安裝Soft-ICE,須先把它移除,以利作業,首先執行BW2000,按track,再執行vbrap.exe,
首先在BW2000中顯示004085BB,等到NagBox出現,按OK後會再出現一個位址0048535 C這是
VBRAP.tmp0的OEP這才是我們要的。
3.用Trw2000載入vbrap.exe,下faults off,再下G 0048535C等到NagBox出現按OK後程式會中斷
在0048535C,再下makepe(不是很穩定)或下suspend用Procdump32,選VBRAP.tmp0,dump(full),
改OEP等於0008535C即可脫殼.
C-pen 2000\9\17
----------------------------------------------------------------------
(2).
----------------------------------------------------------------------
如何破解由Armadillo 1.8或1.8x保护的程序
程式猎人翻译
工具:
winhex 9.0
w32dasm 8.7 或8.9版本(译者:最好使用8.93 gold版)
不需要其它调试工具或一定不要运行它们。
无论你有无关于这新版本的经验或者没有掌握它,你在这里都可以学习到破解1.8或1.8x
版的知识,你只要认真学习就可以了。
我们要研究的对象是Stay On Pro3.2,如果你没有这个程序,你可以到www.Stayonpro.c
om处查找相应的程序下载。这是一个用于保持网络连接的软件。
在这里我将向大家介绍大部分版本的Armadillo基本保护,而那个软件连接网络的功能对
我们不是很有用的。如果如果你现在空闲没有事情可做的话,就来研究一下Armadillo保护
吧。
开始运行Armadillo保护的程序,通常都会在本地目录下生成一个临时文件(译者:这个
文件在开始时生成,结束时删除),所在目录是程序当前的目录或在一个临时的目录中,这
个文件名为armXXXX.tmp,文件是Armadillo access (security)DLL。当这个文件正在运行
时,就可以被拷贝和汇编。在新的版本中这个文件通常隐藏在user\local seting\temp 目
录中。
由CreateFileA创建的armXXXX.Tmp放在硬盘中并由主程序的LoadLibrary来调用,在Arma
dillo中所有功能好象都是在这里加载到内存中的,以达到提供重要数据的作用。
现在主程序调用解压和解密的函数,在特定的版本中这个函数为GetProgramIinfor,Get
ProgramInfo有检查softice的调试器及其它调试器的功能,这里通常使用以下几个步骤来破
解这个保护的程序。
1 三次调用creatfilea函数,分别使用文件名为"\\.\sice","\\.\ntice" "\\.\sice".(它
是加密的形式)如果它们存在或GetlastError返回值不等于2,则程序标记,将debug旗标设
为true。
2 调用IsDebuggerPresent来检测windows调试器是否存在,对于softice等硬件调试器可以
避开这个功能(译者:这个前后有点错误),如果检测到了,就将debug设true。
3 有的版本,有一个对话框提示用户,如果当前系统中有调试器,就请关闭后重新运行程序
。如果debug的值为true,就出现这个提示窗口。’
4 如果你现在看到“this use a secet key"这通常不是要求一个key,而是删除softice\th
e sililcon的注册键值。当你一步一步跟踪时,程序知道一个debugger在跟踪或程序没有正
确的调用代码出现上述问题。
5 INT3 ,这是最后的保护。在程序中使用一个伪装的中断来阻止程序的运行。有人会说,s
oftice不是不使用INT3,除非你自己设INT3为打开状态吗?错!在softice夸大了这个功能
,而是实际中ebp被设为“BCHK”,不是一个指针,而是实际文本。在softice运行时,它有
一个调用边界检查,对于“BCHK”加载到ebp中断点中(INT3)调用的句柄对softice进行边
界检查,softice不准备放入数据或堆栈也没有准备。为了解决这个保护,你将对IsDebugge
rPresent进行设断,你需要改变这个返回值,它是一个非常好的中断。。按F12从那个函数
返回,再按二次F12跳到原程序中,离开了security(armadillo)DLL,现在按F10(单步)一
段时间,你将达到INT3中断处,ebp初始化后停止,下R ebp=44444444命令,现在就可以按c
trl+d退出ice了,这个目标程序就可以运行了。现在将如何去做呢?如果没有windows 或 s
oftice等调试工具,INT3将产生一个无句柄值,如果有则产生一个有值的句柄。
现在你知道了前面所述,你也不再需要任何上面的知识了(译者:下面方法是太高了,不
用使用softice等调试工具)。你能够使用简单的方法来破解Armadillo程序,它不需要确定
由何版本的Armadilo的加密形式,你将知道你的程序是否用1.8-1.8X加密。然而你需要知道
的是这个程序是由Armadilo保护的。其它有用的信息可以使用GetPrivateProFileString来
获得,它的相关方面可以告诉你其信息。想一想,一些程序员付$89.00来使用这个程序,唯
一可以免费的是工作在silicon Realm Toolwork的人员,现在我们就将完全使用它了。
1 不使用任何调试器(包括softice),开始运行保护的程序。你所需要的文件是你运行的
程序文件名。它由数字和“progname.tmpX"组成。如果你在开始运行“StayOnPro.exe"时,
你可以看到在当前目录中“StayOnPro.tmp()"的文件。使用ctrl+c and ctrl+V来拷贝这个
文件。
2 重命名这个文件为"StayOnPro(undilloed).exe"
3 开始winhex 9.0
4 按ALT+F9开始处理内存部分
5 选拔stayonpro.tmp()为主内存
6 到地址0040000H处,通常这个地址是windows的exe文件开始处。如果你看到MZ字样就找到
了正确的首地址了。
7 现在我们要选择一个大的内存块。先从00400000H处开始到004323D6H处,选择这之间的内
存块。我们去除前面显示00字节的块。通常程序在00400600H或00401000处开始运行程序,
代码段通常在00401000H处开始。你将选择那些除了00块以外的所有块。第二个00字节块开
始于00423D7H,因此我们到达004323D6H,有时代码段从原来的00401000H处移到00400600H
处。Armadillo给出的代码标记是X的地方就为代码段开始的地方。
8 按CTRL+C,拷贝选择的内存块。
9 选择文件/打开选项后选择打开stayonpro(undilloed).exe文件。
10 将指针放在有4D标记的块上,选择编辑/剪粘板数据/写入选项,出现一个对话框显示写
入的偏移量为0时,按ok。
11 保存文件
12 现在stay on pro 就已经被完全解密了。你可以很轻松的对它进行反汇编和追踪了。
13 你需要一个调试器了吗?不需要,说感谢自己吧。
下面是如何破解出Armadillo 1.80-1.8X本身和Armadillo 1.80-1.8X程序。
1 不使用任何调试器(包括softice),开始保护的程序。你所需要的是你运行的程序文件
名。它由数字和“progname.tmpX"组成。如果你在开始运行“Armadillo.exe"时,你可以看
到在当前目录中“Armadillo.tmp()"的文件。使用ctrl+c and ctrl+V来拷贝这个文件。
2 重命名这个文件为"Armadillo(undilloed).exe"
3 开始winhex 9.0
4 按ALT+F9开始处理内存部分
5 选拔Armadillo.tmp()为主内存
6 到地址0040000H处,通常这个地址是windows的exe文件开始处。如果你看到MZ字样就找到
了正确的首地址了。
7 现在我们要选择一个大的内存块。先从显示4D字样的00400000H处开始到0041894bH处,选
择这之间的内存块。
8 按CTRL+C,拷贝选择的内存块
9 选择文件/打开选项后选择打开Armadillo(undilloed).exe文件,
10 将指针放在有4D标记的块上,选择编辑/剪粘板数据/写入选项,出现一个对话框显示写
入的偏移量为0时,按ok。
11 保存文件
12 现在Armadillo 1.8 就已经被完全解密了或者说这个程序已经没有保护了。
13 不幸的运行程序的话将出现错误,为什么吗?程序的头信息已经指向另一个错误的地址
了。我们将如何查找代码位置呢?向下看:
14 现在我们需要w32dasm来攻击它了。
15 反汇编那个前面保存后的Armadillo(undilloed).exe文件。
16现在查找程序开始时的位置。经验告诉我所有windows的程序入口都调用GetCommandLineA
,GetStartupInfoA,GetModuleHandleA,GetVersion和ExitProcess。对于这个程序我们查
找到GetVersion函数。忽略第一个和第二个查找的结果,因为它们仅是import table的映射
,第三个也不是一个正确的,这是一个GetVersionEx,它不是我们要找的。第四个才是正确
的。
17 现在看一下,对于这个函数,我们可以利用一些或所有的功能。这个最象是windows入口
点。
18 下一步将是查找NOP或RET。这个RET的地址为412D3D。这就知道入口值为412D40(译者:
RET为两个字节)。关闭w32dasm。
19 现在就可以处理了。打开winhex,载入armadillo1.8x(unarmed).exe文件。
20 在E0处开始程序头,在108H是入口点(译者:这时是指偏移量)
21 在108H处我们将要写32—bit入口数据。