某数和某5秒-反混淆动态注入调试的一种方案

某数和某5秒-反混淆动态注入调试的一种方案

本篇文章主要讲述使用mitmproxy进行代码注入的一种方案,可以解决动态js和加密js的情况,本篇主要使用两个案例来展示。js逆向分析相关的在本篇文章中不会详细说,因为关系不大。本篇文章参考以下内容

1.中国商标网JS调试 - 动态代码注入
2.js逆向案例-rus5逻辑学习
3.某5某秒分析笔记
4.【JS逆向系列】某空气质量监测平台无限 debugger 与 python算法还原

某数的动态js,每次访问返回的都是不同的js,使用无痕模式打开浏览器,打开f12里面,选中事件监听断点中的脚本

在这里插入图片描述
此时打开网页可以看到如下的类型的代码

在这里插入图片描述

按照前面的思路,那么就是先把代码拿到手,然后进行反混淆,再讲反混淆后的代码设置回响应。这次依然是使用mitmproxy进行拦截,使用ast进行反混淆并添加断点

在这里插入图片描述

此时调试代码就比较方便了,也不用再去设置事件监听断点。,下一步可以在eval.call前面找到已经组装好的第二层代码,接下来就是进入vm了。

在这里插入图片描述

如果要将这里面的代码进行反混淆,还是一样需要先把代码拿到手,也就是说需要主动执行第一层的代码,然后拿到第二层的代码,此时将代码反混淆后,在第一层代码合适的地方,用反混淆后的代码替换掉原来第二层的代码。

在这里插入图片描述

这样就可以反混淆vm里面的代码里面的任意地方加上断点来调试,整体代码如下

def response(flow: http.HTTPFlow):
    if 'new_house.html' in flow.request.url:
        # 拦截首层html
        print('数据拦截', flow.request.url)

        with open('new_house.html', 'wb') as f:
            f.write(flow.response.content)

        # 反混淆第一层,并注入代码,等待生成第二层
        os.system('node astfangdi_init')
        print('首次处理完成')
        # 主动执行生成第二层代码
        nodejs = os.popen('node fangdi_init')
        jscode = nodejs.read().replace('\n', '')
        nodejs.close()

        with open('fangdi_init.json', 'w', encoding='utf-8') as f:
            f.write(jscode)
        print('二层代码获取完成')
        # 反混淆第二层代码
        os.system('node astfangdi2')
        print('二层代码反混淆完成')
        # 反混淆第一层代码,并注入前面生成的第二层代码
        os.system('node astfangdi')

        with open('new_house_decrypt.html', 'rb') as f:
            htmlcon = f.read()
        flow.response.set_content(htmlcon)
        print('首层代码注入完成')

然后是某5秒的加密js,还是使用无痕模式打开浏览器以及选中事件监听断点中的脚本

在这里插入图片描述
会断在一个_cf_chl_opt的参数上面,然后会请求一个jsch/v1的接口

在这里插入图片描述

返回的是一段带有ob混淆的内容,脚本断点会在解密后执行时断下

在这里插入图片描述

这个的拦截就和之前是一样的了,直接可以替换掉。不是说有加密的js吗?那么继续往下看。

在这里插入图片描述
后面还会接着请求一个flow/ov1这样的接口,里面的请求体和响应体就是加密了的,当然,准确来说不是加密,后面会说到。

在这里插入图片描述
在这里插入图片描述

这里解密后会使用function的构造函数进行代码。

在这里插入图片描述
这里也是有ob混淆的代码,这里想要拦截反混淆就不是这么简单了,因为返回的是加密了的代码,如果想要反混淆,那么就必须先解密代码。而这里又衍生出一个问题,就算我解密反混淆后,还是不能直接把响应设置进去,因为原本代码是加密的,我直接设置没有加密的代码,那么网页肯定会报错的。

那么这里在原来的基础上,还要多两步,就是把js解密,和重新加密回去。如何找到解密的函数这里就不详细说了,逻辑比较简单,那么就可以直接改成python的代码来解密

 data64 = base64.b64decode(flow.response.content)
 x = reduce(lambda n, m: n ^ m, [32] + list((cRay + "_0").encode()))
 dedata = bytes([((data64[A] & 255) - x - A % 65535 + 65535) % 255 for A in range(len(data64))])

这里的dedata 就是得到的js明文,接下来就可以愉快的对代码进行反混淆了,那么怎么加密回去呢,这里其实就是一个反向运算。举个简单的例子就是解密是减去1,那么加密就是加上。如果解密是乘以x,那么加密就是除以x。加密的代码如下

endata = bytes([((dedata[A]) - 65535 + (A % 65535) + x) % 255 for A in range(len(dedata))])
flow.response.set_content(base64.b64encode(endata))

这样就可以把反混淆的代码设置回去了

在这里插入图片描述

这样就可以得到反混淆后的vm代码。调试起来就相对简单了一些,这个是响应体,那请求体也加密了。如果想看看请求的时候提交了什么,或者直接修改请求体的话,那是类似的逻辑,需要先解密,然后再加密才能设置回去。这里主要说一下加密的内容,其实说加密不太准备,应该说只是一个压缩方法。

在这里插入图片描述
这里的逻辑其实就是lzstring的压缩算法,python中也有lzstring这个库,但是不能直接使用,因为这里使用的是非标准的base64编码表,需要对源码进行部分修改

在这里插入图片描述

这样我们就可以随时对请求体和响应体拦截,不断的对比本地生成的数据和网页提交的数据的差别来生成我们的本地环境,mitmproxy的学习到此就结束啦。

更多内容可以加入我的星球一齐学习哦

在这里插入图片描述

  • 4
    点赞
  • 12
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
### 回答1: jsbeauty是一款js混淆工具,可以将js代码进行简单的格式化和重构,使之更易于阅读和理解。该工具可以对压缩后的js代码进行还原,同时也可以处理常见的混淆手段,如变量名替换、字符串转换、函数调用加密等。在混淆的同时,jsbeauty也会对代码进行格式化,使之符合一定的代码规范,方便开发者进行修改、调试或者进一步地优化。 jsbeauty的使用非常简单,只需要将需要混淆的代码复制到输入框中,然后点击“美化”按钮,即可得到混淆后的代码。工具支持多种输入格式,包括普通的纯文本、base64编码的字符串和url地址等。同时,jsbeauty也提供了一些高级选项,例如可以设置缩进字符、关闭自动格式化等功能,以实现更精准的混淆处理。 总之,jsbeauty是一款非常实用的js混淆工具,可以帮助开发者快速还原和理解压缩后的js代码,提高开发效率和代码质量。 ### 回答2: JSBeauty是一种JS混淆工具,可以帮助用户识别和还原混淆的JavaScript代码。JavaScript混淆是在代码中添加随机字符串或将变量名改为无意义的名称等行为,以增加代码的复杂性和保护代码。然而,这种混淆行为对于代码的阅读和理解造成了困难。 JSBeauty可以自动处理大部分常见的混淆技巧,例如删除无用代码、解密字符、解析代码及向解析等,以还原JavaScript的原始文件。该工具通过先进的算法实现代码混淆,从而帮助用户节省时间和提高代码可读性。 JSBeauty还具有易于理解的用户界面和简单易用的功能,可以处理单个文件或整个目录的代码,并可以将输出转换为HTML、XML或JSON格式,方便保存和分享。此外,JSBeauty还提供了一些可定制选项,以帮助用户自定义代码输出以符合特定的要求。 总之,JSBeauty是一种出色的JS混淆工具,几乎可以自动处理所有常见的混淆技巧,从而帮助用户提高代码可读性和理解程度。 ### 回答3: jsbeauty是一种JS混淆工具,它可以在混淆程序时非常有用。JS混淆是指恢复被混淆代码的原始形式,代码混淆通常是为了抵御恶意攻击者对代码的逆向工程。JS混淆技术的普遍应用使得像静态分析和动态调试这样的任务变得更加困难。因此,jsbeauty可以用来恢复混淆的代码,以便进行更好的JS分析和调试。 使用jsbeauty,可以将混淆后的代码转换为易于理解的形式。通过使用jsbeauty,程序员们可以简单地修改混淆后的代码,以了解它确切的操作。它还为您提供一个程序员友好的环境,并提供了许多有用的功能,如混淆和重构 另外,jsbeauty还可以通过改变JavaScript代码的格式来增强与编辑器的集成。这可以使代码更具可读性,更加易于维护,因为代码的布局更加清晰。总之,JSbeauty是一种非常有用的工具,使程序员们可以在处理JavaScript代码时更加方便和有效。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值