<?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>hook &#8211; ChaBug安全</title>
	<atom:link href="/tags/hook/feed" rel="self" type="application/rss+xml" />
	<link>/</link>
	<description>一个分享知识、结识伙伴、资源共享的博客</description>
	<lastBuildDate>Sat, 15 Feb 2020 17:12:00 +0000</lastBuildDate>
	<language>zh-CN</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=5.5.5</generator>
	<item>
		<title>通过hook eval解密混淆的PHP文件</title>
		<link>/web/1202.html</link>
		
		<dc:creator><![CDATA[Y4er]]></dc:creator>
		<pubDate>Sat, 15 Feb 2020 17:12:00 +0000</pubDate>
				<category><![CDATA[渗透测试]]></category>
		<category><![CDATA[hook]]></category>
		<category><![CDATA[PHP]]></category>
		<category><![CDATA[shell]]></category>
		<category><![CDATA[二进制]]></category>
		<category><![CDATA[加密]]></category>
		<category><![CDATA[大马]]></category>
		<category><![CDATA[混淆]]></category>
		<guid isPermaLink="false">/?p=1202</guid>

					<description><![CDATA[扒开加密shell的底裤。 想找一款好用的大马，还得分析分析有没有后门，但很多大马都是加密的，于是想试试能不能解密这些鬼代码，遂有此文。 PHP混淆原理 一般来讲，混淆分为两种 1...]]></description>
										<content:encoded><![CDATA[<p>扒开<span class="wpcom_tag_link"><a href="/tags/%e5%8a%a0%e5%af%86" title="加密" target="_blank">加密</a></span><span class="wpcom_tag_link"><a href="/tags/shell" title="shell" target="_blank">shell</a></span>的底裤。</p>
<p><span id="more-1202"></span></p>
<p>想找一款好用的<span class="wpcom_tag_link"><a href="/tags/%e5%a4%a7%e9%a9%ac" title="大马" target="_blank">大马</a></span>，还得分析分析有没有后门，但很多大马都是加密的，于是想试试能不能解密这些鬼代码，遂有此文。</p>
<h2><span class="wpcom_tag_link"><a href="/tags/php" title="PHP" target="_blank">PHP</a></span><span class="wpcom_tag_link"><a href="/tags/%e6%b7%b7%e6%b7%86" title="混淆" target="_blank">混淆</a></span>原理</h2>
<p>一般来讲，混淆分为两种<br />
1. 利用拓展进行加密<br />
2. 不需要拓展，单文件加密</p>
<p>本文主要针对第二种，而单文件加密的一般都是对源码进行字符串操作，比如对字符串移位、拼接，或者重新定义变量，重新赋值数组，总之就是尽可能减少程序可读性。但是所有加密过的代码都会经过多次eval来重新还原为php代码执行，所以我们可以<span class="wpcom_tag_link"><a href="/tags/hook" title="hook" target="_blank">hook</a></span> PHP中的eval函数来输出经过eval函数的参数，参数就是源码。</p>
<h2>hook eval</h2>
<p>PHP中的eval函数在Zend里需要调用zend_compile_string函数，我们写一个拓展直接hook这个函数就行了。不过我不会写c代码，所以参考网上的文章，在GitHub中找到了现成的一个拓展库。</p>
<p>https://github.com/bizonix/evalhook 需要编译，不过我在文末提供了编译好的so文件。</p>
<p>修改 evalhook.c 中这部分代码，否则只能在命令行中使用。</p>
<p><img src="https://y4er.com/img/uploads/20200202214739.png" alt="image" /></p>
<pre><code class="language-c ">static zend_op_array *evalhook_compile_string(zval *source_string, char *filename TSRMLS_DC)
{
        int c, len, yes;
        char *copy;

        /* Ignore non string eval() */
        if (Z_TYPE_P(source_string) != IS_STRING) {
                return orig_compile_string(source_string, filename TSRMLS_CC);
        }

        len  = Z_STRLEN_P(source_string);
        copy = estrndup(Z_STRVAL_P(source_string), len);
        if (len &gt; strlen(copy)) {
                for (c=0; c&lt;len; c++) if (copy[c] == 0) copy[c] == '?';
        }
        php_printf("n--------- Decrypt start ------------n");
        php_printf(copy);
        php_printf("n--------- Decrypt done ------------n");
        return orig_compile_string(source_string, filename TSRMLS_CC);

}
</code></pre>
<p>centos php5.6+apache 然后运行</p>
<pre><code class="">yum install http://rpms.remirepo.net/enterprise/remi-release-7.rpm
yum install --enablerepo=remi --enablerepo=remi-php56 php-devel
phpize &amp;&amp; ./configure &amp;&amp; make
</code></pre>
<p>将 evalhook/modules/evalhook.so 拷贝到 php 的拓展目录下，并且向php.ini中添加</p>
<pre><code class="">extension=evalhook.so
</code></pre>
<p>重新启动apache之后，可以通过web访问php文件，会直接打印出源码。</p>
<p>拿一个大马举例，没加拓展之前访问。</p>
<p><img src="/wp-content/uploads/2020/02/20200202217147.png" alt="image" /></p>
<p>加了拓展之后</p>
<p><img src="/wp-content/uploads/2020/02/20200202211173.png" alt="image" /></p>
<h2>参考链接</h2>
<p><a class="wp-editor-md-post-content-link" href="http://weaponx.site/2018/04/27/%E8%A7%A3%E5%AF%86%E6%B7%B7%E6%B7%86%E7%9A%84PHP%E7%A8%8B%E5%BA%8F/">解密混淆的PHP程序</a><br />
http://blog.evalbug.com/2017/09/21/phpdecode_01/<br />
https://www.leavesongs.com/PENETRATION/unobfuscated-phpjiami.html<br />
https://github.com/bizonix/evalhook<br />
<a class="wp-editor-md-post-content-link" href="https://gitee.com/Y4er/static/raw/master/hook.so">放一个我基于PHP 5.6.40编译好的so文件</a></p>
<p><strong>文笔垃圾，措辞轻浮，内容浅显，操作生疏。不足之处欢迎大师傅们指点和纠正，感激不尽。</strong></p>
]]></content:encoded>
					
		
		
			</item>
	</channel>
</rss>
