ddms工具使用以及案例
ddms的主要用途,就是查看app的各种输出,尤其是日志的输出和方法剖析
工具准备
环境配置连接:https://blog.youkuaiyun.com/tianyi19/article/details/115335951
用到的apk
链接:https://pan.baidu.com/s/1rAONbtafSYos-IKHddQw2w
提取码:emrc
启动ddms
ddms是在sdk中的,一般情况下我们已经将platform-tools
和tools
目录添加到环境变量
所以只需要在cmd中输入ddms即可
等待启动,启动完成界面如下
空空如也
我们来启动一个模拟器试试,看看ddms有什么变化
车x了去广告
先看第一个例子,现在app为了盈利,很多时候都会加入广告,但是好烦人的,怎么去掉呢?
车x了广告如下
查看ddms输出
模拟器上app打开,观察ddms输出
添加过滤器
但是你发现好多输出啊,不知道哪个是车x了的输出,怎么搞?
添加过滤器,只看车x了的输出
点击车x了过滤器,这样我们看到的,就只有车x了的输出了
发现广告
清空日志,重新打开app,观察输出
你发现了关键字,广告!!!
这说明啥,但是这个到底是不是车x了首页的广告呢?其实我也不知道,毕竟逆向就是这,一半是基础,一半是靠蒙
提取一下url
右击日志->filter similar messages
弹出框选择关键链接,因为后面的可能都是参数
替换广告链接
然后该怎么做呢?将所有这个链接换成127.0.0.1试一下,假装还是正常访问,不过已经失效了
换成127.0.0.1表示这还是个正常的链接,只不过是无响应而已,如果换成空字符串或者其他,可能就不是无响应,直接是大异常,app可能会直接崩溃
替换完成, 重新回编译
再次安装app,然后运行,观察ddms,发现无法读取url,失效了!
并且app也没广告了
好x小说插桩和栈跟踪
什么是插桩
插桩本质就是Java的输出日志,
但是我们都知道,向jadx-gui等反编译工具,虽然可以将apk逆向成Java代码
但是那都是伪Java代码,是根据smail翻译过来的,并且伪Java代码是不能修改的
但是smail是可以修改的
所以插桩就是用smial来完成log输出,来验证自己的猜想知否正确
开始插桩
必须使用上述链接配置的AK(Android Killer)和jadx-gui
apk拖入AK中,找到入口函数,也就是onCreate
方法
在.prologue
代码之后,进行插桩
如果是安装上述链接配置的AK,右击会有插入代码->Log信息输出
插入位置图如图所示
其实就是这两行,调用了Log而已
插桩内容尽量只能是英文或者中文转unicode码,可以利用AK快速完成转换
回编译在jadx中看看Java代码,插桩其实就是log而已
保存,回编译,安装到模拟器
在ddms中添加一个过滤器,就可以看到自己插入的日志了
可能出现的问题
插桩是会失败的
比如,寄存器位0个
如果.locals
为0,把.locals
改为1即可,或者更多
方法栈跟踪
栈跟踪和插桩类似,插桩的本质是log,栈跟踪的本质就是报异常
都知道,不管是什么语言,报异常的时候,都会有引发一系列提示,最终定位到某一个自己代码触发的异常
所以栈跟踪理论来说可以更好的理清逻辑
插入栈跟踪
在入口函数插入栈跟踪,不过这次不是在onCreate
,在loadData
函数下插入
本质就是这几行代码,触发异常
回编译一下,在jadx中看一下
如果栈跟踪能触发,那就说明执行流程应该是onCreate()->loadData()->栈跟踪信息
真的是这样子吗?
ddms中看一下吧
Tag为System.err
的就是栈信息,如果没有,可能需要卸载重装
确实如此,不过逻辑是从下往上看的,跟jadx图调用关系一样
方法剖析
还是好x小说这个app,我们打开登录这个页面
在我的里面
我点击了这个立即登录,究竟触发了哪些方法呢?
注意:玩方法剖析手要快!,因为打印的东西太多
点击ok后,去模拟器点击登录
然后还是去点击刚才那个按钮
然后等一会会自动弹出一个东西,如图所示
可以发现就那一会,就有2800个方法,所以一定快
还是上述的操作,再来一遍,发现有132个,所以操作一定要快
ps:子节点(Children)就是将要去调用的节点
点击登录触发的是onclick方法
,搜索一下
一般也是从下往上找
根据分析,点击立即登录按钮,应该触发的是这个类的onClick
但是到底点击登录触发的是不是这个类呢?
在jadx中找一下这个类
在AK中这个位置插桩
回编译app,在ddms中看一下,通过插桩来验证一下逻辑是否正确
点击立即登录按钮,触发日志,可以确定,位置没找错