JS逆向:破解某站 password 参数加密逻辑

2021-11-24  本文已影响0人  dex0423

目标站点:aHR0cDovL2VpcC5jaGFuZmluZS5jb20vbG9naW4uanNw

说明: 该站点较简单,可以作为小白练手使用,方便理解 js 逆向常规步骤。

1. 定位代码

1637758520(1).png image.png

2. 分析调试

1637760768(1).png image.png
function getSessionId(){
    return "3B9B93AF595C0F909356C09468D9F041";
}
1637763236(1).png

分析发现
-- keyObj.key 就是前面得到的 key 对象的 key 属性值,
-- CryptoJS.enc.Utf8.parse() 函数对应的函数在122行:

parse: function(a) {
            return b.parse(unescape(encodeURIComponent(a)))
        }

-- 分析上面的代码,encodeURIComponent 是内生的自带函数,unescape() 也是内生的自带函数,而且两个函数都为对传入的参数 a 做任何修改。需要继续回溯分析的 b.parse() 函数,对应函数代码为:

parse: function(a) {
            for (var c = a.length, e = [], j = 0; j < c; j++)
                e[j >>> 2] |= (a.charCodeAt(j) & 255) << 24 - 8 * (j % 4);
            return new r.init(e,c)
        }

-- 分析上面的代码,发现其执行过程包括一个 for 循环,单步调试发现并不需要进一步回溯,需要回溯的是return 的 new r.init(e,c),继续回溯得到如下代码:

init: function(a, c) {
            a = this.words = a || [];
            this.sigBytes = c != p ? c : 4 * a.length
        },
1637768245(1).png

3. js代码实现

第一步,是通过 SECURITYKEY.get() 生成一个对象,在此过程中还需要 ajax 发送一个带时间戳的请求;
第二步,是通过 CryptoJS 中的 AESenc 进行加密处理;

上一篇下一篇

猜你喜欢

热点阅读