首页
社区
课程
招聘
[原创]Android动态逆向分析工具(四)—— Andbug补充调试功能
2014-1-13 14:59 30789

[原创]Android动态逆向分析工具(四)—— Andbug补充调试功能

2014-1-13 14:59
30789
Android动态逆向分析工具(四)——
                             Andbug补充调试功能
  新增了函数内设置断点,已经单步调试相关的功能。
在函数内部设置断点
1.1、定位要分析的函数
通过classes和methods命令,定位到要分析的函数,这里以com.example.test.MainActivity为例,可以对该函数的入口设置断点。



1.2、查看函数部的代码分布情况
  通过break com.example.test.MainActivity onCreate show 命令可以看到函数内各代码的



与之对应的源代码为:



其中代码“super.onCreate(savedInstanceState);”位于第24行,onCreate函数的最后一个大括号位于46行。
通过show我们可以得知,onCreate中的代码分别位于第24、25、27、29、31、46行。
这里支持以源代码代码行粒度的断点设置,还不支持以dilvik汇编指令粒度的进行断点设置。

1.3、设置函数内的断点
如图所示,分别在27、24、25行设置了断点。



设置断点如下图所示,每个断点中的,0、8、0、3是指设置断点位置相对与函数入口点,davlik汇编指令的偏移位置。



注:目前暂时不支持,以dalvik汇编指令粒度的断点设置

1.4、断点的出发
对函数com.example.test.MainActivity.test中的65行处设置断点,出发后如图所示。



单步调试功能
该部分代码为FreedomCoder实现,但一直没有被swdunlop 合并进主干,为实习下面功能,作者将FreedomCoder的部分代码合并进了作者的git代码。
2.1 运行应用,并将应用停在设定位置
如下图所示:
加载调试目标,并分别在test函数的入口和65行代码处设置断点。
点击实际上的某个按钮,触发test函数,apk运行中断在test函数入口处。



2.2、step over功能
执行下一步指令,使用命令:step over命令。
如下图分别与行了第51行和52行的代码。
命令的全称是“stepover”,缩写是“s”



2.3、step into功能
  进入子函数的单步执行命令“stepinto”,缩写为“si”
  由于本例中,该代码处,不是一个函数调用,所以执行效果等同于“step over”


单步执行后,代码停到了53行处。

2.4、stepout功能
通过该功能可以实现,从当前函数中跳出来,停止在其父函数位置。



其父函数是“com.example.test.MainActivity$1.onClick”

下面为test函数的源码


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (23)
雪    币: 456
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
Speeday 8 2014-1-13 17:12
2
0
强帖留名。
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 8 2014-1-15 09:31
3
0
不错,可以参考
雪    币: 160
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hackboylyq 2014-1-16 12:46
4
0
mark
雪    币: 576
活跃值: (1359)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 4 2014-1-16 20:55
5
0
mark
雪    币: 2321
活跃值: (4028)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
熊猫正正 9 2014-1-16 23:52
6
0
mark
雪    币: 1462
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
woaisnow 2014-1-17 09:39
7
0
mark
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
fosom 8 2014-1-20 10:03
8
0
mark
雪    币: 75
活跃值: (73)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
daliands 2014-1-20 15:39
9
0
能给一下你加入单步调试的andbug的代码吗
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-1-20 19:58
10
0
https://github.com/anbc/AndBug
雪    币: 2210
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
断空 1 2014-1-22 20:57
11
0
强啊! 强贴留名!
雪    币: 67
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
小龙程序 2014-1-25 01:03
12
0
前排学习!!
雪    币: 90
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pojiemyie 2014-1-31 20:31
13
0
很强大的工具
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
DONGZH 2014-2-6 10:55
14
0
学习了,谢谢
雪    币: 335
活跃值: (208)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peterchen 2014-2-10 18:10
15
0
其中代码“super.onCreate(savedInstanceState);”位于第24行,onCreate函数的最后一个大括号位于46行。
通过show我们可以得知,onCreate中的代码分别位于第24、25、27、29、31、46行。
这里支持以源代码代码行粒度的断点设置,还不支持以dalvik汇编指令粒度的进行断点设置。

1.3、设置函数内的断点
如图所示,分别在27、24、25行设置了断点。
扩展功能不错,不过不支持dalvik行断点。好像失去了非源码调试效果?当然一行可以通过line知道是哪行,是没有处理过apk如果处理就没有smali的line出来...
这是个比较严重的问题,希望楼主有空再扩展解决这个问题...
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-2-11 22:11
16
0
感谢提新的功能,我会尽快增加相关功能,整体上说andbug还很不完善,各种功能在实际逆向分析中好多还不能形成闭环。希望大家都能加入进来一起完善相关功能。
雪    币: 74
活跃值: (166)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
LOVEZ 2014-2-15 13:45
17
0
## Step Over
## AttributeError: 'Session' object has no attribute 'getSuspendState'

   -- File "/usr/local/lib/python2.7/dist-a/andbug/command.py", line 152,
      in perform
      act(self, *args, **kwargs)
   -- File "/usr/local/lib/python2.7/dist-a/andbug/cmd/step.py", line 77,
      in stepover
      if ctxt.sess.getSuspendState().isSuspend:

这个问题有什么解决办法
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-2-17 10:41
18
0
需要调一下代码。能把调试什么程序,设置哪个断点时遇到的这个情况,具体说一下吗?
雪    币: 74
活跃值: (166)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
LOVEZ 2014-2-17 16:06
19
0
>> methods com.example.phone.MainActivity
## Methods Lcom/example/phone/MainActivity;
   -- com.example.phone.MainActivity.<init>()V
   -- com.example.phone.MainActivity.onCreate(Landroid/os/Bundle;)V
   -- com.example.phone.MainActivity.onCreateOptionsMenu(Landroid/view/Menu;)Z
   -- com.example.phone.MainActivity.onSMS()V
   -- com.example.phone.MainActivity.onTel()V
>> break com.example.phone.MainActivity onTel show
## Setting Hooks
   -- [50, 51, 52, 53]
>> break com.example.phone.MainActivity onTel 50
## Setting Hooks
   -- Hooked <536870912> com.example.phone.MainActivity.onTel()V:0 <class
      'andbug.vm.Location'>
>> ## Breakpoint hit in thread <1> main    (running suspended), process suspended.
   -- com.example.phone.MainActivity.onTel()V:0
   -- com.example.phone.MainActivity$onClickButtonListener.onClick(Landroid/view
      /View;)V:14
   -- android.view.View.performClick()Z:14
   -- android.view.View$PerformClick.run()V:2
   -- android.os.Handler.handleCallback(Landroid/os/Message;)V:2
   -- android.os.Handler.dispatchMessage(Landroid/os/Message;)V:4
   -- android.os.Looper.loop()V:82
   -- android.app.ActivityThread.main([Ljava/lang/String;)V:31
   -- java.lang.reflect.Method.invokeNative(Ljava/lang/Object;[Ljava/lang/Object
      ;Ljava/lang/Class;[Ljava/lang/Class;Ljava/lang/Class;IZ)Ljava/lang/Object;
      <native>
   -- java.lang.reflect.Method.invoke(Ljava/lang/Object;[Ljava/lang/Object;)Ljav
      a/lang/Object;:18
s
## Step Over
## AttributeError: 'Session' object has no attribute 'getSuspendState'

   -- File "/home/ubuntu/tools/AndBug-master/lib/andbug/command.py", line 191,
      in perform
      act(self, *args, **kwargs)
   -- File "/home/ubuntu/tools/AndBug-master/lib/andbug/cmd/step.py", line 77,
      in stepover
      if ctxt.sess.getSuspendState().isSuspend:
>> s
## Step Over
## AttributeError: 'Session' object has no attribute 'getSuspendState'

   -- File "/home/ubuntu/tools/AndBug-master/lib/andbug/command.py", line 191,
      in perform
      act(self, *args, **kwargs)
   -- File "/home/ubuntu/tools/AndBug-master/lib/andbug/cmd/step.py", line 77,
      in stepover
      if ctxt.sess.getSuspendState().isSuspend:

这是调试步骤及程序。。。  谢谢
上传的附件:
雪    币: 93
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
kitty 2014-3-18 05:08
20
0
学习了,谢谢
雪    币: 186
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
testfish 2014-4-24 22:28
21
0
mark....
雪    币: 186
活跃值: (135)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
testfish 2014-4-30 09:31
22
0
同求!
楼主能否把您用的vm.py单独发出来
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xj_kx 2014-8-29 15:03
23
0
谢谢 好强大 我去找找看
雪    币: 110
活跃值: (189)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
无名诸葛 2014-9-1 10:58
24
0
还是希望增加smali代码级的调试
同时 希望可以增加界面的啊亲
具体参考eclipse调试smali
netbeans 调试 smali
jswat调试java
不过某种程度上还是不如andbug强大
期待ing
游客
登录 | 注册 方可回帖
返回