背景:
被反馈三方广告素材,在部分国家的广告点击率异常。因此把广告扒下来,想检查是否有自动跳转等执行逻辑。
阅读材料:
1. html形式的广告物料源码
<html>
<head>
<style>
* {
margin: 0;
padding: 0
}
.container {
width: 100%;
height: 100%;
background-color: rgba(0, 0, 0, 0);
cursor: pointer;
}
#ad-img {
width: 100%;
height: 100%;
}
</style>
</head>
<body>
<div class="container">
</div>
<script>
window._track_impression_ = 'https://xx,https://xx';
window._track_click_ = 'https://xx,https://xx';
window._landing_url_ = 'https://xx,https://xx';
window._fallback_url_ = '';
window._image_url_ = 'https://xx.jpg'
</script>
<script src="https://xx/s_i_ts_v3.js"></script>
</body>
</html>
2. js源码(本次要解读的):https://download.youkuaiyun.com/download/tiaodafen/89723787
结论概述
结论:
1. 实际解读并执行跟踪后,发现并无自动跳转等逻辑。说明该js正常合规(可能不合规的js没抓到)。
2. 代码混淆中,主要用到以下策略:
- 代码用到的外部方法名都放到列表里,通过数组的方式读取。相当于用数字与方法名做映射(a0a方法)——这个方式可能仅js适用( ob['function']()相当于ob.function() ),其他语言需要根据自身特性来考虑;
- 数组读取方法名之前,还需要调整列表的元素顺序,使得不知道元素正确顺序的人不能轻易通过数组解读出方法(while (!![])那段位移逻辑,以及a0b也做了一层偏移);
- 代码内部本身的函数及变量名需要去除含义,用无意义的字母表示(通篇的abcdefg函数与参数)
- 即使调用相同的函数及变量,也都通过不同方式的定义(l()里的O=a0b 与 function()里的R=O );
3. 反混淆解读方法:
- 【LLM的chat模型】用文心一言对具体的方法解个大概能帮助读者快速理解各模块含义,后续自己结合上下文组装起来即可;
- 注意解读的代码要在chat模型内输入,不要在搜索框输入。搜索框会对"[等特殊字符进行处理
- 【格式化工具】需要先把代码进行格式化解开,看懂整个结构布局,知道哪个是主流程,哪个是函数定义,哪个是全局变量
- 注意要找能够缩进、语法高亮、及折叠范围的编辑器或格式化工具。js用chrome自带的DevTools其实就足够好了
- 【逐个击破】需要找到谜面比较清晰、或结构比较熟悉的方法或小模块(例如'clickTracks'方法,肯定是要读取_track_