首页
社区
课程
招聘
[原创]使用AndBug调试Android Java Bytecode
2011-10-27 18:49 75653

[原创]使用AndBug调试Android Java Bytecode

2011-10-27 18:49
75653
我们在开发android应用时,一般会使用eclipse来调试java代码。在有源代码的情况下,使用eclipse调试时很方便的。

但是当我们做android逆向时,显然不会有源代码,这时候如果想要调试目标java代码呢?
一种做法是:我们可以用反编译工具将apk编译成源代码,然后再编译回去,在某些情况下这种做法是有效的,但是并不是所有的apk都能成功编译成源代码的,即使编译成了源代码,再编译回去时也可能会产生很多错误。

这里向大家介绍一个有用的工具:AndBug,它可以在没有源代码的情况下,调试android上的java程序,并支持断点、call stack查看、查看class、method信息等。最重要的是,我们可以添加自己的脚本来加入我们所需要的功能,扩展这个工具。

AndBug的主页是:https://github.com/swdunlop/AndBug

安装AndBug

安装很简单,只要两步
1.        下载源代码
git clone https://github.com/swdunlop/AndBug.git
2.        编译
make
如果提示没有头文件,先安装python-dev


使用AndBug


假设有这样一个例子:
我们有一个apk,名字叫做HttpRequest.apk,它的界面包括一个按钮和一个文本框,当我们单击按钮的时候,程序会去访问一个固定的网页,并将页面的代码显示在文本框中,而这个网页的URL我们是不知道的,如下图所示,





现在我们的任务是要找出这个URL是什么(当然,对于这个简单的例子,我们通过抓包或者静态反编译都能解决这个问题)。

我们将通过AndBug来完成这个工作。

1.        首先在模拟器中启动apk,在命令行下输入 adb shell ps,找到相应的进程pid,在这个例子中pid是243





2.        进入AndBug目录,输入PYTHONPATH=lib ./andbug  shell  –p  243,不出意外的话就能attach上目标进程了




3.        我们可以在命令行中输入各种命令,输入”help”可以看到所有可用的命令,常用的命令有:

classes:  查看加载的class
Break:         下断点
suspend: 暂停进程
resume: 恢复进程运行

4. 我们应该在哪下断点呢?不要急,我们先看看这个apk用到了那些网络相关的类吧,输入:

classes    java.net




出现了一堆相关class,我们看到里面有java.net.URL,一般我们访问网络资源时,通常都会新建一个URL类,在这个类上下断点应该是合理的

5.        在java.net.URL类上下断点,输入
break java.net.URL




这条命令会对URL类中的所有方法下断点,如果只想断其中某一个方法,可以在参数后面加上方法名

6.        下面就是触发断点了,回到app界面,单击”get url”按钮




呵呵,断下来了! 看看堆栈,应该是在URL的init函数处断了下来
然后启动navi server,输入navi,可以看到server地址http://localhost:8080





7.        使用浏览器访问http://localhost:8080,神奇的一幕发生了,我们可以观察到当前线程的状态以及类成员变量,当然也包括我们关心的URL!




以上只是一个简单的功能,我们完全可以通过添加自己的脚本,将AndBug打造成一个android逆向的利器!

文中用到的apk在附件中

HttpRequest.apk

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

上传的附件:
收藏
点赞5
打赏
分享
最新回复 (45)
雪    币: 242
活跃值: (418)
能力值: ( LV11,RANK:188 )
在线值:
发帖
回帖
粉丝
XPoy 3 2011-10-27 23:14
2
0
好帅的帖子。不过android有专区啊 :)
雪    币: 61
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
qwoshiren 2011-10-28 17:45
3
0
你说的这个工具AndBug下不到啊,可否共享下,谢谢
雪    币: 19
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
nineB 2 2011-11-15 11:45
4
0
谢谢楼主分享,在调试时遇到个问题,向请教下

./andbug shell -p pid后,一直处于等待状态,无任何反应,不知道是什么原因,adb可以正常连接

ubuntu 11
雪    币: 19
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
nineB 2 2011-11-15 14:33
5
0
用真机可以了
雪    币: 488
活跃值: (185)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 6 2011-11-15 14:34
6
0
很有可能是调试端口被其他应用占了。建议关掉其他与调试设备连接的程序,实在不行重启试试。
adb的调试状态要关掉哦~
雪    币: 19
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
nineB 2 2011-11-15 15:06
7
0
在audbug中输入 navi提示不支持的命令,不知道是什么原因,如何启动这个navi server呢?还请楼主指点下,谢谢啦
雪    币: 19
活跃值: (40)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
nineB 2 2011-11-15 15:07
8
0
谢谢,换真机可以了,仿真器貌似不行,大侠说的adb调试状态是指?
雪    币: 488
活跃值: (185)
能力值: ( LV9,RANK:260 )
在线值:
发帖
回帖
粉丝
ZhWeir 6 2011-11-15 19:25
9
0
哦,不好意思,是我说得有问题。是DDMS的Debug状态要关掉。。。
雪    币: 11419
活跃值: (4158)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xie风腾 2011-11-15 20:30
10
0

好资料哟,学习了
雪    币: 576
活跃值: (1369)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
我是土匪 4 2011-11-16 11:11
11
0
好帖,占楼留名。高价出租此楼盘
雪    币: 146
活跃值: (1230)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
曹无咎 1 2012-2-25 19:06
12
0
古河兄,为什么在第二步PYTHONPATH=lib ./andbug  shell  –p  243(当然这里是我测试程序的ID)附加进程的时候出现
error [errno 13] permission denied这个错误
望指教!
雪    币: 146
活跃值: (1230)
能力值: ( LV6,RANK:80 )
在线值:
发帖
回帖
粉丝
曹无咎 1 2012-2-29 09:51
13
0
已搞定,多谢古河兄
雪    币: 164
活跃值: (53)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
qffhq 1 2012-3-10 14:05
14
0
看了command.py代码以后发现,是Python库的问题,修改代码后找到原因:

  File "./andbug", line 25, in main
    andbug.command.load_commands()
  File "/usr/src/AndBug/AndBug/lib/andbug/command.py", line 208, in load_commands
    __import__( name )
  File "/usr/src/AndBug/AndBug/lib/andbug/cmd/navi.py", line 17, in <module>
    raise andbug.DependencyError('navi requires the "bottle" package')
andbug.errors.DependencyError: navi requires the "bottle" package

在到navi.py中可以看到需要 bottle 库.
雪    币: 123
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wawt 2012-5-4 08:54
15
0
收藏下!得学习学习!
雪    币: 297
活跃值: (43)
能力值: ( LV3,RANK:25 )
在线值:
发帖
回帖
粉丝
tashika 2012-5-6 17:06
16
0
win上能用不... 用python2 还是3
雪    币: 504
活跃值: (10)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
crackdung 2012-5-7 12:26
17
0
我偏向靜態分析
雪    币: 162
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
upxshell 2012-5-9 18:50
18
0
好东西,学习了
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wuweizi 2012-6-7 17:10
19
0
有没有人做移植的?弄到win上比较大众化
雪    币: 335
活跃值: (233)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
peterchen 2012-7-18 15:41
20
0
抽空测试过个调试工具,发现比起smalidebug很多不足...
一不能单步调试
二只能中断核心api,无法任意中断
三由于无法头单步与只中断在核心api中,很难逆向找到逻辑判断关键

可能是针对http之类分析或短信这类分析(木马或病毒),找出http或smsto...
不过smalidebug,本人一直调试不通
雪    币: 118
活跃值: (106)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
pc小波 1 2012-7-18 17:32
21
0
木有安装成功的飘过
雪    币: 257
活跃值: (105)
能力值: ( LV8,RANK:130 )
在线值:
发帖
回帖
粉丝
舵手 3 2012-7-24 10:09
22
0
red hat 下俺也没安装成功
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hawks 2012-8-31 14:01
23
0
学习了
雪    币: 1
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
icejava 2012-10-15 21:38
24
0
请教楼主,win下能用么?
雪    币: 144
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
codexploit 2012-10-16 17:05
25
0
挺好的
就是有些疑问:
如果程序APK一点击某些代码就运行了,那不是断不到了?
能不能有step下去的调试呀?
游客
登录 | 注册 方可回帖
返回