有个朋友做了一个跨境商城小程序, 让我给加几个功能, 一个是收集用户的身份认证信息,一个是商品编辑与跨境商品关联.
就这么两个小的功能, 其实是很简单的,就是前台一个表单,后台数据库存一下就好了.
但是实际比预想的麻烦, 因为他用的是微擎的框架, 结果核心代码全是经过了goto加密的,说到这了,就讲一下php的加密问题.
php这种语言作为一种脚本语言, 代码保护一直以来是个问题, 见过好几个版本的加密, 其中最复杂的算是php官方的zend加密吧.
其他的都是自己创造的. 没有发现几个好的.
比如下面这种:eval base64加密的
这种算是代码压缩后,eval加密,
这种解密非常简单, 就是把里面的代码base64解密,然后就出来了,没什么难度
这个解密的理论支撑是算法基础里面的, 有序无环拓扑排序问题其实实际上这个是有环的
这里面有几个技术点
1.unicode解密
里面x73x2e这种的全是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.代码格式化问题
如何对代码进行格式化,这也是个复杂点, 要对代码了解的非常清楚
以上是一些要点, 经过完善已经全部实现
最终实现了, 上传文件立马返回解密后的文件,是标准化的,无语法错误, 容易阅读的,
中间优化过程经历了好多困难;这个东西看起来简单,实际上做完美还是不容易;
先写到这吧, 之后会吧一些技术难点详细的跟大家分享.
标签:
本文链接:http://78moban.cn/post/8149.html
版权声明:站内所有文章皆来自网络转载,只供模板演示使用,并无任何其它意义!