猿人学第一届第一题

第一题 js混淆源码乱码 - 猿人学icon-default.png?t=N7T8https://match.yuanrenxue.cn/match/1一、逆向点分析

        打开开发者工具发现进入一个setInterval的定时器debugger。个人觉得猿人学这个反调试的debugger设置的非常好,每一题的debugger几乎都不一样,这20题你都过了,基本反调试的debugger也就难不住你了。言归正传,定时器debugger,那直接把定时器置空不就好了。

for (let i = 1; i < 99999; i++) window.clearInterval(i);

        控制台直接运行, 发现轻松跳过了反调试debugger。通过分析不难看出只有请求体的m值需要逆向,别着急,翻几页看看除了发数据包以外它还发其他的包不。此题难度标为简单,果然没有发其他乱七八糟的的包。

二、m值逆向

        观察数据包的请求url,发现包含m,那就好办了,直接通过游猴hookxhr。

// ==UserScript==
// @name         hookxhr
// @namespace    http://tampermonkey.net/
// @version      0.1
// @description  try to take over the world!
// @author       You
// @match        https://match.yuanrenxue.cn/match/*
// @icon         https://www.google.com/s2/favicons?sz=64&domain=yuanrenxue.cn
// @grant        none
// @run-at       document-start
// ==/UserScript==


(function () {
    let openCache = window.XMLHttpRequest.prototype.open;
    window.XMLHttpRequest.prototype.open = function (method, url) {
        console.log("Hook xhr method => %s, url => %s", method, url);
        if (url.indexOf("m=") !== -1) {
            debugger;
        }
        return openCache.apply(this, arguments);
    };
})();

        刷新网页很轻松的hook到m值,往上追几步来到request这一栈,一个混淆的js,但是不难找到请求体data生成的地方。

        可以看出m值重点是_0x57feae这个变量值,那就将断点走到_0x57feae = oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']()) + window['\x66']这个赋值的地方,可以看出oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']())这部分为‘’ 空字符串,主要是 window['\x66']也就是window.f的值,window.f在哪里定义的呢,不好找啊。

        静下来想想生成m值时非要拼接这个oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']())空字符串干嘛,会不会在这里面定义来window.m?,那就测试下,在_0x57feae = oo0O0(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']()) + window['\x66'];这个的上下行各打一个断点,当走到上方断点时,控制台输出window.f为undefined,走到下方就出现了m值。那么oo0O0这个函数定义了window.f是无疑了,进入oo0O0函数,并记下其传入的参数值mw='1712769444000',大致看了下并没有发现window.f赋值的地方,只有一个eval函数有点可疑,同样打上断点调试下,发现在走到eval上方时window.f还是没定义,走完eval函数就出现了window.f值。直接控制台输出eval里传的参数,发现是一串js代码,复制下来去掉首尾的引号格式化下看一看,果然发现了window.f复制的地方。而且直接运行就拿到了m值。

        还有一步要研究下,生成f值得这个hex_md5函数传入的时间戳参数哪来的?我们知道oo0O0函数传入的也是时间戳参数,它俩会不会是一个值,返回oo0O0函数看看,eval函数里传入了oo0O0函数的得传参mw。数值也是相同的,那就找到了hex_md5函数的传参。

剩下的就是修改m值的生成方式并封装函数以便py调用。

function get_m(){
    var _0x2268f9 = Date['\x70\x61\x72\x73\x65'](new Date()) + (16798545 + -72936737 + 156138192)
      , _0x57feae = hex_md5(_0x2268f9['\x74\x6f\x53\x74\x72' + '\x69\x6e\x67']());

m= _0x57feae + '\u4e28' + _0x2268f9 / (-1 * 3483 + -9059 + 13542);
return m
}

剩下的就是自己编写py代码了。

  • 12
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
对于您提到的错误TypeError: list indices must be integers or slices, not str,这是因为您在访问列表中的元素时使用了字符串作为索引,而列表的索引必须是整数或切片类型。解决这个错误的方法是使用整数或切片来访问列表中的元素。 关于您提到的猿人js逆向的问,我需要更多的信息才能为您提供具体的答案。对于爬虫编写,您可以使用Python的各种库(如Requests、BeautifulSoup、Scrapy等)来获取网页的内容,并进一步解析和处理。您可以使用这些库发送HTTP请求获取网页内容,然后使用解析库来提取您需要的数据。 爬虫编写的一般步骤如下: 1. 导入所需的库 2. 发送HTTP请求获取网页内容 3. 使用解析库解析网页内容 4. 提取所需的数据 5. 进行数据的进一步处理和存储 您可以根据具体的需求和网站的结构进行相应的编写和调试。如果您需要更具体的帮助,请提供更多的信息。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* *3* [Python:TypeError: list indices must be integers or slices, not str报错解决及原理](https://blog.csdn.net/hhd1988/article/details/128031602)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] - *2* [Python BeautifulSoup [解决方法] TypeError: list indices must be integers or slices, not str](https://download.csdn.net/download/weixin_38590567/14871394)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 50%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值