📄 chap8-5-5-2.htm.primary
字号:
<html>
<head>
<title>Crack Tutorial</title>
<meta http-equiv="Content-Type" content="text/html; charset=gb2312">
<link rel="stylesheet" href="style/css.css" type="text/css">
<link rel="stylesheet" href="../STYLE/Css.css" type="text/css">
</head>
<body bgcolor="white" text="#000000" link="#004080" vlink="#004080" background="../image/Back.gif">
<p><a href="../catalog.htm">目录</a>>>第8章</p>
<p align="center" class="shadow1Copy"><b class="p3">第8章 压缩与脱壳</b></p>
<table width="80%" border="0" cellspacing="0" cellpadding="3" align="center" bgcolor="#bcbcbc" bordercolor="#111111" class="shadow1">
<tr>
<td class="shadow1" width="20%">
<div align="center"><a href="Chap8-1.htm"><font color="#FFFFFF">第一节 PE文件格式</font></a></div>
</td>
<td class="shadow1" width="20%">
<div align="center"><a href="Chap8-2.htm"><font color="#FFFFFF">第二节 认识脱壳</font></a></div>
</td>
<td class="shadow1" width="20%">
<div align="center"><a href="Chap8-3-1.htm"><font color="#FFFFFF">第三节 自动脱壳</font></a></div>
</td>
<td class="shadow1" width="20%">
<div align="center"><a href="Chap8-4.htm"><font color="#FFFFFF">第四节 手动脱壳</font></a></div>
</td>
<td class="shadow1" width="20%">
<div align="center"><a href="Chap8-5.htm"><font color="#FFFFFF">第五节 脱壳高级篇</font></a></div>
</td>
</tr>
</table>
<p align="center"><span class="p9"><b>第五节 脱壳高级篇</b></span></p>
<p align="center"><b> 5、ASProtect保护</b></p>
<table border="1" width="80%" cellpadding="5" bordercolor="#111111" bgcolor="#efefef" align="center" cellspacing="0">
<tr>
<td width="33%" valign="middle" align="center" class="p9" height="23">
<div align="left"><span class="p9"><span class="p9"> <span class="p9">1、<span class="p9"><span class="p9"><a href="Chap8-5-5-1.htm"><span class="p9"><span class="p9"><span class="p9"><span class="p9">ASProtect
v0.95</span></span></span></span>保护</a></span></span></span></span></span></div>
</td>
<td valign="middle" align="center" class="p9" height="23" width="34%">
<div align="left"><span class="p9"><span class="p9"><span class="p9"> </span>2、<span class="p9"><a href="Chap8-5-5-2.htm">ASProtect
v0.94b保护</a></span></span></span></div>
</td>
<td valign="middle" align="center" class="p9" height="23" width="33%">
<div align="left"><span class="p9"><span class="p9"> 3、<a href="Chap8-5-5-3.htm"><span class="p9"><span class="p9">ASProtect
v0.9x</span></span></a></span></span></div>
</td>
</tr>
<tr>
<td width="33%" valign="middle" align="center" class="p9" height="23">
<div align="left"><span class="p9"><span class="p9"> </span></span>4、ASProtect
1.1x </div>
</td>
<td valign="middle" align="center" class="p9" height="23" width="34%">
<div align="left"><span class="p9"><span class="p9"><span class="p9"> </span>5、ASProtect
1.2x </span></span></div>
</td>
<td valign="middle" align="center" class="p9" height="23" width="33%">
<div align="left"><span class="p9"><span class="p9"> 6、</span>ASProtect
1.3x </span></div>
</td>
</tr>
</table>
<p align="center"><b>2、ASProtect v0.94b保护</b></p>
<p><span class="p9">英文原作:r!sc 《Almost Manual Unpacking (using Softice and Icedump)》<br>
原作日期:6th febuary 2000<br>
教程翻译: 看雪<br>
翻译日期:2000年5月26日<br>
声 明: 本文以r!sc的教程为基础,以自己的观点补充调整。</span></p>
<p><span class="p9">目标程序:aspack.exe . 231,424 . v 2.001 <br>
程序下载:<a href="Exercise/chap8-5-5-2.zip">AsPack</a><br>
使用工具:Softice 4.05; ProcDump 1.6.2 Final; FrogsICE v0.43;Icedump 6.016</span></p>
<p></p>
<p><span class="p9">part1 . 理论知识</span></p>
<p><span class="p9">part2 . 分析原文件的PE头 </span></p>
<p><span class="p9">part3 . 抓取import table</span></p>
<p><span class="p9">part4 . Dump整个程序并修正文件头</span></p>
<p><span class="p9"><br>
=part1===part1===part1===part1===part1===part1===part1===part1===part1===part1=<br>
<b>理论知识</b><br>
<br>
这种被压缩或加密的PE文件,执行时,在内存中将会完全解压。其中import表在装载中也会被完全解压或解密(—攻击点)。其中抓取import表就很关键了,其具体位置,可用
Procdump分析文件头得到。然后,要跟踪程序完全解压后的跳到程序处的入口点,然后在内存里dump取程序的整个部分。将刚dump取的正确import表用十六进制工具粘贴到完全dump的程序,再
修正文件头,这样程序就可正常运行。</span></p>
<p><span class="p9"><br>
=part2===part2===part2===part2===part2===part2===part2===part2===part2===part2=<br>
<b>分析原文件的PE头</b></span></p>
<p><span class="p9">运行 Procdump,点击pe-editor按钮,选中ASPack.exe文件,我们想要得到程序解压后的尺寸,import表的地址和大小...幸运的是这个文件的每个块(section
)都存在。</span></p>
<p><span class="p9">Size of image : 00079000 ; 这个PE文件执行时分配的内存空间。<br>
Image Base : 00400000 ; 基址</span></p>
<p><span class="p9">.idata ;.idata包含其他外来DLL的函数及数据信息<br>
Virtual Size : 00002000 ; idata在内存的尺寸<br>
Virtual Offset : 00046000 ; idata的地址(+imagebase == 00446000)</span></p>
<p><span class="p9">.rdata<br>
Virtual Size : 00001000<br>
Virtual Offset : 00049000</span></p>
<p><span class="p9">import表有可能在idata块或rdata块,到底在哪部分?看看它们的尺寸,我将马压在.idata ...</span></p>
<p><span class="p9"><br>
=part3===part3===part3===part3===part3===part3===part3===part3===part3===part3=<br>
<b>抓取import table</b></span></p>
<p><span class="p9">1、先装载Icedump<br>
在这用Icedump 6.016版本,其命令操作形式完全和以前的版本不同。先在Icedump目录里运行相应SOFTICE版本的icedump.exe(我用的SOFTICE是4.05版,因此在win9x/405目录下运行icedump.exe),如Icedump装载成功,Icedump会返回如下信息:</span></p>
<table width="80%" cellspacing="0" align="center" bgcolor="#000000">
<tr>
<td><span class="p9"><font color="#FFFFFF">icedump v6.0.1.6 for winice v4.05
loader<br>
icedum<span class="p9">p unloaded<br>
icedump loaded <font color="#33FF33">←出现这句话表示Icedump装载成功</font><br>
</span><br>
<span class="p8">C:> </span></font></span></td>
</tr>
</table>
<p><span class="p9"> 2、再装载FrogsICE<br>
由于aspack能检测到SOFTICE的存在,因此装载Frogsice就可躲过。在我机子里:FrogsICE 1.00 Final和Icedump不能很好兼容工作,因此我将FrogsICE换成版本v0.43,hehe..它们配合的很好。双击FPloader.exe文件即可装载成功。<br>
OK,到此你的SOFTICE的功能己大大加强里。<br>
这时试试运行aspack,这时屏幕将蓝屏给你一菜单选项,告知aspack发现了SOFTICE,是否欺骗它,这时你按ESC按钮,程序即可正常运行。<br>
<br>
3、 记住我们的第一步是抓取import table,它在内存的446000到449000处,因此程序运行时注意这段内存代码的解压情况。<br>
由于SOFTICE不能LOAD aspack.exe,我们用:bpx loadlibrarya命令来拦断。<br>
<br>
loadlibrarya命令解释:如果import表没在内存中就使用LoadLibraryA API调用装入该模块,因此我们可以拦截此函数来观察import表。<br>
</span></p>
<p><span class="p9">:bpx loadlibrarya 然后运行aspack将中断如下:<br>
Break due to BPX KERNEL32!LoadLibraryA<br>
:dd 446000 l 40 (下此命令观察内存446000到449000处的数据)<br>
</span></p>
<p><span class="p9">.<br>
-------SPACK!.idata--------------------dword----------ROT--?(0)--<br>
0030:00446000 ???????? ???????? ???????? ???????? ................ <br>
0030:00446010 ???????? ???????? ???????? ???????? ................ <br>
0030:00446020 ???????? ???????? ???????? ???????? ................ <br>
0030:00446030 ???????? ???????? ???????? ???????? ................ </span></p>
<p><span class="p9">上图是SOFTICE的数据窗口,显示<span class="p9"> ??...说明import表在内存中没解压。<br>
再按F5一下,程序将中断如下:(记着:在这例中只能要按一下F5,否则将不能抓取正确的<span class="p9">import表</span>)</span></span><span class="p9">
<br>
<br>
0030:00446000 00000000 00000000 00000000 0004669C .............f..<br>
0030:00446010 0004612C 00000000 00000000 00000000 ,a..............<br>
0030:00446020 000468B6 000461AC 00000000 00000000 .h...a..........<br>
0030:00446030 00000000 000468D0 000461B4 00000000 .....h...a......</span></p>
<p><span class="p9">这时446000处不是?? ?? ?? ??,意味着<span class="p9">import表</span>己被解压了。</span></p>
<p><span class="p9">.<span class="p9">import表</span>以一个IMAGE_IMPORT_DESCRIPTOR数组开始。
image_import_descriptors数据有5组dwords组成。<br>
</span><span class="p9"><br>
image_import_descriptors结构:<br>
①dd offset original_first_thunk <br>
②dd timedatestamp 时间及日期标志<br>
③dd forwardchain 正向链结索引<br>
④dd offset library name以NULL结尾的ASCII字符的RVA地址,该字符串包含输入的DLL名,<br>
比如"Kernel32.dll"或"USER32.DLL"。<br>
⑤dd offset first_thunk 该字段是在Image_thunk_data联合结构中的RVA偏移</span></p>
<p><span class="p9">其中timedatestamp和forwardchain通常设置为00000000, original first
⌨️ 快捷键说明
复制代码
Ctrl + C
搜索代码
Ctrl + F
全屏模式
F11
切换主题
Ctrl + Shift + D
显示快捷键
?
增大字号
Ctrl + =
减小字号
Ctrl + -