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
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
解码应该不会太难
第二处eval是判断终止代码执行的;
让我费解的是这个源码好像有验证,一修改后就代码就无法运行。
最后的return前的这段代码解码后就有eval:$Èñœ¸Ó°Ö’á‹($ˆÁ—«–ú($$ž³°Îñ騒ùÁ));
可惜echo出来的是空的,我怀疑就是文件修改后偏移被改变了
preg_reolace 如果带有 e 修饰的话,同样会当 eval 运行的
而 create_function 更具有隐蔽性,因为他可以用字符串拼接成函数体
$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