美文网首页
逆向万例|No.00003【登录篇】某399小游戏网站登录接口逆

逆向万例|No.00003【登录篇】某399小游戏网站登录接口逆

作者: 逆向扬 | 来源:发表于2023-03-06 23:13 被阅读0次

    声明:本文仅供学习交流用途,切勿用于非法行为,否则由此产生的一切后果均与作者本人无关。未经授权禁止转载本文。如有侵权,请及时通过本人公众号「逆向扬」联系删除。

    0x1 开始之前

    网站地址:YUhSMGNITTZMeTkzZDNjdU5ETTVPUzVqYjIwdg==(提示:两次)

    本文目标:逆向该网站登录接口

    今天玩点简单的逆向,一起来玩玩童年小游戏网站的登录接口。

    0x2 抓包分析

    在网站的账号密码登录方式中输入帐密后点击登录,打开谷歌浏览器开发者工具可以看到,此时网站发送了一个 /login.do 包。在这个包中网站对密码进行了加密:

    这个网站登录接口要分析的地方就只有这一个参数,也就是密码是如何加密的。

    我们通过一个个翻请求包发现,密码加密位置在/validation.js 中:

    既然找到了加密位置,一般我们就会直接在开发者工具的 Source 面板下找到这个 js 文件,然后打断点。但是会发现,在这个案例中,直接在 Source 下面找不到 validation.js 。找不到就下不了断点,下不了断点就无法调试,该咋办?

    我采用的方式是将这个 validation.js 保存到我本地,在下图位置打上 debugger;,然后用代理工具的本地替换功能,在请求该文件时将其替换成我本地的这个文件:

    由于我用的是 mac 系统,因此这里演示的代理工具的本地替换功能是 Charles 的。

    0x3 代理工具本地替换

    注意,在使用代理工具的本地替换功能前,记得勾上开发者工具的 Disable cache 按钮,以防止浏览器请求资源时一直请求的是浏览器缓存的资源。

    我之前就踩了这个坑,明明已经配置好了本地替换,但是浏览器最后请求到的对应资源始终不是我本地的,疑惑了半天才意识到一直请求的是浏览器的缓存:

    关于如何在 Charles 配置本地替换,可以参考这篇文章:使用Charles 来实时替换环境上的文件

    配置好后,回到网站,打开开发者工具,输入账号密码点击登录,可以看到顺利进入断点:

    最终根据调试我们发现,其实就是一个标准的 AES 加密,因此我们直接用 node.js 中的 crypto-js 库复现一下即可:

    var CryptoJS = require('crypto-js')
    
    function encryptAES(IdVal) {
        return CryptoJS.AES.encrypt(IdVal, "lzYW5qaXVqa").toString();
    }
    

    密码加密的部分 python 代码:

    with open("sdk.js", "r", encoding="utf8") as f:
        js = f.read()
    js_complied = execjs.compile(js)
    
    def encrypt_password(pwd):
        return js_complied.call("encryptAES", pwd)
    
    

    0x4 验证

    最后贴一下执行结果,可以看到,成功模拟登录:

    最后

    童年很喜欢玩的小游戏网站的登录接口的逆向就到这儿,整个过程还是偏简单的。如果大家读后有收获的话,记得点个赞哈。咱们下一篇文章再见。

    相关文章

      网友评论

          本文标题:逆向万例|No.00003【登录篇】某399小游戏网站登录接口逆

          本文链接:https://www.haomeiwen.com/subject/vyjvldtx.html