最近研究的混淆加密差点搞的脑子废掉了,特向大牛求助思路

k64342302 2016-11-10 05:38:55
phpjiami和威盾都研究过,也都能还原

可是研究这个混淆加密算法一个星期,除了能还原里边的函数名之外,就是找不到程序加密的入口,用到的函数

file_get_contents
substr
unpack
gzuncompress
create_function
strpos
addslashes
str_rot13
md5
set_include_path
dirname
preg_replace
base64_encode
constant
assert_options
assert
chr
rand

我的研究结果



感觉最后一个return前四行是重点,可惜看不懂
为了学习,特意用phpinfo做了个demo来研究,我想学习思路,不要做伸手党,请大牛指教

http://pan.baidu.com/s/1eRW7jWY
...全文
377 7 打赏 收藏 转发到动态 举报
写回复
用AI写文章
7 条回复
切换为时间正序
请发表友善的回复…
发表回复
xuzuning 2016-11-12
  • 打赏
  • 举报
回复
比如自解码后期
$a = [0,'p','n','f','i','p','h','o'];
$p = 'preg_replace_callback';
$c = 'create_function';
$u = 'uksort';
$u($a, $c('$a, $b', 'return ($a%5)-($b%3);'));
$a = join('', $a);
$a = $p('/[a-z]+/', $c('$m', '$m[0]();'), $a);
没有 eval 你就没了直接的切入点 变量覆盖自己,你就没法从最后结果反推回去 如果你正向跟踪,极易因可读性极差而忽视了某个细节 他那个代码中有 if(!defined('nynpdgbs')){define('nynpdgbs',__FILE__); 而你也已经分析出有 file_get_contents 两者配合,自然是读取文件自己的。如果你修改了文件本身,那么 substr 就可能读取不到需要的内容,而解码失败
k64342302 2016-11-12
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
比如自解码后期
$a = [0,'p','n','f','i','p','h','o'];
$p = 'preg_replace_callback';
$c = 'create_function';
$u = 'uksort';
$u($a, $c('$a, $b', 'return ($a%5)-($b%3);'));
$a = join('', $a);
$a = $p('/[a-z]+/', $c('$m', '$m[0]();'), $a);

没有 eval 你就没了直接的切入点
变量覆盖自己,你就没法从最后结果反推回去

如果你正向跟踪,极易因可读性极差而忽视了某个细节


他那个代码中有 if(!defined('nynpdgbs')){define('nynpdgbs',__FILE__);
而你也已经分析出有 file_get_contents
两者配合,自然是读取文件自己的。如果你修改了文件本身,那么 substr 就可能读取不到需要的内容,而解码失败

已成功解密
使用方法:代码第二个函数即为解密函数,include后直接运行

结果:

请大大指教。

现在遇到的问题是:该加密方式的商业版无法使用include或者require方法引入调试,我怀疑代码里应该有exit,
既然无法引用,还有什么办法调试吗?我试过不论修改文件任何位置,都解码失败。

VIP我没有办法做crackme,借用某源码的一个类文件参考
http://pan.baidu.com/s/1nvlmelN
k64342302 2016-11-12
  • 打赏
  • 举报
回复
引用 5 楼 xuzuning 的回复:
比如自解码后期
$a = [0,'p','n','f','i','p','h','o'];
$p = 'preg_replace_callback';
$c = 'create_function';
$u = 'uksort';
$u($a, $c('$a, $b', 'return ($a%5)-($b%3);'));
$a = join('', $a);
$a = $p('/[a-z]+/', $c('$m', '$m[0]();'), $a);
没有 eval 你就没了直接的切入点 变量覆盖自己,你就没法从最后结果反推回去 如果你正向跟踪,极易因可读性极差而忽视了某个细节 他那个代码中有 if(!defined('nynpdgbs')){define('nynpdgbs',__FILE__); 而你也已经分析出有 file_get_contents 两者配合,自然是读取文件自己的。如果你修改了文件本身,那么 substr 就可能读取不到需要的内容,而解码失败
豁然开朗,多谢大大
xuzuning 2016-11-11
  • 打赏
  • 举报
回复
你还需要注意到: preg_reolace 如果带有 e 修饰的话,同样会当 eval 运行的 而 create_function 更具有隐蔽性,因为他可以用字符串拼接成函数体
k64342302 2016-11-11
  • 打赏
  • 举报
回复
源码里2处eval 第一处eval("")不知道什么作用,感觉是干扰的语句; 第二处eval是判断终止代码执行的; 让我费解的是这个源码好像有验证,一修改后就代码就无法运行。 最后的return前的这段代码解码后就有eval:$Èñœ¸Ó°Ö’á‹($ˆÁ—«–ú($$ž³°Îñé¨’ùÁ)); 可惜echo出来的是空的,我怀疑就是文件修改后偏移被改变了
xuzuning 2016-11-11
  • 打赏
  • 举报
回复
偏移 1930 处有 eval 解码应该不会太难
k64342302 2016-11-11
  • 打赏
  • 举报
回复
大牛都去过双十一了吗?

20,359

社区成员

发帖
与我相关
我的任务
社区描述
“超文本预处理器”,是在服务器端执行的脚本语言,尤其适用于Web开发并可嵌入HTML中。PHP语法利用了C、Java和Perl,该语言的主要目标是允许web开发人员快速编写动态网页。
phpphpstorm 技术论坛(原bbs)
社区管理员
  • 开源资源社区
  • phpstory
  • xuzuning
加入社区
  • 近7日
  • 近30日
  • 至今
社区公告
暂无公告

试试用AI创作助手写篇文章吧