目标网站:aHR0cHM6Ly93d3cubWFvbWFvenUuY29tLyMvYnVpbGQ=

话不多说直接开干

1.打开网页,查看源码,哟吼,比我还干净,查找xhr,发现有三个文件,且都是加密数据

python-js逆向之某租网站-AES加密python-js逆向之某租网站-AES加密

2.开始一般操作,随意复制hotlist.json到xur断点,停住了,开始分析调用栈,发现没有什么关键地方

python-js逆向之某租网站-AES加密

3.于是开始用一种最笨的操作,试试看,咱也不知道行不行,点进入内部调试,看提示,真的不知道点了几下,可以去尝试下,终于到了关键位置,出现那一刻真的太感人了,那data不正是加密数据吗,,,,,,如果是老手的话看到加密那一刻,肯定是会先试着全局搜索encode,encrypt,decode,decrypt,json.parse等,我还是太年轻了,我事后才想起来。

python-js逆向之某租网站-AES加密

4.于是开心的打上断点,刷新。真的是乐极生悲啊,虽然停住了但一直在加载,鼠标也点不了,等了好久也没好.............试了几次都一样,难道 天要亡我?。。。。。。天无绝人之路,人定胜天啊,我想起了hook,上图有个JSON.parse,没错咱就hook它,咱也不知道行不行,试试看

脚本代码如下:

python-js逆向之某租网站-AES加密

5.刷新,加密数据出现,再全速运行,可以说这波操作是很成功

python-js逆向之某租网站-AES加密python-js逆向之某租网站-AES加密python-js逆向之某租网站-AES加密

6.在第一次找到的地方打个断点,在全速运行,停住了,很直观,加密数据进来先替换一波,在解个密再转下类型。

python-js逆向之某租网站-AES加密

7.于是进入解密内部分析,哟吼,AES,CBC,pkcs7,还有个iv,分析发现 l 是个固定值

python-js逆向之某租网站-AES加密

8.多调试几遍后就可以进行扣代码了,把该扣的都扣下来,我们只是需要解密相关,但是你可能会因为this,n.default啥的不知道咋扣而选择整体扣,因为我也不知道....................................于是调试几遍后我就想用CryptoJS试试,

直接第一行写 var CryptoJS = require('crypto-js')

把n.default都替换成CryptoJS,扣好并修改好的代码如下:

function aes_decrypt(e) {
    var l = '0a1fea31626b3b55'
    return d(l, e)
}

function d(e, l) {
    e = CryptoJS.enc.Utf8.parse(e);
    var a = CryptoJS.AES.decrypt(l, e, {
        mode: CryptoJS.mode.CBC,
        padding: CryptoJS.pad.Pkcs7,
        iv: e
    });
    return CryptoJS.enc.Utf8.stringify(a)
}

function decrypted(e) {
    e = aes_decrypt(e.replace(/^\s+|\s+$/gm, ""))
    //e = JSON.parse(e)
    return e
}

再复制个请求得到的加密数据打印看看,完美解密。

返回数据解密分析完了,下面就该分析加密参数到底是什么。

没错这次咱也直接hook

首先一个对象先转为字符串,再加密,想想这次我们应该hook什么

..................此处分析省略一万字........

.........................................................

.........................................................

.........................................................

以下直接给出代码:

function p(e, l) {
    return e = CryptoJS.enc.Utf8.parse(e),
        l = CryptoJS.enc.Utf8.parse(l),
        CryptoJS.AES.encrypt(l, e, {
            mode: CryptoJS.mode.CBC,
            padding: CryptoJS.pad.Pkcs7,
            iv: e
        }).toString()
}
function k(e) {
    var l = '55b3b62613aef1a029bd7231109e051d'
    return l = 0 == e ? l.substring(0, 16) : l.substring(16, 32)
}

function encrypted(e) {
    e = JSON.stringify(e)
    return p(k(0), e)
}

当然了有了参数加密的,是不是该有个参数解密的,写写吧,其实已经有答案了。

 

 

 

相关文章:

  • 2021-12-11
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2022-12-23
  • 2021-09-08
  • 2022-03-07
猜你喜欢
  • 2021-09-11
  • 2021-08-07
  • 2021-12-02
  • 2022-12-23
  • 2022-12-23
  • 2021-06-17
  • 2021-11-27
相关资源
相似解决方案