1. 案例来源

https://github.com/OWASP/mastg/tree/master/Crackmes/Android

2. 分析过程

先安装APK,根据提示随便输入内容看一看,根据题目要求,生成的那一长串字符颜色是绿色才算成功。
alt text

拖进jadx看一下,在OnCreate函数里面发现反调试和Root检测。
alt text

定位到核心判断逻辑,核心函数为gXftm3iswpkVgBNDUp,这又是一个native函数。
alt text

用IDA打开so库,导出表没看到gXftm3iswpkVgBNDUp函数,估计是动态注册的,看到了很多的decode函数,位于init_array段中,估计是解密数据用的。
alt text

看一下JNI_OnLoad函数,很乱,上了OLLVM。
alt text

alt text

上D810处理一下JNI_OnLoad函数,修正一下类型,即可定位到关键的动态注册逻辑。函数详细信息的地址off_163018是动态解密的,准备调试获取。
alt text

alt text

先把Java代码里面的反调试和ROOT检测代码给删掉,准备接下来的调试。
alt text

断到函数注册的Call,看到函数信息,包括名称:gXftm3iswpkVgBNDUp,方法签名和地址。根据函数名称和方法签名([BB)[B,函数声明为:public native byte[] gXftm3iswpkVgBNDUp(byte[] arr, byte b);
alt text

alt text

转到函数地址,尝试反编译提示函数过大,且函数也上了OLLVM。
alt text

改一下配置上限,上D810,尝试反编译,反编译出了一个接近3W行代码的巨大怪物,修正一下参数类型。
alt text

alt text