Js 的 混淆 與反混淆


Js 混淆:

https://obfuscator.io/

功能很多,暫舉兩個:

1、Identifier Names Generator : 把變量、方法的名字變成 16進制(0xabc123) 或者 無意義的字母(a,b,c等)

2、String Array:把所有的字符串,抽取到一個數組中,調用的地方,通過一個方法算出index,然后到這個數組中取出字符串。

var _0x5a62 = ['log', 'Hello\x20World!'];

var _0x5340 = function(_0x3b4f00, _0x1c66d8) {
    _0x3b4f00 = _0x3b4f00 - 0x0;
    var _0x4d4bfa = _0x5a62[_0x3b4f00];
    return _0x4d4bfa;
};

function hi() {
    console[_0x5340('0x0')](_0x5340('0x1'));
}

3、利用JS的語法特性打亂原有的代碼

 

Js反混淆:

1、先用自己寫的tools1將 混淆的js中抽取到String Array中的那些字符串,還原到代碼中去 (執行完后若發現還存在 _0x5461 未被替換,則將處理完的代碼再處理一次即可)

原理: 從加密代碼中找出 StringArrays 和 算 該數組的index的方法(比如為 _0x5461方法),再通過正則 遍歷加密的js的文本,

將調用的地方(包含有_0x5461(...) 的地方)截取出來,通過eval進行運算得出真正的string,再替換回去。


2、然后將上一步處理過后的結果 放到 http://jsnice.org/ 通過 人工智能 幫忙還原部分屬性和方法的命名

注意:

    a、該網站用了google CDN提供的jquery,需要fanqiang才能使用

    b、該網站無法處理es6的js,所以先需要將代碼轉成es5(通過 https://es6console.com/ 先將混淆的js 從es6 轉為 es5)。


3、最后將 上一步處理后的代碼 通過 tools2 將 剩下的_0x開頭的 轉換為 a1,a2,方便閱讀

原理: 將上一步處理后的代碼進行遍歷,尋找 _0x開頭的 轉換為 a1,a2

補充:
所有的動作完成后,曾今嘗試過 將代碼放到 https://mindedsecurity.github.io/jstillery/# 進一步處理,
發現效果不明顯,而且會導致代碼處理后語法出錯,不建議。

 

參考:estools 輔助反混淆 Javascript – 0xCC

參考文章中的 https://github.com/ChiChou/etacsufbo 已廢棄,不再有用了。

另一篇文章中說的 “javascript-obfuscator對應的解混淆工具crack.js” 也是無用的。https://github.com/jscck/crack.js/blob/master/crack.js

 


免責聲明!

本站轉載的文章為個人學習借鑒使用,本站對版權不負任何法律責任。如果侵犯了您的隱私權益,請聯系本站郵箱yoyou2525@163.com刪除。



 
粵ICP備18138465號   © 2018-2025 CODEPRJ.COM