Java2C白名单设置(帮助文档)

1.概述

Java2C针对DEX文件进行加密保护,将DEX文件中的Java代码翻译为C代码,编译成加固后的SO文件。默认情况标签加固(加固已打标签的类或方法,标签形式:@LDPProtect),如果开发者想加密其它类和方法,只需对相关类或函数添加标记代码,在APK加密时会自动对标记的代码进行加密处理【或自定义Java函数白名单来对重要的函数进行加密】。

2.创建注解

需要在Android源码工程添加注解@LDPProtect,明确告诉加固工具那些函数是需要进行加密保护的。

在Android工程项目中,定义一个名为LDPProtect的Annotation:

注解代码如下:

import java.lang.annotation.Retention;
import java.lang.annotation.RetentionPolicy;

@Retention(RetentionPolicy.RUNTIME)
public @interface LDPProtect {
}

效果如图:

3.类添加注解

如果是想对类中所有函数【不含构造函数】进行加密,在类前面加@LDPProtect即可,如下图:

4.函数添加注解

如果是想对类中的某些函数进行加密,在需要加密的函数前面加@LDPProtect即可,如下图:

5.过滤符号混淆

如果Android工程中开启了proguard混淆java符号,必须过滤对LDPProtect的混淆,否则加固程序无法识别到该函数,在主工程的proguard.pro中添加

-keep interface com.xinlan.imageeditlibrary.LDPProtect 即可,如下图:

执行命令行加固apk时,底层加固程序会自动识别该注解的函数并进行Java2C翻译,再进行Native层的安全保护。

6.忽略函数加密

为了满足一些项目场景,需要过滤对一些方法进行加密,同样在Android项目中定义名为NOLDPProtect的Annotation,使用方式与LDPProtect一样,设置之后的类或者方法就不会被加密。

7.暂时不支持的方法类型与解决思路、办法

将对应类或者方法的逻辑,若存在以下不支持选项,则剔除对应特征到其它类或者方法中去(如父类和方法调用者)

1.不支持interface, abstract, annation, enum 修饰的类;

2.不支持 native, abstract修饰的方法以及构造方法;

3.不支持名称含有非字母数字和下划线的特殊字符的方法;

**4.不支持同一个包下同一类中方法名方法参数完全相同,或者与native方法同名的方法;**参考通用解决思路重构方法,将方法中进行改名或者更改参数

**5.不支持含有8位立即整数值的移位、逻辑、算术操作符,含有filled_new_array(即为new array填充初始值)指令,编译后虚拟寄存器数量大于512的方法;**参考通用解决思路重构方法,将方法中8位立即整数值的移位、逻辑、算术操作符及filled_new_array进行转移,以及优化代码逻辑,减小编译后虚拟寄存器数量

更改前(以8位立即整数为例):

更改后:

最后更新时间: 2024-11-20 17:34:45

results matching ""

    No results matching ""