首页
社区
课程
招聘
[原创]-------------IDA调试 android so文件的10个技巧
发表于: 2017-10-17 20:02 28004

[原创]-------------IDA调试 android so文件的10个技巧

2017-10-17 20:02
28004

1、使用模拟器调试可能经常遇到异常,然后就进行不下去了,最好换成手机。


2、即使用手机时,也可能会遇到异常造成单步或RUN卡死在一条指令上的问题。这样可以手动的执行这条指令,然后将PC指针设置成为下一条指令位置,开始执行。


3、IDA多线程调试方法

      在IDA中如果已经启动了多个线程,并且设置在多个线程设置断点后,此时单步执行时,经常会线程乱跳,造成调试非常不方便。可以采用的方法是比如当前从主线程跳到某个其他线程,在主线程下一条指令设置断点,然后在线程窗口中将主线程supend,这时就不会再跳回到主线程了。如果想回到主线程,RUN后就会断点之前设置的断点。

4、IDA调试界面配置保存

      配置好的调试界面,可以通过如下方法保存起来:点击windows—>save destop..,下次启动后直接点击windows—>load destop..即可。


5、arm指令集分为arm指令和thumb指令等,在IDA中对于一个函数或地址判断是否是ARM还是thrumb看调用的地址是否为奇数,如果为奇数则为thrumb指令,如果是4字节对齐则为ARM指令。

将代码设置为thumb指令方法如下,按alt+G,然后让value=1 为thumb指令,= 0为arm指令。




6、出现异常,经常手动bypass, 可以采用下面方法,一劳永逸:


7、如何定位到执行so文件的init或init_array函数

1)从手机或虚拟机中pull出来linker

2)搜索字符串” [ Calling %s @ %p for '%s' ]”,见下图:



3)查找引用此字符串的地址:


4)到sub_271C处,见下图 :


8 如何定位到jni_load

     a) 如果SO文件被处理了,可能是找不到的

     b) 如果对应jni_onload被加密了,直接设置断点,会引起解密失败

2) 从手机或虚拟机中pull出来libdvm.so

3) 查找函数dvmLoadNativeCode

见下图:



[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 1
支持
分享
最新回复 (54)
雪    币: 2141
活跃值: (7226)
能力值: ( LV11,RANK:180 )
在线值:
发帖
回帖
粉丝
2
2017-10-17 20:14
0
雪    币: 144
活跃值: (178)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
多来点这样的菜,不错
2017-10-17 20:56
0
雪    币: 2
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
很实用,回头分享下dex文件头,导入ida  调试起来更方便
2017-10-17 22:30
0
雪    币: 7012
活跃值: (4222)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
不错,  感谢  分享
2017-10-17 22:59
0
雪    币: 4687
活跃值: (253)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
还不错,调试中比较常见的问题,mark
2017-10-18 09:19
0
雪    币: 220
活跃值: (18)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
7
非常实用
2017-10-18 09:59
0
雪    币: 341
活跃值: (143)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
8
详细收藏
2017-10-18 10:39
0
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
很详细,收藏了
2017-10-18 13:19
0
雪    币: 30
活跃值: (760)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
10
佩服楼主,  能学习  还能总结归纳
2017-10-18 15:06
0
雪    币: 6575
活跃值: (4531)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
11
收藏一份备用
2017-10-18 15:11
0
雪    币: 6818
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
不错!
2017-10-18 21:45
0
雪    币: 111
活跃值: (67)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
13
厉害!
2017-10-19 09:06
0
雪    币: 1144
活跃值: (1274)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
厉害了
2017-10-19 15:05
0
雪    币: 4005
活跃值: (2193)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
15
感谢分享
2017-10-20 09:00
0
雪    币: 3757
活跃值: (1757)
能力值: ( LV12,RANK:420 )
在线值:
发帖
回帖
粉丝
16
楼主你好,我有个问题
如果手机使用的是ART加载,没有libdvm,那么应该使用哪个下函数下断?
如果要换系统进行调试的话,应该是刷到哪个版本的系统才有dvm?
2017-10-20 15:28
0
雪    币: 206
活跃值: (108)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
17
总结的好详细,mark
2017-10-20 16:55
0
雪    币: 1260
活跃值: (2168)
能力值: ( LV5,RANK:75 )
在线值:
发帖
回帖
粉丝
18
不错!
2017-10-23 09:39
0
雪    币: 596
活跃值: (2995)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
不错
2017-10-23 16:01
0
雪    币: 268
活跃值: (630)
能力值: ( LV3,RANK:35 )
在线值:
发帖
回帖
粉丝
20
2017-10-24 09:44
0
雪    币: 11
活跃值: (80)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
赞一个
2017-10-24 10:18
0
雪    币: 19097
活跃值: (1345)
能力值: ( LV15,RANK:936 )
在线值:
发帖
回帖
粉丝
22
梦野间 楼主你好,我有个问题 如果手机使用的是ART加载,没有libdvm,那么应该使用哪个下函数下断? 如果要换系统进行调试的话,应该是刷到哪个版本的系统才有dvm?
          对于art模式(以5.1源码为例)对应函数为:

                   





      在libart.so中查找函数 LoadNativeLibrary:、

                     

                    BLX   R7  就是调用 SO文件的jni_onload函数位置。
2017-10-24 13:43
0
雪    币: 260
活跃值: (29)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
23
不错,    感谢分享,收藏了。
2017-10-24 14:15
0
雪    币: 249
活跃值: (72)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
24
m
2017-10-24 18:52
0
雪    币: 562
活跃值: (4347)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
25
不错啊,其实就是对照着源码来~
2017-10-25 15:52
0
游客
登录 | 注册 方可回帖
返回
//