首页
论坛
专栏
课程
3

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

anbc 2014-1-13 14:59 25728
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函数的源码



快讯:[看雪招聘]十八年来,看雪平台输出了大量安全人才,影响三代安全人才!

上传的附件:
最新回复 (23)
Speeday 2014-1-13 17:12
2
强帖留名。
fosom 2014-1-15 09:31
3
不错,可以参考
hackboylyq 2014-1-16 12:46
4
mark
我是土匪 2014-1-16 20:55
5
mark
熊猫正正 2014-1-16 23:52
6
mark
woaisnow 2014-1-17 09:39
7
mark
fosom 2014-1-20 10:03
8
mark
daliands 2014-1-20 15:39
9
能给一下你加入单步调试的andbug的代码吗
anbc 2014-1-20 19:58
10
https://github.com/anbc/AndBug
断空 2014-1-22 20:57
11
强啊! 强贴留名!
小龙程序 2014-1-25 01:03
12
前排学习!!
pojiemyie 2014-1-31 20:31
13
很强大的工具
DONGZH 2014-2-6 10:55
14
学习了,谢谢
peterchen 2014-2-10 18:10
15
其中代码“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出来...
这是个比较严重的问题,希望楼主有空再扩展解决这个问题...
anbc 2014-2-11 22:11
16
感谢提新的功能,我会尽快增加相关功能,整体上说andbug还很不完善,各种功能在实际逆向分析中好多还不能形成闭环。希望大家都能加入进来一起完善相关功能。
LOVEZ 2014-2-15 13:45
17
## 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:

这个问题有什么解决办法
anbc 2014-2-17 10:41
18
需要调一下代码。能把调试什么程序,设置哪个断点时遇到的这个情况,具体说一下吗?
LOVEZ 2014-2-17 16:06
19
>> 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:

这是调试步骤及程序。。。  谢谢
上传的附件:
kitty 2014-3-18 05:08
20
学习了,谢谢
testfish 2014-4-24 22:28
21
mark....
testfish 2014-4-30 09:31
22
同求!
楼主能否把您用的vm.py单独发出来
xj_kx 2014-8-29 15:03
23
谢谢 好强大 我去找找看
无名诸葛 2014-9-1 10:58
24
还是希望增加smali代码级的调试
同时 希望可以增加界面的啊亲
具体参考eclipse调试smali
netbeans 调试 smali
jswat调试java
不过某种程度上还是不如andbug强大
期待ing
返回