404nofound 发表于 2021-9-18 16:05

安卓逆向: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)

ZLJ13697750126 发表于 2021-9-19 14:52

支持,赞一个

weizhuqiang 发表于 2021-9-20 06:46

支持,赞一个

ongp1347 发表于 2021-9-20 07:40

反汇编和调试都做得很好 适合初学者 给楼主{:1_921:}

GuiXiaoQi 发表于 2021-9-20 08:24

66666666

graceful-leo 发表于 2021-9-20 09:43

这个太厉害了,没看懂

o0蜗牛 发表于 2021-9-22 09:10

还是没懂,知道这样做,不知道为什么这样做

andyhah 发表于 2021-10-20 15:28

把AD() nop后,输入字符点击按钮,就退出app,这是so文件损坏了吗

l3gacy 发表于 2021-10-20 15:52

学习下IDA的使用

ttt111222 发表于 2021-10-29 17:47

赞一个!!!
页: [1] 2
查看完整版本: 安卓逆向:Crakeme01实战分析 IDA动态静态分析