代码保护
控制流平坦化
删除正常程序控制流之间的跳转关系
加入一个标志 在程序块执行到最后的时候改变标志用于执行下一个程序块
BlackObfuscator
项目地址
GitHub:https://github.com/CodingGay/BlackObfuscator.git
Android
build.gradle配置
buildscript {
repositories {
maven { url 'https://jitpack.io' }
}
dependencies {
classpath "com.github.CodingGay:BlackObfuscator-ASPlugin:3.9"
}
}
plugins {
id 'com.android.application'
id 'top.niunaijun.blackobfuscator'
}
// 加入混淆配置
BlackObfuscator {
// 是否启用
enabled true
// 混淆深度
depth 2
// 需要混淆的包或者类(匹配前面一段)
obfClass = ["com.example", "com.example.protection.Dog"]
// blackClass中的包或者类不会进行混淆(匹配前面一段)
blackClass = ["com.example.protection.MainActivity"]
}
效果
核心
基于dex2jar
可以自定义混淆深度
控制流平坦化
Js-Obfuscation
项目地址
GitHub:https://github.com/javascript-obfuscator/javascript-obfuscator.git
特点
变量重命名
/*
function calculateArea(radius) {
return Math.PI * radius * radius;
}
console.log(calculateArea(5));
*/
function _0x2d8f05(_0x4b083b) {
return Math.PI * _0x4b083b * _0x4b083b;
}
console.log(_0x2d8f05(5));
字符串转换和加密
// console.log("Hello, world!");
console.log("\x48\x65\x6c\x6c\x6f\x2c\x20\x77\x6f\x72\x6c\x64\x21");
//\x表示16进制ASCLL码 转换就是hello,world!
控制流平坦化
混淆后的代码 可能会影响代码运行的性能 混淆程度越深则性能降低的越多
使用
默认配置
npm install javascript-obfuscator -g
javascript-obfuscator F:\Project\HbuIlderProject\Obfuscator\requestLogger.js
效果
如果要更深层的混淆就新建一个json的配置文件 使用 --config config.json 指定配置文件