Quantcast
Channel: 看雪安全论坛
Viewing all articles
Browse latest Browse all 9556

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

$
0
0
一、Andbug的基本操作


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

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

附件 86225


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

[附件 86226
4、启动虚拟机
emulator -avd Android_3
附件 86228

5、查看当前的进行信息
附件 86229

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

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

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

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

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

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

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

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

其中以 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
附件 86235

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

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

附件 86237


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

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

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

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

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

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


12、帮助命令help

附件 86243

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>
并且可以看到整个的堆栈调用的情况。

附件 86244

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

获取函数调用的跟踪信息
附件 86246

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

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

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

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

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

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

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

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

21、退出命令
命令:exit

附件 86252

上传的图像
文件类型: png 图片2.png (237.2 KB)
文件类型: png 图片3.png (129.1 KB)
文件类型: png 图片1_副本.png (114.1 KB)
文件类型: png 图片4_副本.png (63.2 KB)
文件类型: png 图片5_副本.png (175.6 KB)
文件类型: png 图片6_副本.png (239.7 KB)
文件类型: png 图片7_副本.png (52.1 KB)
文件类型: png 图片8_副本.png (233.1 KB)
文件类型: png 图片9_副本.png (272.7 KB)
文件类型: png 图片10_副本.png (206.6 KB)
文件类型: png 图片11_副本.png (28.1 KB)
文件类型: png 图片12_副本.png (19.1 KB)
文件类型: png 图片13_副本.png (53.4 KB)
文件类型: png 图片15_副本.png (408.5 KB)
文件类型: png 图片16_副本.png (56.5 KB)
文件类型: png 图片17_副本.png (281.6 KB)
文件类型: png 图片18_副本.png (44.6 KB)
文件类型: png 图片19_副本.png (330.8 KB)
文件类型: png 图片20_副本.png (387.8 KB)
文件类型: png 图片21_副本.png (84.9 KB)
文件类型: png 图片22_副本.png (141.0 KB)
文件类型: png 图片23_副本.png (96.7 KB)
文件类型: png 图片24_副本.png (313.1 KB)
文件类型: png 图片25_副本.png (68.1 KB)
文件类型: png 图片26_副本.png (186.1 KB)
文件类型: png 图片27_副本.png (128.3 KB)
文件类型: png 图片28_副本.png (13.2 KB)

Viewing all articles
Browse latest Browse all 9556

Trending Articles



<script src="https://jsc.adskeeper.com/r/s/rssing.com.1596347.js" async> </script>