<?xml version="1.0" encoding="UTF-8"?>
<rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	>

<channel>
	<title>火星信息安全研究院PEncrypt</title>
	<atom:link href="http://www.h4ck.org.cn/tag/pencrypt/feed/" rel="self" type="application/rss+xml" />
	<link>http://www.h4ck.org.cn</link>
	<description>Hack-Crack  信息安全 【Institute Of Information Serurity From Mars】</description>
	<lastBuildDate>Sat, 04 Feb 2012 13:59:16 +0000</lastBuildDate>
	<language>en</language>
	<sy:updatePeriod>hourly</sy:updatePeriod>
	<sy:updateFrequency>1</sy:updateFrequency>
	<generator>http://wordpress.org/?v=</generator>
		<item>
		<title>PEncrypt 4.0 Gamma / 4.0 Phi -&gt; junkcode脱壳手记 [转载]</title>
		<link>http://www.h4ck.org.cn/2009/08/pencrypt-4-0-gamma-4-0-phi-junkcode-unpacker/</link>
		<comments>http://www.h4ck.org.cn/2009/08/pencrypt-4-0-gamma-4-0-phi-junkcode-unpacker/#comments</comments>
		<pubDate>Wed, 19 Aug 2009 10:29:57 +0000</pubDate>
		<dc:creator>obaby</dc:creator>
				<category><![CDATA[脱壳『Unpack』]]></category>
		<category><![CDATA[PEncrypt]]></category>

		<guid isPermaLink="false">http://www.h4ck.org.cn/?p=76</guid>
		<description><![CDATA[今天要脱的是PEncrypt 4.0加的壳，是一个记事本程序，这个记事本程序比较奇怪，令我的修复出现了一点点小的波折。 加壳的记事本程序下载地址： [点击浏览该文件:PEncrypt V4.0.rar] 首先PEID查壳，显示：PEncrypt 4.0 Gamma / 4.0 Phi -&#62; junkcode [Overlay]，有附加数据。然后用ollydbg载入，设置“调试选项”，在“异常”中，把所所有的勾都去掉，不要忽略异常。然后按shift+F9忽略异常运行，应该是按3次，这个记事本就运行了。 记事本运行后，重新载入。按shift+F9两次，程序会停在0040CCD2处。 1 2 3 4 5 6 7 8 0040CCD0 9D popfd 0040CCD1 90 nop 0040CCD2 4B dec ebx 0040CCD3 6F outs dx, dword ptr es:&#91;edi&#93; 0040CCD4 6368 69 arpl word ptr &#91;eax+69&#93;, bp 0040CCD7 8B4424 04 mov eax, dword ptr [...]]]></description>
			<content:encoded><![CDATA[<p>今天要脱的是PEncrypt 4.0加的壳，是一个记事本程序，这个记事本程序比较奇怪，令我的修复出现了一点点小的波折。</p>
<p>加壳的记事本程序下载地址：<a href="http://www.lilu.name/UpFiles/Article/admin/UpFiles/200905/16/PEncrypt"> [点击浏览该文件:PEncrypt V4.0.rar]</a></p>
<p>首先PEID查壳，显示：PEncrypt 4.0 Gamma / 4.0 Phi -&gt; junkcode [Overlay]，有附加数据。然后用ollydbg载入，设置“调试选项”，在“异常”中，把所所有的勾都去掉，不要忽略异常。然后按shift+F9忽略异常运行，应该是按3次，这个记事本就运行了。<br />
<span id="more-76"></span><br />
记事本运行后，重新载入。按shift+F9两次，程序会停在0040CCD2处。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">0040CCD0</span>    9D              <span style="color: #00007f; font-weight: bold;">popfd</span>
<span style="color: #adadad; font-style: italic;">0040CCD1</span>    <span style="color: #0000ff;">90</span>              <span style="color: #00007f; font-weight: bold;">nop</span>
<span style="color: #adadad; font-style: italic;">0040CCD2</span>    4B              <span style="color: #00007f; font-weight: bold;">dec</span>     <span style="color: #00007f;">ebx</span>
<span style="color: #adadad; font-style: italic;">0040CCD3</span>    <span style="color: #0000ff;">6F</span>              <span style="color: #00007f; font-weight: bold;">outs</span>    <span style="color: #00007f;">dx</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #00007f;">es</span><span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">edi</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #adadad; font-style: italic;">0040CCD4</span>    <span style="color: #0000ff;">6368</span> <span style="color: #0000ff;">69</span>         <span style="color: #00007f; font-weight: bold;">arpl</span>    <span style="color: #000000; font-weight: bold;">word</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">eax</span><span style="color: #339933;">+</span><span style="color: #0000ff;">69</span><span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #00007f;">bp</span>
<span style="color: #adadad; font-style: italic;">0040CCD7</span>    8B4424 <span style="color: #0000ff;">04</span>       <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">esp</span><span style="color: #339933;">+</span><span style="color: #0000ff;">4</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #adadad; font-style: italic;">0040CCDB</span>    8B00            <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">eax</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #adadad; font-style: italic;">0040CCDD</span>    3D <span style="color: #0000ff;">04000080</span>     <span style="color: #00007f; font-weight: bold;">cmp</span>     <span style="color: #00007f;">eax</span><span style="color: #339933;">,</span> <span style="color: #0000ff;">80000004</span></pre></td></tr></table></div>

<p>查看堆栈：</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
</pre></td><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">0012FFBC</span>   0012FFE0  指向下一个 SEH 记录的指针
<span style="color: #adadad; font-style: italic;">0012FFC0</span>   0040CCD7  SE处理程序
<span style="color: #adadad; font-style: italic;">0012FFC4</span>   7C817077  返回到 kernel32<span style="color: #339933;">.</span>7C817077
<span style="color: #adadad; font-style: italic;">0012FFC8</span>   7C809C98  kernel32<span style="color: #339933;">.</span>MultiByteToWideChar</pre></td></tr></table></div>

<p>可以看到“SE处理程序”的值为“0040CCD7“，那么在反汇编代码窗口中按CTRL+G，输入0040CCD7，来到此行代码并按F2下断点。其实也不用按CTRL+G，这行代码就在下面，直接就看到了。</p>
<p>下完断点后，按shift+F9运行，程序中断，然后取消断点，一直向下单步跟踪。最终来到0040CD2D这行代码，这是一个大跳转，直接跳到OEP。最后单步跟踪一步，就来到OEP了。然后dump脱壳即可。</p>

<div class="wp_syntax"><table><tr><td class="line_numbers"><pre>1
2
3
4
5
6
7
8
</pre></td><td class="code"><pre class="asm" style="font-family:monospace;"><span style="color: #adadad; font-style: italic;">0040CD23</span>    AB              <span style="color: #00007f; font-weight: bold;">stos</span>    <span style="color: #000000; font-weight: bold;">dword</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #00007f;">es</span><span style="color: #339933;">:</span><span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">edi</span><span style="color: #009900; font-weight: bold;">&#93;</span>
<span style="color: #adadad; font-style: italic;">0040CD24</span>  ^ E2 FA           <span style="color: #00007f; font-weight: bold;">loopd</span>   <span style="color: #000000; font-weight: bold;">short</span> 0040CD20
<span style="color: #adadad; font-style: italic;">0040CD26</span>    9D              <span style="color: #00007f; font-weight: bold;">popfd</span>
<span style="color: #adadad; font-style: italic;">0040CD27</span>    <span style="color: #0000ff;">61</span>              <span style="color: #00007f; font-weight: bold;">popad</span>
<span style="color: #adadad; font-style: italic;">0040CD28</span>    BD CC104000     <span style="color: #00007f; font-weight: bold;">mov</span>     <span style="color: #00007f;">ebp</span><span style="color: #339933;">,</span> 004010CC
<span style="color: #adadad; font-style: italic;">0040CD2D</span>  <span style="color: #339933;">-</span> FFE5            <span style="color: #00007f; font-weight: bold;">jmp</span>     <span style="color: #00007f;">ebp</span>                              <span style="color: #666666; font-style: italic;">; PEncrypt.004010CC</span>
<span style="color: #adadad; font-style: italic;">0040CD2F</span>    <span style="color: #0000ff;">0000</span>            <span style="color: #00007f; font-weight: bold;">add</span>     <span style="color: #000000; font-weight: bold;">byte</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">eax</span><span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #00007f;">al</span>
<span style="color: #adadad; font-style: italic;">0040CD31</span>    <span style="color: #0000ff;">0000</span>            <span style="color: #00007f; font-weight: bold;">add</span>     <span style="color: #000000; font-weight: bold;">byte</span> <span style="color: #000000; font-weight: bold;">ptr</span> <span style="color: #009900; font-weight: bold;">&#91;</span><span style="color: #00007f;">eax</span><span style="color: #009900; font-weight: bold;">&#93;</span><span style="color: #339933;">,</span> <span style="color: #00007f;">al</span></pre></td></tr></table></div>

<p>修复的问题。</p>
<p>脱壳后程序不能运行，提示“无法找到组件”的错误，而不能正常运行。</p>
<p>使用ImpRec工具修复后，仍然不能正常运行。比较郁闷，用lordPE重建也不能正常运行。</p>
<p>后来想起来了加壳的程序好像有附加数据，于是用Hex workshop打开文件，通过PEID可知，最后一个区段的偏移是C000，大小为1522，那么附加数据就是从D522开始。可用Hex workshop打开后，文件到D522就结束了，所以根本就没有附加数据，所以这个文件映像大小是有误的。</p>
<p>然后打开脱壳后dump出来的问，最后一个区段的起始位置是D000，大小是C00。而来到D000时，很明显这里不是一个区段的起始位置，如下图所示。所以这个文件的区段位置不对，需要修复。</p>
<p><img class="alignnone" title="unpan" src="http://www.lilu.name/UpFiles/Article/admin/200905/2009050617142973347.jpg" alt="" width="607" height="368" /><br />
打开lordPE，刚开始用LordPE修复没有成功，是因为在修复选项中，我只选择了“使PE有效”，现在选中“重新排列文件”，排列方式选“标准”即可。保存选项后，再用LordPE修复，这样修复后的文件就有效了，也能正常运行了。</p>
<p>所以dump脱壳后，根本不需要使用ImpRec来修复IAT，只需要用LordPE重排区段的位置即可。<br />
<h3>相关文章</h3>
<ul class="related_posts">
<li>没有找到.</li>
</ul>
]]></content:encoded>
			<wfw:commentRss>http://www.h4ck.org.cn/2009/08/pencrypt-4-0-gamma-4-0-phi-junkcode-unpacker/feed/</wfw:commentRss>
		<slash:comments>0</slash:comments>
		</item>
	</channel>
</rss>

