1. 程式人生 > 其它 >JS逆向之webpack 通用扣取思路

JS逆向之webpack 通用扣取思路

本文所有教程及原始碼、軟體僅為技術研究。不涉及計算機資訊系統功能的刪除、修改、增加、干擾,更不會影響計算機資訊系統的正常執行。不得將程式碼用於非法用途,如侵立刪!

標題

環境

  • win10
  • chrome106

目標站:aHR0cHM6Ly93d3cuZ205OS5jb20v
加密引數 password: K6YEmQrNy%2FQgdnacXhdIZ1upCj4UU562IW89oOZquLkZ%2F16JDNyMqEU7pGVemvQzjfAlOzh7nSOLPkJp3kxbTm8XtWrHp9K%2BmMClOmmhkbdjAyax5xLBWC6PJiD6o8H

隨便輸入一些資訊,觸發登入,抓包找到介面

全域性搜尋password,沒有找到明顯的有用資訊,使用xhr堆疊隨便找個疑似位置打個斷點跟進去
明顯分析出a.encode就是加密方法
,檢視結構可以看出是webpack結構

1.定位載入模組的方法(載入器)

webpack必有一個載入模組的方法:call或apply,找到載入器先摳出來

function e(s) {
    if (i[s])
        return i[s].exports;
    var n = i[s] = {
        exports: {},
        id: s,
        loaded: !1
    };
    return t[s].call(n.exports, n, n.exports, e),
}

2.構造成自執行方法

在控制檯除錯一下缺什麼補什麼

!function(t) {
    function e(s) {
    	var i = {};
        if (i[s])
            return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e),
    }
}()

3.定位並扣除呼叫的加密方法

在a.encode處下斷點,跟進去找到最終的加密方法
分析得知jsencrypt.encrypt就是最終的加密方法

將jsencrypt.encrypt的方法整段扣出來,然後作為引數填入自執行載入器中,然後在將呼叫jsencrypt.encrypt的方法也摳出來

程式碼太長就不貼了,最終的格式就是下面的樣子,

!(function(t) {
    var i = {};
    function e(s) {
        if (i[s]) return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e), n.loaded = !0, n.exports
    }
    _e = e;
})({
    encrypt: function(t, e, i) {},
    diaoyong: function(t, e, i) {}
});

4.匯出加密方法

var _e;
!(function(t) {
    var i = {};
    function e(s) {
        if (i[s]) return i[s].exports;
        var n = i[s] = {
            exports: {},
            id: s,
            loaded: !1
        };
        return t[s].call(n.exports, n, n.exports, e), n.loaded = !0, n.exports
    }
    _e = e;
})({
	encrypt: function(t, e, i) {},
    diaoyong: function(t, e, i) {}
});

5.編寫自定義方法 按照流程加密

function getkey(pass, time) {
    var diaoyong= _e("diaoyong");
    //這兒需要new一下呼叫方法,不然獲取不到方法屬性
    var new_diaoyong = (new diaoyong);
    return new_diaoyong.encode(pass, time)
}

效果

資源下載

https://download.csdn.net/download/qq_38154948/87253109


本文僅供學習交流使用,如侵立刪!