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

解决方案 »

  1.   

    偏移 1930 处有 eval
    解码应该不会太难
      

  2.   

    源码里2处eval  第一处eval("")不知道什么作用,感觉是干扰的语句;
    第二处eval是判断终止代码执行的;
    让我费解的是这个源码好像有验证,一修改后就代码就无法运行。
    最后的return前的这段代码解码后就有eval:$Èñœ¸Ó°Ö’á‹($ˆÁ—«–ú($$ž³°Îñé¨’ùÁ));
    可惜echo出来的是空的,我怀疑就是文件修改后偏移被改变了
      

  3.   

    你还需要注意到:
    preg_reolace 如果带有 e 修饰的话,同样会当 eval 运行的
    而 create_function 更具有隐蔽性,因为他可以用字符串拼接成函数体
      

  4.   

    比如自解码后期$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 就可能读取不到需要的内容,而解码失败
      

  5.   

    已成功解密
    使用方法:代码第二个函数即为解密函数,include后直接运行结果:请大大指教。现在遇到的问题是:该加密方式的商业版无法使用include或者require方法引入调试,我怀疑代码里应该有exit,
    既然无法引用,还有什么办法调试吗?我试过不论修改文件任何位置,都解码失败。VIP我没有办法做crackme,借用某源码的一个类文件参考
    http://pan.baidu.com/s/1nvlmelN