QQ收藏家插件19年就留意到,当时没有过多的研究的只记得功能挺🐮,这次又重新down下来,直接肝到底。
插件加密层数很多,首先第一层是phpar解包
// unphar('qqworld-collector-v3.3.*-beta999-collector.phar');
function unphar($pharpath = 'collector.phar'){
try {
$phar = new Phar($pharpath);
//🔥 提取到zip 然后手动解压 后续还要进行第二层威盾解密
$phar->convertToData(Phar::ZIP);
//直接用foreach / extractTo解包 实测是乱码
//$phar->extractTo('extract');
// foreach ($phar as $file) {
// file_get_contents($file);
// }
// $phar->extractTo('extract', null, true);//提取到目录
} catch (Exception $e) {}
}
第二层 威盾 省略。
即使上面两步解开后,功能仍然不可用,关键代码藏的很深,而且作者还丢了N多冗余文件😂 。
所以前后瞪眼整理代码用了2天....。
最终发现有第三次加密,解开后是对版本序列号的验证逻辑。
再由此块代执行码验证后,从插件服务器加载一串base64加密后的核心代码,解开才是最终需要的代码。
可以明确说这部分代码同时导致了此款插件有风险,因为可以成功传入webshell的。
public function save_crc($filename, $content, $module, $echo = true) {
$this->close_error_reporting();
$filename = md5($filename . $this->domain);
$tmp_dir = ini_get('upload_tmp_dir') ? ini_get('upload_tmp_dir') : sys_get_temp_dir();
$filepath = $tmp_dir . DIRECTORY_SEPARATOR . $filename;
$status = file_put_contents($filepath, $content);
if ($this->get('activation-status', $module) == 'license') $this->set_transient($filename, $content, 2592000);
if ($echo) {
print $status && file_exists($filepath) ? '激活成功' : '激活失败';
}
if ($status !== false) $GLOBALS['QC']->cache->delete_cache("{$this->product}-activation-times");
}
会用到的代码: 直接dump
$fp = fopen(QQWORLD_OUTSIDE_COLLECTOR_DIR."decode".$filename.".php","a+");
fwrite($fp,$content."\n");fclose($fp);
如果你进行到这步 ,还可使用到的方法是进到 /tmp目录 设置不允许删除的保护锁。然后会发现痕迹。
[post_card ids="170"]
但是 但是 最终解密出来其实是试用版的权限,比如远程发布这块试用代码是不会被加载的。
总之经过两天硬刚,又经一番顺藤摸瓜取得了旗舰版核心,任务也就完成了。
这款插件代码量多 、功能完善 、表现亮眼,使用顺手。
官方提供采集规则代写服务,性价比非常高。
作者付出的心血也不小。所以有条件的老铁,请移步支持正版吧。
© 版权声明
文章版权归作者所有,未经允许请勿转载。
THE END
暂无评论内容