ICode9

精准搜索请尝试: 精确搜索
首页 > 编程语言> 文章详细

5天搞定PHP goto解密核心算法

2021-02-01 08:32:33  阅读:627  来源: 互联网

标签:搞定 加密 goto 代码 解密 这种 里面 PHP


背景

有个朋友做了一个跨境商城小程序, 让我给加几个功能, 一个是收集用户的身份认证信息,一个是商品编辑与跨境商品关联.
就这么两个小的功能, 其实是很简单的,就是前台一个表单,后台数据库存一下就好了.
但是实际比预想的麻烦, 因为他用的是微擎的框架, 结果核心代码全是经过了goto加密的,说到这了,就讲一下php的加密问题.
php这种语言作为一种脚本语言, 代码保护一直以来是个问题, 见过好几个版本的加密, 其中最复杂的算是php官方的zend加密吧.
其他的都是自己创造的. 没有发现几个好的.
比如下面这种:

eval加密示例

在这里插入图片描述
这种算是代码压缩后,eval加密,
这种解密非常简单, 就是把里面的代码base64解密,然后就出来了,没什么难度

goto加密示例
但是后来碰到了goto加密,结果就悲剧了,原理看起来挺简单,

在这里插入图片描述
这种虽然能用编译器,比如phpstorm进行格式化,看里面的代码结构,但是要是真想能看里面的代码逻辑,可就是不name容易了
最后我花了5天时间,研究了一下,写出了解密的核心算法

这个解密的理论支撑是算法基础里面的, 有序无环拓扑排序问题

其实实际上这个是有环的
这里面有几个技术点
1.unicode解密
里面\x73\x2e这种的全是unicode加密的,
2.goto干扰问题
例如: goto a; goto b; 这种的 后面的goto b就是干扰项
return $a; goto c; 后面这个goto c也是不可能走到的
exit $e; goto d; 这种后面也是不可能走到的
3.goto限制条件解析
像 foreach, switch,try 这种都是一个封闭的解析范围,里面的 goto都是独立的封闭空间
要提前单独解析
4.分支干扰
里面的goto条件作了一些干扰,进行了翻转
比如: if(a) 这种, 实际看到的if(!a),这种是非正常写法的,要进行翻转
5.for循环的检测, for循环也是转换成了goto
6.if分支的解析
if 有好多分支 ,if, else, elseif ,if直接跳出,这些
7.代码的提取技术
要提取label
要提取出 function
提取出 foreach ,foreach里面还有嵌套的
8.代码格式化问题
如何对代码进行格式化,这也是个复杂点, 要对代码了解的非常清楚
以上是一些要点, 经过完善已经全部实现
最终实现了, 上传文件立马返回解密后的文件,是标准化的,无语法错误, 容易阅读的,
中间优化过程经历了好多困难;这个东西看起来简单,实际上做完美还是不容易;
先写到这吧, 之后会吧一些技术难点详细的跟大家分享.

标签:搞定,加密,goto,代码,解密,这种,里面,PHP
来源: https://www.cnblogs.com/alexyu01/p/14355000.html

本站声明: 1. iCode9 技术分享网(下文简称本站)提供的所有内容,仅供技术学习、探讨和分享;
2. 关于本站的所有留言、评论、转载及引用,纯属内容发起人的个人观点,与本站观点和立场无关;
3. 关于本站的所有言论和文字,纯属内容发起人的个人观点,与本站观点和立场无关;
4. 本站文章均是网友提供,不完全保证技术分享内容的完整性、准确性、时效性、风险性和版权归属;如您发现该文章侵犯了您的权益,可联系我们第一时间进行删除;
5. 本站为非盈利性的个人网站,所有内容不会用来进行牟利,也不会利用任何形式的广告来间接获益,纯粹是为了广大技术爱好者提供技术内容和技术思想的分享性交流网站。

专注分享技术,共同学习,共同进步。侵权联系[81616952@qq.com]

Copyright (C)ICode9.com, All Rights Reserved.

ICode9版权所有