Android Kotlin 编译时去除Intrinsics检查,防止帮助逆向人员易于阅读 (有内鬼, 终止交易!)

用kotlin写的的apk反编译后 会发现在每个函数第一行出现了Intrinsics.checkXXX
比如一个toJson函数反编译后如图,
Android Kotlin 编译时去除Intrinsics检查,防止帮助逆向人员易于阅读 (有内鬼, 终止交易!)_第1张图片
它会在每个函数第一行多出一个类用来检查非空, 可恶的是它还把参数名丢到字符串中去,
如图中的:

Intrinsics.checkParameterIsNotNull(obj, "$this$toJson");
Intrinsics.checkExpressionValueIsNotNull(toJson, "Gson().toJson(this)");

在使用 自带的 proguard 工具(proguard-rules.pro) 混淆app代码的时候, 它是不支持混淆字符串的…

所以纳闷了…
我们在混淆时把 toJson函数和其参数混淆了又能怎样…,
反而用了kotlin会让逆向人员更轻易地阅读你的代码…
而且, 全网没多少人在意这件事…

解决方案 加入kotlin编译参数, 去除Intrinsics检查

  defaultConfig {
        kotlinOptions {
            freeCompilerArgs = [
                    '-Xno-param-assertions',
                    '-Xno-call-assertions',
                    '-Xno-receiver-assertions'
            ]
        }
    }
对了, 有一点要注意, 每个依赖库都得写, 否则打包后依赖库的代码还是会有那段检查代码…

最后打包apk后 反编译查看, 再也没有发现Intrinsics.checkXXX 那一行’内鬼’代码了

最终效果图就不贴了

你可能感兴趣的:(Android安全)