admin管理员组

文章数量:1616697

参考:
https://www.52pojie/thread-742686-1-1.html

https://www.pianshen/article/6759779793

本文基本为https://www.52pojie/thread-742686-1-1.html的复述,可能带一些个人心得感悟,建议没看过原文的先看原文。
我使用的ida版本为爱盘的ida7.0,手机为小米cc9e安卓10未root,调试的应用为原文附的crackme。
手机是arm64

目录

  • 静态分析
  • 动态分析
    • 准备工作
      • android_server
      • adb命令
      • ida连接
    • 开始调试
      • 查看so内函数
      • 分析,下断点
  • 修改内存

静态分析

因为主要是想动态调试,静态就不多做介绍了,打开apk里的libJniTest.so,左侧找到这个函数进去,f5变为c代码,可以看到有三个字符串比较,第一个是签名校验,第二个是输入的用户名对比,第三个是输入的密码对比。
如果签名不对直接退出程序。
如果输入的用户名或者密码不对都会弹出登录失败,否则弹出登录成功。
(这个ida中文字符串不显示但是我也懒得折腾了。)

动态分析

动态调试就是在应用运行的时候边运行边调试,想做到动态调试就要借助adb、android_sesrver将ida与手机连接起来。先安装好要调试的apk(即原文中附的crackme)

准备工作

android_server

将android_server放到手机目录下并运行。如果你有root权限那么就好说了,不过像我这种没有root的,也有办法解决——就需要用到android studio。
首先手机数据线连上电脑,手机弹出连接选项选传输文件,手机设置开发者选项开启usb调试(待会如果手机弹出是否允许调试,选一律允许就行)。
然后安装android studio并打开,点开右下角的device file explorer


显示的应该是根目录,找到data/data目录下调试用的apk的包名,右键-Upload,然后选择ida目录下的android_server文件

正常没有root的手机是没有把文件传到根目录的权限的,但是借助android studio就可以。
为什么一定要传到待调试应用的包名下?因为adb有个命令run-as+应用包名 ,可以获取应用数据,但仅限这个应用。
run-as还有一个要求,apk的AndroidManifest.xml文件中debuggable应该为“true”,待调试的apk已经是true了无需修改,如果修改了那么签名会变,待会调试的时候记得也要给签名下断点。

adb命令

现在就来用adb运行android_server。
打开cmd,输入adb shell,连上手机。

输入 run-as demo2.jni.myapplication,获取该包名下的数据

输入chmod 777 android_server将文件权限改为777
输入./android_server 运行

新打开一个cmd,输入adb forward tcp:23946 tcp:23946

ida连接

新打开一个ida,选择debugger-attach-remote armlinux/android debugger
填好hostname和port,点ok


出现当前正在运行的应用的包名,这里只有待调试应用的包名,其他应用没权限获取不到。选择这个应用。
如果没有出现这个包名,说明你没有打开这个应用,关掉这个页面,打开应用之后再attach一次。

进入调试界面

开始调试

查看so内函数

刚才静态分析查看的是libJniTest.so文件里的函数,所以我们去右侧modules中ctrl f 搜索找到这个so,双击进入找到那个函数

分析,下断点

双击进入函数,f5反编译,发现strcmp没识别出来,没关系,我们记住他就行

回到IDA View-PC,鼠标点一下这个没识别出来的strcmp,,相同的strcmp都会变黄,然后右键text view,给变黄的函数前面加上断点
如图。上面还有一个检测签名的字符串比较,如果没动过apk那个不用下断点。

修改内存

到目前为止,手机上的应用应该是卡住的。点击debugger中的continue process就可以正常运行了。然后输入用户名,密码,点击登录。
点击登录之后应该会卡住,然后看我们的ida,停在strcmp这一步

按f8单步执行,到下一步ldr,我们可以看到再下一步就是cbz,cbz R0, loc_C31B7F40百度一下就知道是R0寄存器为0的时候跳转。
还是转换到graphic view看吧

图中可以很明显看出,如果跳转的话,会跳到左边,进行密码的比较,那么右侧的就应该是显示登陆失败了。
所以我们是希望它跳转的,也就是希望R0寄存器为0.
那么现在r0是多少呢,在ida右上角General registers查看寄存器R0的值,可以看到是1。右键r0,点zero value,将其强制置为0.

再按f8单步执行,可以看到已经跳转到左侧。

按f9执行到下一个断点,再f8下一步,看到是cbnz,这个就是不为0才跳转。
虽然中文字符串没显示出来,但是也能看到刚才如果用户名比较不对,会跳到右侧,右侧函数连着下面的右侧,也就是下面右侧是显示 登录失败,那么也就是说我们这次不希望它跳转,希望r0还是0.

再看一下r0,还是1,那么再zero value一下,然后按f9继续往下执行,这时候看看手机上的应用,就会弹出登录成功的提示。
结束=-=

本文标签: 动态教我兄弟文件手机