IDA Pro动态调试APP中SO(详细版本)

4 篇文章 2 订阅
4 篇文章 0 订阅

0x01 前言

一直想学习一下IDA PRO的动态调试,这样在逆向APP的时候,如果遇到突然的中断就可以一步一步调试,发现问题所在。但苦于模拟器坑太多,网上大多调试都只到jdb联通,至于后面的怎样定位到关键点,如何下断点,以及如何修改内存keypatch,大多都是零零散散的,写这篇文章也是首次进行动态调试SO成功,到关键点下断点,并修改相关内存指令得到想要的结果后的记录。笔者是小白入门,若本文有不正确的地方,欢迎大佬指正。

0x02 环境准备

  • Pixel 2 真机一部(需要root后的真机,如果不是真机,则使用jdb的时候可能会报jdb错误)
  • IDA PRO (逆向软件)
  • Android Studio (需要使用到里面的monitor做转发,当然也可以自己转发)
  • java 8 (java8 自带jdb,最新版本java没有jdb了,所以如果找不到jdb可以手动进行安装)
  • Native开发的APP一个 (逆向对象)

0x03 IDA PRO连接调试应用

(1)在IDA Pro的安装路径dbgsrv目录下找到android_server (android_server需要用ida.exe连接,用于调试32位程序,android_server64需要用ida64.exe链接,用于调试64位程序,笔者的程序so需要用64位的ida调试,所以下面的将用ida64.exe和android_server64用作演示)
请添加图片描述
(2)将android_server64放入真机的/data/local/tmp路径下并赋权,以root身份运行,运行命令即截图如下

adb push android_server /data/local/tmp 
su
cd /data/local/tmp
chmod 755 android_server64
./android_server64

请添加图片描述(3)转发端口

adb forward tcp:23946 tcp:23946  

请添加图片描述(4)启动monitor,启动要调试的应用(被调试应用的Androidmanifest.xml文件中需要有debuggable=“true”,或者手机的ro.debuggable=1即所有应用可调试,否则无法进入调试模式),输入命令后可以看到monitor中对应app的包名旁边有个红色的小虫子,而且手机商进入了等待调试界面。

adb shell am start -D -n com.example.nativeapp/com.example.nativeapp.MainActivity

请添加图片描述(5)代开IDA PRO 32bit,进行附加进程
请添加图片描述请添加图片描述上一步点击ok后会弹出附加进程选择的框,里面有很多进程,可以用快捷键ctrl+F 进行搜索,然后选择自己要调试的进程,点击ok即可

请添加图片描述出现以下界面表示IDA PRO已经连接上了,但是此时还无法调试,需要用jdb让程序继续运行
请添加图片描述(6)打开DDMS查看端口号
请添加图片描述(7)使用jdb进行附加,附加成功后可以看到ddms上的小虫会变成绿色

jdb -connect com.sun.jdi.SocketAttach:port=8600,hostname=localhost

请添加图片描述如果报无法附加到VM,如下图,多半是用了模拟器,可以尝试下用真机。
请添加图片描述至此IDA PRO已经成功连接到调试应用了,可以开始进行应用的调试了。

0x04 IDA PRO动态调试SO

IDA连接上被调试应用后就可以开始调试了,可以按上方工具栏中的绿色按钮,或者快捷键F9,让程序继续执行,让APP继续运行起来。然后关注下方output窗口的输出,可以查看自己需要调试的SO是否被加载
请添加图片描述比如运行到这儿,可以看到加载了我们app的so文件,如果我们需要在它运行前进行修改(例如绕过一些反调试,否则等函数运行起来后会自动终端我们的调试),那么此时就可以进入so,开始下断点,然后步调试。但是我们此次只需要修改程序运行时的返回结果,完全可以等他加载完后慢慢分析,所以我们可以不停的F9,直至程序全部加载完。
请添加图片描述当上方的按钮变为灰色时候,表示程序已经完全加载了,可以看到手机界面,app的主界面也被加载出来。
请添加图片描述现在我们可以边调试边运行程序了,比如我现在需要输入sn,点击提交,可以看到程序运行,返回failed。(在输入sn的时候,点击屏幕可能会没反应,这个时候可以回到ida界面看看运行按钮是否变为绿色,表示有程序运行,按下F9继续运行即可,然后就可以正常输入了)
请添加图片描述由于提交的逻辑写在SO里,所以我们要查看SO,并修改SO的逻辑,使得我们输入错误的SN也能返回SO。可以在IDA右边的侧边栏Moudles窗口找到进行搜索,找到我们需要分析的so
请添加图片描述双击SO,会弹出该函数的函数列表,可在函数列表中找到对应 逻辑的函数checkSN,双击后左侧会跳至对应的so文件部分
请添加图片描述可使用F5查看伪代码,原本这儿可以修改a1的类型为JNIEnv* ,函数可以更加直观,动态调试的时候没法,可以再开一个窗口静态分析SO,梳理逻辑,此处由于篇幅,就不作详细说明了。根据分析逻辑后,可以判断出,该函数的校验逻辑为判断输入的值是否等于123456,因此我们修改的点可以在判断这儿。
请添加图片描述光标点击==符号,然后按Tab键跳转到汇编语言,在CSET处用快捷键F2下断点,然后继续运行程序,程序会到断点处停住,此时可以F8单步调试,通过网上查询发现CSET的功能为: CSET W0, EQ ; if (cond == true) W0 = 1, else W0 = 0。(操作符如下:相等(EQ)、不等(NE)、小于(LT)、大于(GT)、小于或等于(LE)、大于或等于(GE))
请添加图片描述我们要将错误的返回为正确的,所以此处需要把相等,改为不等,点击下方HEX View窗口,右键把PC窗口的16进制同步过来准备修改
请添加图片描述同步后可以看到 CSET W0, EQ对应的16进制为E0179F1A,现在我们需要把它修改为 CSET W0, NE
请添加图片描述通过在线网页arm转化可查询到 CSET W0, NE的16进制码为E0079F1A
请添加图片描述我们只需要修改第二组数17为07即可,单击Hex View窗口中对应的16进制数,按F2进入编辑模式,将17改为07后,按F2进行保存,即可看到对应的命令变为CSET W0, NE
请添加图片描述继续运行程序,即可看到,应用成功返回success
请添加图片描述

0x05 结语

IDA PRO动态调试还有很多内容,目前只是很简单的一部分,还在挖掘中,若需要调试程序可以评论我找我要,后续如果有时间会放到github上。(创作不易,如果觉得对你有帮助的话点个关注或者赞吧~)

  • 6
    点赞
  • 17
    收藏
    觉得还不错? 一键收藏
  • 5
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 5
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值