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

1、jsnice 簡(jiǎn)介

  • jsnice 是一個(gè)反混淆利器之一,可以將混淆后的代碼進(jìn)行更加有好的展示,從而提升代碼的可讀性;
  • jsnice 在元素關(guān)系的建立上大部分來(lái)自于 AST 語(yǔ)法樹,同時(shí)采用了概率圖模型進(jìn)行 推理聯(lián)想,通過樣本學(xué)習(xí)推測(cè)出未混淆JS腳本的 概率圖;

jsnice 本質(zhì)上是一種 機(jī)器學(xué)習(xí)。

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

2、jsnice 使用實(shí)例

  • 我們以 jsnice 網(wǎng)站的實(shí)例進(jìn)行說明,下面的代碼,是我們常見的經(jīng)過混淆處理的代碼:
// 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 進(jìn)行 nicefy 操作,得到下面的代碼,代碼的變量名、參數(shù)名等都被以很友好的方式進(jìn)行了解讀,代碼可讀性大大提高:
'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 實(shí)際上只能處理 80% 的混淆代碼,如果代碼經(jīng)過 加密壓縮 等方式混淆后, jsnice 反混淆也會(huì)失敗,這種情況下我們除非知道其加密算法,否則無(wú)法反混淆出來(lái);

jsnice 處理不了經(jīng)過 復(fù)雜加密壓縮混淆 的代碼!

最后編輯于
?著作權(quán)歸作者所有,轉(zhuǎn)載或內(nèi)容合作請(qǐng)聯(lián)系作者
【社區(qū)內(nèi)容提示】社區(qū)部分內(nèi)容疑似由AI輔助生成,瀏覽時(shí)請(qǐng)結(jié)合常識(shí)與多方信息審慎甄別。
平臺(tái)聲明:文章內(nèi)容(如有圖片或視頻亦包括在內(nèi))由作者上傳并發(fā)布,文章內(nèi)容僅代表作者本人觀點(diǎn),簡(jiǎn)書系信息發(fā)布平臺(tái),僅提供信息存儲(chǔ)服務(wù)。

友情鏈接更多精彩內(nèi)容