Js 混淆:
功能很多,暫舉兩個:
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