JS逆向:使用 jsnice 提高混淆代碼的可讀性

1、jsnice 簡介

  • jsnice 是一個反混淆利器之一,可以將混淆後的代碼進行更加有好的展示,從而提升代碼的可讀性;
  • jsnice 在元素關係的建立上大部分來自於 AST 語法樹,同時採用了概率圖模型進行 推理聯想,通過樣本學習推測出未混淆JS腳本的 概率圖

jsnice 本質上是一種 機器學習

  • 詳細的工作原理,強烈推薦閱讀一下這篇文章:《 代碼理解之代碼可讀性:代碼反混淆(https://zhuanlan.zhihu.com/p/311907878)》,以加強對其的理解;

2、jsnice 使用實例

  • 我們以 jsnice 網站的實例進行說明,下面的代碼,是我們常見的經過混淆處理的代碼:
// Put your JavaScript here that you want to rename, deobfuscate,
// or infer types for:
function chunkData(e, t) {
  var n = [];
  var r = e.length;
  var i = 0;
  for (; i < r; i += t) {
    if (i + t < r) {
      n.push(e.substring(i, i + t));
    } else {
      n.push(e.substring(i, r));
    }
  }
  return n;
}
// You can also use some ES6 features.
const get = (a,b) => a.getElementById(b);
  • 使用 jsnice 進行 nicefy 操作,得到下面的代碼,代碼的變量名、參數名等都被以很友好的方式進行了解讀,代碼可讀性大大提高:
'use strict';
/**
 * @param {string} bin
 * @param {number} size
 * @return {?}
 */
function chunkData(bin, size) {
  /** @type {!Array} */
  var results = [];
  var length = bin.length;
  /** @type {number} */
  var i = 0;
  for (; i < length; i = i + size) {
    if (i + size < length) {
      results.push(bin.substring(i, i + size));
    } else {
      results.push(bin.substring(i, length));
    }
  }
  return results;
}
const get = (doc, key) => {
  return doc.getElementById(key);
};

3、jsnice 只能處理普通混淆

  • jsnice 實際上只能處理 80% 的混淆代碼,如果代碼經過 加密壓縮 等方式混淆後, jsnice 反混淆也會失敗,這種情況下我們除非知道其加密算法,否則無法反混淆出來;

jsnice 處理不了經過 複雜加密壓縮混淆 的代碼!

發表評論
所有評論
還沒有人評論,想成為第一個評論的人麼? 請在上方評論欄輸入並且點擊發布.
相關文章