一、破解工具之php-screw-brute

1、项目地址

  https://github.com/securifybv/php-screw-brute

2、项目介绍

  此脚本可以恢复/爆破php screw使用的密钥。PHP Screw使用压缩文件的长度来确定(硬编码)密钥的起始索引。PHP Screw的工作原理是首先使用ZLIB(级别1)压缩PHP文件,然后按位取反,再与密钥进行异或。 因为ZLIB具有固定的头部并且不同文件的起始索引不同,所以可以恢复密钥的一部分, 其余字节可以爆破。 通常,你拥有的文件越多,恢复密钥的速度就越快。 当然,所有文件都必须使用相同的PHP Screw密钥进行加密。 如果你拥有的文件足够多,则可直接恢复密钥而不需要爆破。

  下图1是php文件经过php screw加密后的一个样子,通过开头的“PM9SCREW”字符串得知使用了php screw进行加密。

图1

3、使用

  下图2是使用方法,解密成功后,会在相同目录下生成以“.plain”为后缀的同名文件。比如待解密的文件是“index.php”,则解密成功后生成“index.php.plain”文件。

图2

  写了一个python脚本,用于筛选解密成功的php文件。

#!/usr/bin/python
# -*- coding: UTF-8 -*- import os
import shutil def main():
src = '/root/Download/demo'
dst = src + '_backup'
shutil.copytree(src,dst) #备份 for root,dirs,files in os.walk(src):
for name in files:
basename, ext = os.path.splitext(name)
oldname = os.path.join(root,name)
newname = os.path.join(root,basename)
if ext == '.php':
os.remove(oldname) #删除原来的加密的PHP文件
if ext == '.plain':
os.rename(oldname,newname) #重命名解密成功的文件 filename.php.plain => filename.php print('Good job') if __name__ == '__main__':
main()

二、破解工具之screw_decode

1、项目地址

  https://github.com/firebroo/screw_decode

2、项目介绍

  前提需要有加密之后的文件,和加密的扩展库php_screw.so 打开screwdecode.c找到PM9SCREW,PM9SCREW_LEN和pm9screw_mycryptkey,3个可能被使用者修改,需要用IDA去查找然后替换掉。 pm9screw_mycryptkey是至关重要的,拿不到就解密不了。别的两个可以暴力尝试解决,其实就是读取掉头部n个字节尝试解密。

3、安装和使用

安装:

git clone https://github.com/firebroo/screw_decode.git

make

如果以上出错,就看报错然后google,一个是依赖php-devel,一个是依赖zlibc-devel

使用:

sudo ./decode path

说明: 结果保存在同目录,文件名字为原文件名字后面追加.decode, sudo 权限保证可以有chdir和创建文件权限。

三、IDA获取加密的key

1、通过导图查找

  首先找到php_screw.so文件,然后通过IDA分析(幸好之前跟基友要了份IDA)。加密过程是在pm9screw_ext_fopen函数中实现的,所以只需要到这个函数中去找加密部分即可。

图3

找到pm9screw_ext_fopen函数,双击,如图4所示:

图4

然后右边的窗口就会如图5所示:

图5

很明显,我标黄的就是加密密钥了,双击跳转至其指针保存处:

图6

再次双击,跟踪变量,见下图7,打码处就是密钥了。

图7

如下图8,右键,将十六进制的密钥转成十进制的,然后打开screwdecode.c,见下图9,将密钥替换掉,即可使用screw_decode解密。

图8

图9

2、通过伪代码查找

再找到目标函数之后,使用F5,查看伪代码,双击黄标也可以跳转到之前找到的位置。

图10

四、php-screw加密文件

1、项目地址

  https://sourceforge.net/projects/php-screw/  或者

  https://github.com/Luavis/php-screw

2、使用

(1)我是在kali-rolling上测试的,提示没有phpize这个命令。

apt-get install php-dev

(2)然后解压

tar –zxvf php_screw-1.5.tar.gz

图9

(3) 编译PHP扩展的工具,主要是根据系统信息生成对应的configure文件

Phpize

./configure

图10

图11

(4)编辑my_screw.h修改pm9screw_mycryptkey密钥的值

如图12是默认值。

图12

(5)此外我们可以编辑php_screw.h修改PM9SCREW 和 PM9SCREW_LEN的值,注意PM9SCREW_LEN的值要小于等于PM9SCREW的长度。如图13是其默认值。

图13

(5)进行编译

如图14编译时出错了,在php_screw的目录下以下命令执行即可解决,最后编译成功。

sed -i "s/CG(extended_info) = 1;/CG(compiler_options) |= ZEND_COMPILE_EXTENDED_INFO;/g" php_screw.c

图14

(6)将编译好的php_screw.so拷贝到php扩展库目录。

通过phpinfo()页面查找extension-dir关键字

图16

将编译好的php_screw.so拷贝到php扩展目录。

cp modules/php_screw.so /usr/lib/php/20151012/php_screw.so

(7)编辑php.ini添加以下一行代码

extension=php_screw.so

(8)重启http服务器

Service apache2 restart

(9)编译加密工具

cd tools

make

编译完成后生成screw可执行文件。

图17

(10)尝试加密一个php文件

我们写一个phpinfo.php文件内容是<?php phpinfo();?>

然后执行./screw phpinfo.php加密文件,见下图18。

图18

(11)将加密好的文件拷贝到web目录

cp phpinfo.php /var/www/html/phpinfo.php

图19

(12)批量加密php文件

find /data/php/source -name “*.php” -print|xargs -n1 screw //加密所有的.php文件

五、参考:

php_screw的加密和解密探究(二)解密算法与Python实现:

https://www.skactor.tk/2018/03/26/php-screw%E7%9A%84%E5%8A%A0%E5%AF%86%E5%92%8C%E8%A7%A3%E5%AF%86%E6%8E%A2%E7%A9%B6%EF%BC%88%E4%BA%8C%EF%BC%89%E8%A7%A3%E5%AF%86%E7%AE%97%E6%B3%95%E4%B8%8Epython%E5%AE%9E%E7%8E%B0/

php_screw的加密和解密探究(一)编译Screw扩展并测试:

https://www.skactor.tk/2018/03/25/php_screw%E7%9A%84%E5%8A%A0%E5%AF%86%E5%92%8C%E8%A7%A3%E5%AF%86%E6%8E%A2%E7%A9%B6%EF%BC%88%E4%B8%80%EF%BC%89%E7%BC%96%E8%AF%91Screw%E6%89%A9%E5%B1%95%E5%B9%B6%E6%B5%8B%E8%AF%95/

用 phpize 编译共享 PECL 扩展库:

https://www.php.net/manual/zh/install.pecl.phpize.php

转载请注明出处。

php screw加密与破解的更多相关文章

  1. 老王教您怎么做cass7.1 8.0 9.1所有系列的复制狗 加密狗 破解狗

    cass7.1 8.0 9.1所有系列的复制狗 加密狗 破解狗本来是出于好奇看到网上有这样的东西,学了下感觉挺简单的,如果你是cass的初学者想仅仅是想学习这个软件,不想花大价格购买正版的,这个是可以 ...

  2. “不给力啊,老湿!”:RSA加密与破解

    作者:Vamei 出处:http://www.cnblogs.com/vamei 欢迎转载,也请保留这段声明.谢谢! 加密和解密是自古就有技术了.经常看到侦探电影的桥段,勇敢又机智的主角,拿着一长串毫 ...

  3. Flash 加密和破解

    关于Flash(swf),我们需要明确一点: ***Flash字节码的意义都是公开的 所以如果cracker真的有足够的耐心他最终还是可以破解掉你的Flash.我们能做的只是尽量提高Flash被破解的 ...

  4. 记一次ctf比赛解密题的解决(可逆加密基本破解之暴力破解)

    题目是这个样子的: code.txt的内容是这样: 有点吓人木?233333 其实解密之后是这样的: 找到一点安慰没? 好了,废话不多说.讲解一下思路吧. 我们知道base64加密是属于可逆加密的.简 ...

  5. [原创]aaencode等类似js加密方案破解方法

    受http://tieba.baidu.com/p/4104806767 2L启发,不过他说的方法,我没有尝试成功,自己摸索出了一个新方法,在这里分享下. 首先拿aaencode官网的加密字符串作为例 ...

  6. Python爬虫反反爬:CSS反爬加密彻底破解!

    刚开始搞爬虫的时候听到有人说爬虫是一场攻坚战,听的时候也没感觉到特别,但是经过了一段时间的练习之后,深以为然,每个网站不一样,每次爬取都是重新开始,所以,爬之前谁都不敢说会有什么结果. 前两天,应几个 ...

  7. Ecstore会员密码加密方式破解

    <?php //以下是加密方式,亲测有效 $string_md5 = md5(md5("密码")."用户名"."注册时间");//三个 ...

  8. swoole加密可破解吗

    程序的执行和加解密过程合二唯一,无论是内部开发人员和外部黑客攻击,即使拿到了数据和私钥和服务器的root权限,也无法解密还原数据. Swoole将加解密分成了3部分(程序+算法+私钥),缺一不可解密. ...

  9. 京东js加密 nloginpwd 破解

    京东登录,有一个参数nloginpwd,是加密字段. 第一步:浏览器抓包 第二部:搜索加密字段 js 代码 第三部: 下断点 2. js代码: var navigator = {}; var wind ...

随机推荐

  1. C# ado.net DataSet使用(五)

    一.填充dataset class Program { private static string constr = "server=.;database=northwnd;integrat ...

  2. 题解 【NOIP2006】作业调度方案

    [NOIP2006]作业调度方案 Description 我们现在要利用 m 台机器加工 n 个工件,每个工件都有 m 道工序,每道工序都在不同的指定的机器上完成.每个工件的每道工序都有指定的加工时间 ...

  3. Python数据类型知识点

    1.字符串 字符串常用功能 name = 'derek' print(name.capitalize()) #首字母大写 Derek print(name.count("e")) ...

  4. parents([expr]) 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素)。可以通过一个可选的表达式进行筛选。

    parents([expr]) 概述 取得一个包含着所有匹配元素的祖先元素的元素集合(不包含根元素).可以通过一个可选的表达式进行筛选.大理石平台检定规程   参数 exprStringV1.0 用于 ...

  5. nextUntil([exp|ele][,fil]) 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止。

    nextUntil([exp|ele][,fil]) 概述 查找当前元素之后所有的同辈元素,直到遇到匹配的那个元素为止. 如果提供的jQuery代表了一组DOM元素,.nextUntil()方法也能让 ...

  6. Python基础之集合set

    集合是无序的,不重复的数据集合,它里面的元素是可哈希的(不可变类型), 但是集合本身是不可哈希的(所以集合做不了字典的键)的. 以下是集合最重要的两点: (1)去重,把一个列表变成集合,就自动去重了. ...

  7. PySpider的安装

    使用 Pip 安装,命令如下 pip install pyspider 命令执行完毕即可安装成功. 常见错误: Windows 下可能会出现这样的错误提示:Command "python s ...

  8. moveUp()

    这个函数内容有点多,想讲一下大概思路: 向上移有两种情况1.前面为空白 这种情况有两个步骤 (1)将人当前的位置设置为空白(0), (2)再讲人前面的位置设置为人(2)2.前面为箱子 当前面为箱子时有 ...

  9. Flume-Replicating Channel Selector 单数据源多出口

    使用 Flume-1 监控文件变动,Flume-1 使用 Replicating Channel Selector 将变动内容传递给 Flume-2,Flume-2 负责存储到 HDFS.同时 Flu ...

  10. Flutter移动电商实战 --(9)移动商城数据请求实战

    1.URL接口管理文件建立 第一步需要在建立一个URL的管理文件,因为课程的接口会一直进行变化,所以单独拿出来会非常方便变化接口.当然工作中的URL管理也是需要这样配置的,以为我们会不断的切换好几个服 ...