控制流平坦化

  • 删除正常程序控制流之间的跳转关系

  • 加入一个标志 在程序块执行到最后的时候改变标志用于执行下一个程序块

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 指定配置文件