安卓动态调试

开篇

之前工作内容不涉及安卓调试,所以对安卓的测试并不了解。但是最近工作关于安卓的调试越来越多,需要用到动态调试技术,刚好这里就整理下最近所了解到关于安卓动态调试的测试方法。

动态调试的主要的几种方式

1.Android Studio对smali代码进行动态调试,AS工具动态调试smail代码需要安装smalidea工具。
2.Eclipse对java代码进行动态调试,Eclipse不能识别smali代码,所以需要将smali代码转换成java代码进行调试,之前学习说Eclipse不太方便,但是现在在做的项目会方便很多,看来世间无觉得。
3.IDA pro对dex,so的动态调试,dex是可以通过静态附加来进行动态调试的,但是IDA pro对变量类型支持不太友好,所以能用idea还是idea吧,IDA pro主要用于so调试,脱壳,dump数据等
4.JEB动态调试,自从JEB2.2开始已经支持动态调试,并且是无缝调试,可以从java层跟踪到native层,并可以正常返回到java层,非常强大,最新版本同时支持了amd64调试,只是买不起。
5.GDB动态调试,本人暂时对这个没啥研究,略过。
本篇主要记录前面3种动态调试方法,记录方式流程,方便自己查阅

Smalidea+AndroidStudio动态调试安卓APP

既然我们要用AndroidStudio动态调试smali代码,第一步就是将apk反编译成smali文件然后到入AndroidStudio中。将apk反编译成smali文件 我这里使用的Android crack tool,也可以使用其他反编译工具。
直接将apk文件拖入工具中,点击反编译apk,然后点击执行,查看当前目录下就得到了smali文件夹


反编译apk.png

接着就可以将反编译出来文文件导入AndroidStudio中,
File---New--Import Project.


导入工程.png

然后将smali文件夹设置成Sources Root
sources root.png

之前说AndroidStudio不支持直接调试smali代码,所有还需要安装ideasmali插件。可以百度搜索下载,这里需要将插件导入到AS中。这里选择从硬盘中安装插件,然后重启AS,环境安装就基本完成了。
导入插件.jpg

开始调试

打开AndroidMainfest.xml首先将android:debugganble的值修改为true,不然的话没法进行调试,现在调试的这个例子中默认是有这句代码的,有的apk中没有这句代码要自行添加上。然后需要记住包名和入口的Activity名。图中都已经圈起来了。

开启debug.png

用数据线连接手机,并将要调试的apk安装到手机上,手机需要开启USB调试模式。
安装apk 可以使用命令 adb install xxx.apk
安装完成后,可以使用命令行
adb shell am start -D -n packagename/android:name
[am命令参考](https://blog.csdn.net/xiezechang/article/details/8528446)对apk进行动态调试,这条命令运行后屏幕将会进入到调试模式(如果手机没有进入到调试模式的话可能是手机USB没有连接上,活着USB调试模式没有打开,或者是其他原因)
调试模式.png

等待调试,然后在AndroidStudio中添加配置。
run-edit-configurations中添加配置 点击+选择remote填写name选择本地端口
添加配置.png

然后通过adb shell 查看运行的程序在哪个端口,然后进行端口转发
adb forword tcp:8700 jdwp:4597
转发端口.png

配置好JDK,在Project Structure选择合适版本的jdk
配置jdk.png

在smali代码中下好断点,就能在程序运行到这个地方的时候断下来
下断点.png

断点1.png

这里设置的断点在输入用户名和密码的位置,当程序运行到输入用户名密码时,点击登陆城西会自动停在这一步
断点2.png

可以看到watches中的寄存器的值,可以点击修改参数,点击下一步既可以进行尝试,可以尝试在更多的地方下断点,用以分析程序的逻辑。
断点3.png

使用eclipse进行动态调试

背景介绍

整个项目的需求是这样的,项目对整个APP都进行了数据包加密,直接抓包只能看见加密后的报文,而我们的工作就是对这个APP进行渗透测试,所以想法就是我们需要将断点下在加密函数之前,这样就可以看到没加密的报文,然后对报文数据进行修改测试。
加密后的数据包如图:


加密.png

调试前准备

和上面调试方法一样application标签中需要含有android:debuggable="true"这句代码,没有这句代码是不鞥调试apk的。现在调试的这个例子默认是有这句代码的,有的apk中没有这句代码要自行添加上,还有在入口点的类的onCreate中添加如下代码等待调试如waitForDebuggable()函数这些操作,是做任何调试都需要的。

我们都知道Eclipse调试的是java代码,但是apktool反编译出来的代码是smali代码,而不是java代码,那我们如何才能得到java代码呢?apktool的d操作有哥-d参数,是debug,也就是说反编译出来的代码是做调试用的,加上-d参数后反编译出来的代码就能被eclipse识别,具体的命令
java -jar apktool.jar d -d xxx.apk(这里生成一个文件)
正常反编译出来的文件

正常反编译.png

加-d后的反编译过程
反编译过程.png

加-d后反编译出来的文件
加参数反编译.png

这里虽然变成了java文件,但是内容还是和smali文件一样的
改完重新打包也要加-d参数 java -jar apktool.jar b -d /apk;(这里会重新生成一个apk文件),在签名后才能正常安装。

开始调试

1.导入工程


导入工程.png

2.下断点
假设我们事先知道加密函数的位置,断点下在加密函数之前
3.连接手机
把需要调试的apk安装到测试手机中,并用数据线连接手机,打开USB调试模式。
4.启动应用


启动应用.png

这里可以看到应用有个红色的小虫子的标志,这里带包此应用可以被调试;
图片 1.png

因为在入口处设置了waitForDebuggable()函数,所以在启动的时候会进入调试模式。

调试应用

回到eclipse,找到小虫子的图标,进入Debug Configuration。
双击进入Remote Java Application Project记得要设置成当前应调试的项目


配置.png

其中connect有两种连接方式一种是Listner,另外一种是Attach方式,这里简单介绍下这两种连接方式
Listner方式:是调试客户端启动就准备好一个端口,当调试服务端准备好了就直接连接这个端口进行调试
Attach方式:是调试服务端启动就准备好一个端口,当调试客户端来连接这个端口。
我们在该配置中选择Attach。然后我们设置Host和port Host因为是本地调试,所以我们设置成localhost,port的话要看


端口.png

这里还有JDWP县城,可以看到上图的8631的这个数字,当前应用使用的就是这个端口,点一下就可以看到8631/8700,所以也可以设置8700为调试端口。如果系统同时存在两个或者两个以上的调试程序的话,设置8700就不知道调试哪个端口了。设置完成后,就可以开始调试应用了

结语

针对加密的情况因为断点下在了加密函数运行之前,所以我们能在拦截的参数中看到没有加密的参数,eclipse中支持参数修改,这是我们修改参数,运行。查看返回的数据包是同样的,在返回的数据包,也即是return中下断点,就能看到从服务端反回来的没有加密的数据。这次的调试是在已知加密点的情况下进行。

最后编辑于
©著作权归作者所有,转载或内容合作请联系作者
  • 序言:七十年代末,一起剥皮案震惊了整个滨河市,随后出现的几起案子,更是在滨河造成了极大的恐慌,老刑警刘岩,带你破解...
    沈念sama阅读 205,386评论 6 479
  • 序言:滨河连续发生了三起死亡事件,死亡现场离奇诡异,居然都是意外死亡,警方通过查阅死者的电脑和手机,发现死者居然都...
    沈念sama阅读 87,939评论 2 381
  • 文/潘晓璐 我一进店门,熙熙楼的掌柜王于贵愁眉苦脸地迎上来,“玉大人,你说我怎么就摊上这事。” “怎么了?”我有些...
    开封第一讲书人阅读 151,851评论 0 341
  • 文/不坏的土叔 我叫张陵,是天一观的道长。 经常有香客问我,道长,这世上最难降的妖魔是什么? 我笑而不...
    开封第一讲书人阅读 54,953评论 1 278
  • 正文 为了忘掉前任,我火速办了婚礼,结果婚礼上,老公的妹妹穿的比我还像新娘。我一直安慰自己,他们只是感情好,可当我...
    茶点故事阅读 63,971评论 5 369
  • 文/花漫 我一把揭开白布。 她就那样静静地躺着,像睡着了一般。 火红的嫁衣衬着肌肤如雪。 梳的纹丝不乱的头发上,一...
    开封第一讲书人阅读 48,784评论 1 283
  • 那天,我揣着相机与录音,去河边找鬼。 笑死,一个胖子当着我的面吹牛,可吹牛的内容都是我干的。 我是一名探鬼主播,决...
    沈念sama阅读 38,126评论 3 399
  • 文/苍兰香墨 我猛地睁开眼,长吁一口气:“原来是场噩梦啊……” “哼!你这毒妇竟也来了?” 一声冷哼从身侧响起,我...
    开封第一讲书人阅读 36,765评论 0 258
  • 序言:老挝万荣一对情侣失踪,失踪者是张志新(化名)和其女友刘颖,没想到半个月后,有当地人在树林里发现了一具尸体,经...
    沈念sama阅读 43,148评论 1 300
  • 正文 独居荒郊野岭守林人离奇死亡,尸身上长有42处带血的脓包…… 初始之章·张勋 以下内容为张勋视角 年9月15日...
    茶点故事阅读 35,744评论 2 323
  • 正文 我和宋清朗相恋三年,在试婚纱的时候发现自己被绿了。 大学时的朋友给我发了我未婚夫和他白月光在一起吃饭的照片。...
    茶点故事阅读 37,858评论 1 333
  • 序言:一个原本活蹦乱跳的男人离奇死亡,死状恐怖,灵堂内的尸体忽然破棺而出,到底是诈尸还是另有隐情,我是刑警宁泽,带...
    沈念sama阅读 33,479评论 4 322
  • 正文 年R本政府宣布,位于F岛的核电站,受9级特大地震影响,放射性物质发生泄漏。R本人自食恶果不足惜,却给世界环境...
    茶点故事阅读 39,080评论 3 307
  • 文/蒙蒙 一、第九天 我趴在偏房一处隐蔽的房顶上张望。 院中可真热闹,春花似锦、人声如沸。这庄子的主人今日做“春日...
    开封第一讲书人阅读 30,053评论 0 19
  • 文/苍兰香墨 我抬头看了看天上的太阳。三九已至,却和暖如春,着一层夹袄步出监牢的瞬间,已是汗流浃背。 一阵脚步声响...
    开封第一讲书人阅读 31,278评论 1 260
  • 我被黑心中介骗来泰国打工, 没想到刚下飞机就差点儿被人妖公主榨干…… 1. 我叫王不留,地道东北人。 一个月前我还...
    沈念sama阅读 45,245评论 2 352
  • 正文 我出身青楼,却偏偏与公主长得像,于是被迫代替她去往敌国和亲。 传闻我的和亲对象是个残疾皇子,可洞房花烛夜当晚...
    茶点故事阅读 42,590评论 2 343

推荐阅读更多精彩内容