安卓逆向:Crakeme01实战分析 IDA动态静态分析
本帖最后由 404nofound 于 2021-9-18 16:08 编辑# 一、APK下载
#### Crakeme01:(https://github.com/404nofoundx/Cloud/blob/main/Crakeme01.apk)
![在这里插入图片描述](https://img-blog.csdnimg.cn/9cd0f2cf0fd641d5bb59104e348d1ae6.png)
# 二、jadx分析java代码
根据AndroidManifest.xml找到程序入口
![在这里插入图片描述](https://img-blog.csdnimg.cn/2dfe9d1334d249ba88a6a5c18d32cf71.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
第一眼看到的System.loadLibrary(),就知道有NDK开发SO了,首先判断输入是否是空,非空的话调用
NI.greywolf(this, this.editText.getText().toString());,而greywolf是
![在这里插入图片描述](https://img-blog.csdnimg.cn/7d79426b5c954bc48173186936d53b36.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)![在这里插入图片描述](https://img-blog.csdnimg.cn/dd4c8174d5e24b2495c7db85a2792c4a.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
# 三、IDA静态分析
上来一看,发现没有java_开头,敲定是动态注册,直接看伪代码。
![在这里插入图片描述](https://img-blog.csdnimg.cn/58c0b2f2442147889d469bcbf9aff187.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
跟进去AD()看下,发现里面全是各种反调试,动态调试的时候直接nop掉就ok。
![在这里插入图片描述](https://img-blog.csdnimg.cn/16f73c50ced44347a5b0067b5c8c5494.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
# 四、IDA动态调试
在JNI_OnLoad开头下断点,nop掉反调试的部分。
![在这里插入图片描述](https://img-blog.csdnimg.cn/a44525b37cc84002a0c5a787317e1c3c.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
JNI_OnLoad有三个函数,找最后一个的函数就是RegisterNatives,然后找RegisterNatives中的第三个参数,里面包含着对应关系。
![在这里插入图片描述](https://img-blog.csdnimg.cn/cd074a6032fb4e2bb1693f4aa14b9aa9.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)![在这里插入图片描述](https://img-blog.csdnimg.cn/663a54cf257b4f20989435e478126ca8.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
跟进去按C,找到个bc函数。
![在这里插入图片描述](https://img-blog.csdnimg.cn/01917746c91f470b99fc797589d03241.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
在静态分析中找到bc,分析逻辑,dh主要做的是调试检测,如果没有被反调试,则return 1,否则kill 然后再return 0,ds这个函数猜测是加解密用的,flag没准就是v4的返回值,动态调试试一下。
![在这里插入图片描述](https://img-blog.csdnimg.cn/e8474d9ea7dd4f11843c256f2ee7f432.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
ds函数打断点,对照静态调试的伪代码,找到指令,BLX后的返回值推测是flag,查看R0寄存器。
![在这里插入图片描述](https://img-blog.csdnimg.cn/bbfc673ca99b437dae831e684ab2444d.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_20,color_FFFFFF,t_70,g_se,x_16)
找到flag=hello5.1,还不算难.jpg。
![在这里插入图片描述](https://img-blog.csdnimg.cn/74e41265e2364a1e9993a86a9b88a4c5.png?x-oss-process=image/watermark,type_ZHJvaWRzYW5zZmFsbGJhY2s,shadow_50,text_Q1NETiBANDA0Tm9vRm91bmQ=,size_16,color_FFFFFF,t_70,g_se,x_16) 支持,赞一个 支持,赞一个 反汇编和调试都做得很好 适合初学者 给楼主{:1_921:} 66666666 这个太厉害了,没看懂 还是没懂,知道这样做,不知道为什么这样做 把AD() nop后,输入字符点击按钮,就退出app,这是so文件损坏了吗 学习下IDA的使用 赞一个!!!
页:
[1]
2