(一)Php_screw加密与破解工具(php-screw-brute)

# (一)Php screw加密与破解工具(php-screw-brute)

========

> 项目地址

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

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

下图是php文件经过php
screw加密后的一个样子,通过开头的”PM9SCREW”字符串得知使用了php
screw进行加密。![1.png](/static/qingy/(一)Php_screw加密与破解工具(php-screw-brute)/img/rId21.png)

### 使用方法

下图是使用方法,解密成功后,会在相同目录下生成以”.plain”为后缀的同名文件。比如待解密的文件是”index.php”,则解密成功后生成”index.php.plain”文件。![2.png](/static/qingy/(一)Php_screw加密与破解工具(php-screw-brute)/img/rId23.png)

> 写了一个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()

参考链接
——–

> https://www.cnblogs.com/StudyCat/p/11268399.html

© 版权声明
THE END
喜欢就支持一下吧
点赞0 分享
评论 抢沙发

请登录后发表评论

    请登录后查看评论内容