首页
社区
课程
招聘
[原创]Android动态逆向分析工具(一)——Andbug之基本操作
2014-1-4 20:06 54427

[原创]Android动态逆向分析工具(一)——Andbug之基本操作

2014-1-4 20:06
54427
一、Andbug的基本操作

1、下载andbug
修改版本:
git clone https://github.com/anbc/AndBug.git
作者原版本:
git clone https://github.com/swdunlop/AndBug


2、对andbug的部分模块进行编译
在Andbug文件夹中使用make命令进行编译



3、对文件路径进行设置
在Andbug文件夹中的andbug文件中,以下修改,修改
sys.path.append(“”)中的路径,比如作者将Andbug下载到了“/home/anbc/test/test/Andbug/”路径中,将sys.path.append(“/home/anbc/test/test/Andbug/lib”)

[
4、启动虚拟机
emulator -avd Android_3


5、查看当前的进行信息


可以看到浏览器应用的进程id是920,包名是:com.android.browser

6、启动andbug
./andbug shell -p com.android.browser

Andbug 有两种启动方式,一种是以进程id方式启动,一种是以包名方式启动
通过进程id或者包名指定对某个apk进行调试。

如图:以包名方式启动,进入andbug的shell中


7、列举apk中的类信息
命令:classes
作用:列举出指定apk中使用的所有的Class信息,包括apk中自己实现的Class以及所调用的系统class信息


另外classes命令后边可以跟Class名称的信息,通过添加名称信息,可以列举出符合条件的class的信息。
如:classes app

如图,列举出所有类路径中包含了app字符串的类信息


8、列举指定类的方法信息
命令:methods android.app.NotificationManager
功能:列举出android.app.NotificationManager类中的所有方法信息


其中以 android.app.NotificationManager.from(Landroid/content/Context;)Landroid/ap
      p/NotificationManager; 为例。

android.app.NotificationManager——为类名
from——函数名
Landroid/content/Context;——from函数的参数类型
Landroid/app/NotificationManager;——from函数的返回值类型
9、断点操作
9.1 对类设置断点,所有设计该类的操作都会终止下来
break java.io.File


可以通过break-list命令查看断点设置情况


9.2 对方法进行断点设置
通过下面命令对函数进行中断
>> break java.io.File delete



9.3 断点触发的情况
设置断点后,操作apk程序,一旦程序出发了某个设置的断点,整个程序就会挂起,并显示相关信息。通过输出的信息可以知道,apk由于调用了java.io.File.exists()Z:0函数被中断下来。其他信息还包括整个调用java.io.File.exists()Z:0函数的堆栈信息。


9.4 删除已设置断点
通过break-remove 536870916
将之前设置的中断删除掉


另外:break-remove all表示删除所有当前设置的断点。
10、恢复运行
命令:resume
功能:触发断点整个进程暂停后,通过调用resume命令,继续运行该apk
注:由于代码中bug的原因,需要连续两次调用resume命令才能恢复apk的运行


如上图,执行两次resume命令后,恢复apk的运行,由于对整个java.io.File类设置了断点,应用又中断在java.io.File.<init>上。

11、进程暂停命令
命令:suspend
功能:暂停当前apk进程


由于还没有与该命令配合使用的命令,实际使用中没有太大作用

12、帮助命令help



13、class-trace 类跟踪命令
命令:class-trace java.io.File
功能:对 java.io.File类的调用情况进行跟踪
可以看到“thread <15> BackgroundHandler”线程,调用了“java.io.File.renameTo”,调用的参数是:
     -- this=Ljava/io/File; <830018592096>
     -- newPath=Ljava/io/File; <830016257352>
并且可以看到整个的堆栈调用的情况。



取消跟踪也可以使用break-remove命令实现。
14、method-trace 方法跟踪命令
命令:method-trace java.io.File renameTo
功能:对java.io.File renameTo函数进行跟踪,跟踪与直接设置断点的差别是,使用跟踪不中断目标进程的执行,只对相应函数的调用信息进行输出。


获取函数调用的跟踪信息


15、列举当前线程信息
命令:threads


16、对线程进行跟踪
命令:thread-trace
将main线程设置为跟踪县城,所有main县城相关的调用都会被跟踪下来,如图所示:


会列出函数调用的情况,参数,以及堆栈情况。
17、显示指定类中的静态变量的信息
命令:statics com.android.internal.view.menu.MenuBuilder


18、查看对象信息
通过class-trace命令可以跟踪到目标函数中对象的Id信息,


通过对象的Id使用inspect命令,可以查处该队形的详细信息。


由于在break命令设置断点后,触发断点时反馈的信息,没有包含Object Id的信息,导致inspect命令用起来不是很方便。

19、源码关联命令
命令:source 与源代码关联起来,可以是smali代码。
命令:dump 展示指定方法的代码。
20、Web输出命令
命令:navi
注:为了支持navi命令,需要安**ottle库。

需要bottle库。应该是一个web展示的页面
需要安**ottle库,来实现。

21、退出命令
命令:exit





[培训]《安卓高级研修班(网课)》月薪三万计划,掌 握调试、分析还原ollvm、vmp的方法,定制art虚拟机自动化脱壳的方法

上传的附件:
收藏
点赞1
打赏
分享
最新回复 (26)
雪    币: 6031
活跃值: (3950)
能力值: ( LV7,RANK:110 )
在线值:
发帖
回帖
粉丝
pxhb 2 2014-1-4 20:53
2
0
感谢分享,看看好用不
雪    币: 2902
活跃值: (1627)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
chixiaojie 2014-1-4 22:02
3
0
图片不支持外链,全部显示你查看的图片来自网易相册。
雪    币: 33
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
jfaumt 2014-1-4 22:13
4
0
图上看不到呀
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-1-5 09:49
5
0
根据大家的反馈重新上传了图片,现在能看到不
雪    币: 1413
活跃值: (401)
能力值: (RANK:270 )
在线值:
发帖
回帖
粉丝
Claud 6 2014-1-5 13:06
6
0
可以看到了~
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
万抽抽 2 2014-1-5 20:23
7
0
楼主,为什么我启动andbug -p 来加载APK的时候会报错呢?adb 运行是正常的,报错如下:
上传的附件:
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-1-6 11:50
8
0
是否是在通过eclipse等工具在调试链接模拟器,多个客户端同时链接模拟器会报错。
稍后我整理一个常见错误的文档。
雪    币: 130
活跃值: (34)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
yuletianxi 2014-1-6 16:43
9
0
navi会提示缺少一个bottle的模版.叫做simple template,所以试图在web上查看内存变量信息的时候会提示错误,一直未能解决.这个叫做simple template的东东到处找不到.下了好几个版本的bottle就是没有这个叫做simple template的template.试图修改andbug使用其他template也没有成功..
雪    币: 29
活跃值: (499)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
万抽抽 2 2014-1-6 22:59
10
0
谢谢楼主,那等你的文档啊!
雪    币: 146
活跃值: (1215)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
曹无咎 1 2014-1-8 11:39
11
0
andbug之前古河兄发过,挺好用的但是有局限
雪    币: 53
活跃值: (260)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
netsniffer 2014-1-8 11:46
12
0
eclipse里建立java project,把framework java sources按照包路径copy到src下,直接remote java attach方式调试ddms里选中的应用进程,源码中设好断点,一样的效果
编不过,把framework.jar、core.jar、ext.jar添加到工程java library中
如果framework源码和机器里的jar一致,还可以单步,比这效果好
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-1-8 14:17
13
0
确实功能上有很多限制,不过还是想听听“曹无咎”的看法,你觉的局限行主要在哪些方面呢?
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2014-1-8 14:19
14
0
求分享详细教程
雪    币: 131
活跃值: (153)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
川美 2015-3-14 21:50
15
0
非常详细,不错,期待更多的介绍及应用
雪    币: 3
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiiiiao 2015-7-13 11:30
16
0
楼住,我拿来调试微博和微信都出现了这样的问题,请问该如何解决

!! [Errno 104] Connection reset by peer
Traceback (most recent call last):
  File "./andbug", line 49, in main
    andbug.command.run_command(args)
  File "/home/xiao/AndBug/lib/andbug/command.py", line 266, in run_command
    return ctxt.perform(args[0], args[1:])
  File "/home/xiao/AndBug/lib/andbug/command.py", line 189, in perform
    if act.proc: self.connect()
  File "/home/xiao/AndBug/lib/andbug/command.py", line 65, in connect
    self.sess = andbug.vm.connect(self.pid, self.dev)
  File "/home/xiao/AndBug/lib/andbug/vm.py", line 1856, in connect
    conn = andbug.proto.connect(andbug.proto.forward(pid, dev))  #conn是Connection(Thread)类型的一个对象
  File "/home/xiao/AndBug/lib/andbug/proto.py", line 113, in connect
    p.start()
  File "/home/xiao/AndBug/lib/andbug/proto.py", line 319, in start
    self.readHandshake()
  File "/home/xiao/AndBug/lib/andbug/proto.py", line 182, in readHandshake
    data = self.read(len(HANDSHAKE_MSG))
  File "/home/xiao/AndBug/lib/andbug/proto.py", line 149, in read
    pkt = self._read(sz)  #返回值是读到的数据
  File "/home/xiao/AndBug/lib/andbug/proto.py", line 94, in read
    pkt = conn.recv(req)
error: [Errno 104] Connection reset by peer
雪    币: 48
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cooldpj 2015-9-14 14:42
17
0
santoku@santoku-virtual-machine:~/AndBug$ ./andbug classes -p com.android.browser
!! EOF
Traceback (most recent call last):
  File "./andbug", line 49, in main
    andbug.command.run_command(args)
  File "/home/santoku/AndBug/lib/andbug/command.py", line 266, in run_command
    return ctxt.perform(args[0], args[1:])
  File "/home/santoku/AndBug/lib/andbug/command.py", line 189, in perform
    if act.proc: self.connect()
  File "/home/santoku/AndBug/lib/andbug/command.py", line 65, in connect
    self.sess = andbug.vm.connect(self.pid, self.dev)
  File "/home/santoku/AndBug/lib/andbug/vm.py", line 1856, in connect
    conn = andbug.proto.connect(andbug.proto.forward(pid, dev))  #conn是Connection(Thread)类型的一个对象
  File "/home/santoku/AndBug/lib/andbug/proto.py", line 113, in connect
    p.start()
  File "/home/santoku/AndBug/lib/andbug/proto.py", line 319, in start
    self.readHandshake()
  File "/home/santoku/AndBug/lib/andbug/proto.py", line 182, in readHandshake
    data = self.read(len(HANDSHAKE_MSG))
  File "/home/santoku/AndBug/lib/andbug/proto.py", line 149, in read
    pkt = self._read(sz)  #返回值是读到的数据
  File "/home/santoku/AndBug/lib/andbug/proto.py", line 95, in read
    if not pkt: raise EOF()
EOF: EOF
楼主,遇到这个问题了。
雪    币: 48
活跃值: (16)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
cooldpj 2015-9-14 15:02
18
0
[QUOTE=万抽抽;1252942]楼主,为什么我启动andbug -p 来加载APK的时候会报错呢?adb 运行是正常的,报错如下:[/QUOTE]

通过eclipse等工具在调试链接模拟器会提示报错,你通过adb -avd Android_1命令启动就不会遇到这个问题了。
雪    币: 334
活跃值: (92)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
岭南散人 1 2015-11-18 10:50
19
0
楼主为什么不更新了,发现装上这个工具根本不能用啊
雪    币: 259
活跃值: (63)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
anbc 3 2016-3-2 10:08
20
0
@独行孤客 抱歉精力实在不够呀
@cooldpj 后面的《常见问题篇》有相关解释
雪    币: 1
活跃值: (11)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wuyangbo 2016-3-11 14:18
21
0
那要是做了限制无法反编译成smali代码呢?
雪    币: 1
活跃值: (127)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
吴思泉 2017-8-3 17:55
23
0
学习了..
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wx_y. 2017-9-15 17:15
24
0
./andbug  shell  -p  com.android.browser      执行这句报错      could  not  find  "adb"  from  the  Android  SDK  in  your  PATH
      求楼主解释一下
雪    币: 244
活跃值: (25)
能力值: ( LV2,RANK:15 )
在线值:
发帖
回帖
粉丝
bitian 2018-2-24 14:08
25
1
需要安装adb
游客
登录 | 注册 方可回帖
返回