一、JavaScript反混淆工具
當我們從其他來源獲取的JavaScript代碼非常複雜且混淆時,我們可能需要反混淆它們以便更好地理解和修改。JavaScript反混淆工具可幫助我們自動化這個過程。
以下是一個基於JavaScript的反混淆工具示例:
// 將帶有多個$$、 _0x、_0X 開頭變量名的 JavaScript 代碼反混淆
function deobfuscate(code) {
return code.replace(/\$\$(\w+)\['(\w+)'](\(\))?\['(\w+)'](\(\))?/g, function(full, c1, c2, p1, c3, p2) {
let name = c2;
if (c3) {
name += c3;
}
return `${name}`;
}).replace(/(_0x\w{4,6})\[(\d+)\]/g, function(full, c1, c2) {
const index = parseInt(c2, 10);
const charCode = parseInt(c1, 16) - index;
return String.fromCharCode(charCode);
}).replace(/_0X(\w+)/g, function(full, c1) {
return String.fromCharCode(parseInt(c1, 16));
});
}
以上代碼可以將JavaScript代碼中的多個$$、 _0x、_0X 開頭的變量名反混淆成易於理解的名稱。
二、JavaScript反混淆工具解密
當JavaScript代碼被混淆後,可能會出現eval()和Function()等函數代碼,這些代碼很難直接理解。
以下是一個用於反混淆JavaScript中eval代碼的示例:
function decryptEval(input) {
let result = '';
for(let i = 0; i < input.length; i += 2){
result += String.fromCharCode(parseInt(input.substr(i, 2), 16));
}
return result;
}
這段代碼將16進制字符轉換為字符,以便更容易地讀取JavaScript eval()評估函數代碼中的內容。
三、JavaScript反混淆App
有很多開發人員設計了一些應用程序以處理混淆的JavaScript代碼。
以下是一個名為「JavaScript混淆」的Android App例子:
public class JavaScriptObfuscator {
public static String deobfuscate(String code) {
String deobfuscatedCode = JavascriptObfuscator.restore(code);
deobfuscatedCode = JavascriptObfuscator.replaceCharCodes(deobfuscatedCode);
deobfuscatedCode = JavascriptObfuscator.replaceStrings(deobfuscatedCode);
deobfuscatedCode = JavascriptObfuscator.restorePropertyAccess(deobfuscatedCode);
deobfuscatedCode = JavascriptObfuscator.restoreIdentifiers(deobfuscatedCode);
return deobfuscatedCode;
}
// Reverse the first stage of obfuscation (converts Js+Symbol obfuscation to standard JavaScript)
private static String restore(String s) {/*...*/}
private static String replaceStrings(String s) {/*...*/}
private static String replaceCharCodes(String s) {/*...*/}
private static String restorePropertyAccess(String s) {/*...*/}
private static String restoreIdentifiers(String s) {/*...*/}
}
這個App採用多種技術來反混淆JavaScript代碼,包括還原字符串、字符轉換等。
四、JavaScript反混淆還原工具
當我們需要通過混淆的JavaScript代碼重構應用程序時,反混淆還原工具就特別有用了。
以下是一個基於俄語的JavaScript反混淆還原工具示例:
var f$ = function (a$) {
a$ = a$.replace(/\s+/g, "");
return [a$.slice(0, a$.length / 2), a$.slice(a$.length / 2)]
}
該代碼將字符串拆分成兩個部分。應用程序可以使用此工具來還原並解碼被混淆的JavaScript代碼。
五、JavaScript反混淆 Node.js
Node.js是一組基於Chrome V8引擎的JavaScript運行時。Node.js可以用於服務器端編程,同時也支持在命令行窗口中執行JavaScript命令。
以下是一個基於Node.js的反混淆代碼的示例:
var vm = require('vm');
var script = new vm.Script('p\x72i\x6et(\x22Hel\x6co Wor\x6cd!\x22);');
script.runInThisContext();
這段代碼實現了將混淆代碼還原為可讀的字符串的效果。可以在Node.js環境中運行。
六、JavaScript反混淆滑塊驗證
在現代網站中,滑塊驗證用於防止機械人攻擊。使用反混淆技術,可以更容易地突破這種驗證。
以下是一個基於JavaScript的反混淆滑塊驗證示例:
function decodeSliderPos(input) {
const result = [];
for (let i = 0; i < input.length; i += 2) {
const pos = parseInt(input.substr(i, 2), 16) ^ 9;
result.push(pos);
}
return result;
}
這個函數用於解碼滑塊驗證的位置信息,並將它們還原為可讀的字符串。
七、代碼反混淆
反混淆不僅僅適用於JavaScript代碼,也適用於其他編程語言的代碼。以下示例展示了如何在使用Java編寫的應用程序中反混淆代碼:
public class JavaCodeDeobfuscator {
private int getIndex(String str) {
int index = 0;
for (int i = 0; i < str.length(); i++) {
index += str.charAt(i);
}
return index % 10;
}
public String deobfuscate(String code) {
String[] tokens = code.split("\\s+");
StringBuilder sb = new StringBuilder();
for (int i = 0; i 1) {
sb.append(token.substring(1));
}
sb.append(' ');
}
return sb.toString();
}
}
此代碼將文字代碼反混淆為易於理解的名稱。
原創文章,作者:小藍,如若轉載,請註明出處:https://www.506064.com/zh-hk/n/230644.html