Loading... # 声明 文章旨在逆向工程的学习与研究,本人支持正版,如果本文侵犯了您的权益,请联系站长予以删除。 # 引言 版本信息:1.64.05 前些年记得曾经尝试过分析它,但是最终卡在了data.bin字节大小限制,也就是自校验始终没有解决掉,今天下午比较无聊再次尝试。 # 自定义bin文件路径 因为bin文件校验如果失败,有些暗桩会删除自身,所以先搞个副本出来,让它走自己的bin(php)文件; 找到helper.function.php文件,其中$_SERVER['_afile'] = BASIC_PATH.base64_decode(strrev('=4Wai5SY0FGZv4Wai9iYpxUZ2lGajJXYvM3akN3LwBXY'));部分经过反转和解码就可以得到 `app/sdks/archiveLib/bin/data.bin`。 ## SERVER中的东西 在index.php中尝试dump $_SERVER中的内容 ```php register_shutdown_function(function () { $dump = $_SERVER; unset($dump['GLOBALS'], $dump['_ENV'], $dump['_REQUEST']); file_put_contents( __DIR__ . '/_server_dump.php', "<?php\nreturn " . var_export($dump, true) . ";\n" ); }); ``` 虽然有些内容依然是乱码,但是乱码的肯定是关键信息,其它的可以辅助分析。 # data.bin自校验 其中这个文件的编码比较奇怪,如果你使用UTF-8进行编辑会导致代码乱掉,所以尝试使用ISO-8859-1进行解析和保存,这样就能保证不会因为编码问题损坏程序的结构。 ## 尝试修改data.bin 在不关键的位置添加一个空格,刷新页面会白屏,删除一个空格也会白屏;修改不关键的空格为分号(不改变字节数)没问题,因此可以判断出自校验是通过字节数。 尝试格式化代码,通过XDebug进行跟踪调试  此时尝试去掉判断或者判断前赋值即可绕过自校验。有暗桩,很多地方都有检测。 ## 添加接口调用栈 发现好多地方都是通过show_json进行前端返回数据的,这里可以添加traceback信息,便于找到接口对应的后端代码。 `'traceback' => debug_backtrace(DEBUG_BACKTRACE_PROVIDE_OBJECT)` 添加到show_json的响应体中。  如果嫌输出太罗嗦,把参数改成 `DEBUG_BACKTRACE_IGNORE_ARGS`  ## 许可证标识  初步判断版本类型=A是免费版,溯源找到版本信息的映射。 修改main.js,相关位置添加debugger  这里可以修改一下t的值,看下页面效果  ## 找到后端 找到这个加密的字符串来自 `index.php?user/view/options&v=1768744372&full=1`   通过我们dump下来的SERVER,找到索引 `139`  在data.bin(php)中找相关代码[139],这里就需要经验来判断注入点位置了,在调用ywakc36d9075之前先输出一下这个变量,得到没有加密前的数据。猜测这个函数是AESencode(str,key)  观察json_show的结果,得到了我们想要的数据。  # 结语 分析到这里已经差不多了,但是这里暗桩也很多,改了这里并不能使全局都会改变。其实免费版对于个人用户来说已经完全够用了,所以后面就不分析了。 其实从下午1点开始到现在(10点)连续9个小时分析到现在,踩得坑也非常多。这里我对于开发团队表示崇高的敬意,能够做出如此优秀的软件。 © 允许规范转载 打赏 赞赏作者 支付宝微信 赞 如果觉得我的文章对你有用,请随意赞赏