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

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

2014-1-13 14:59
31583

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函数的源码


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

上传的附件:
收藏
免费 5
支持
分享
最新回复 (23)
雪    币: 458
活跃值: (306)
能力值: ( LV12,RANK:400 )
在线值:
发帖
回帖
粉丝
2
强帖留名。
2014-1-13 17:12
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
3
不错,可以参考
2014-1-15 09:31
0
雪    币: 160
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
mark
2014-1-16 12:46
0
雪    币: 546
活跃值: (1657)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
5
mark
2014-1-16 20:55
0
雪    币: 2323
活跃值: (4113)
能力值: ( LV12,RANK:530 )
在线值:
发帖
回帖
粉丝
6
mark
2014-1-16 23:52
0
雪    币: 1462
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
mark
2014-1-17 09:39
0
雪    币: 1839
活跃值: (295)
能力值: ( LV9,RANK:370 )
在线值:
发帖
回帖
粉丝
8
mark
2014-1-20 10:03
0
雪    币: 60
活跃值: (323)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
能给一下你加入单步调试的andbug的代码吗
2014-1-20 15:39
0
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
10
https://github.com/anbc/AndBug
2014-1-20 19:58
0
雪    币: 2210
活跃值: (12)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
11
强啊! 强贴留名!
2014-1-22 20:57
0
雪    币: 67
活跃值: (27)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
12
前排学习!!
2014-1-25 01:03
0
雪    币: 90
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
很强大的工具
2014-1-31 20:31
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
学习了,谢谢
2014-2-6 10:55
0
雪    币: 335
活跃值: (263)
能力值: ( LV2,RANK: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出来...
这是个比较严重的问题,希望楼主有空再扩展解决这个问题...
2014-2-10 18:10
0
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
16
感谢提新的功能,我会尽快增加相关功能,整体上说andbug还很不完善,各种功能在实际逆向分析中好多还不能形成闭环。希望大家都能加入进来一起完善相关功能。
2014-2-11 22:11
0
雪    币: 76
活跃值: (206)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
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:

这个问题有什么解决办法
2014-2-15 13:45
0
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
18
需要调一下代码。能把调试什么程序,设置哪个断点时遇到的这个情况,具体说一下吗?
2014-2-17 10:41
0
雪    币: 76
活跃值: (206)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
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:

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