前端时间一直想学动态调试APK应用,看了 idea ida 等各种乱起八糟的动态教程贴,自己测试断点一直不成功,而且调试过程中总安卓程序是一卡一卡的,只好放弃了,动态调试这东西无非就是下个断点,查看下相关变量的内容和信息;
以前都是用 反编译 --> 修改代码(加入log 输出代码) --> 正编译 打印信息的,但是问题又来了。 修改 smail 代码后经常性的出现各种错误,毕竟 smail 类似于 汇编代码,插入的位置不正确肯定容易出现各种错误。。经常性的需要再次转换成jar分析。
终于一次偶然的机会看到了 Xposed 框架,使用 Xposed 这货我们可以轻松的在不修改 APK 文件的基础上 HOOK 任意方法(不包括接口),查看相关的参数 返回值 并且 修改参数和返回值。
废话不多说来点干货。有人说我是个骗子(关于花椒源码贴) 那么我就以花椒为教程吧。
首先准备一个脱壳的花椒 apk;
我对花椒的 socket 长连接感兴趣,我想知道他是怎么加密和传输的;
这个时候我通过静态分析找到了 一个和 socket 加密有关的东东。
通过静态分析找到了上面这个加密的类。可惜完全被混淆了。我嗯 阅读一下这个类
那么我们现在就需要搞明白加密 传输的数据 和 和密钥了。
这里我们需要 HOOK 包 com.huajiao.comm.c 类 k 的 public byte[] b(byte[] arg2) 方法 和 private byte[] f(String arg9) 方法
现在我们开始编写 Xposed 模块
打开 adt 开发环境 并且新建一个安卓工程。
不创建界面
设置个图标 我的昵称228吧 认证一下
还是不创建界面
这个是工程文件结构图。
在manifest 文件中插入
这些都需要看一下xposed的开发入门教程。自己百度学习下。不是太复杂。
编辑好源码后,运行。
选中我们的模块 并软重启(模拟器) 手机的话要真重启
hook 失败了 看下错误日志 入口类名错误,xposed_init 写成大写的HOOK了 重新修改下在打包
恩看到了 了他们加密的钥匙和加密的内容了;
总结:
其实这个过程就是自己开发一个apk;
高级点的 你需要自己懂java反射原理 (入门级别不需要)
学的东西不是很多 就那么几个方法。。
动态调试我没搞成功过,可能自己技术不行。。
但是用xposed还是可以做到动态调试做不到的东西,比如修改成参数内容,返回结果。在高级点的直接在
xposed 调用其他对象方法 或者 so 都是没有问题的。
虽然我不知道动态调试什么什么样的体验 ,如果参数是一个List Map JSONobj 或者是 其他高级对象。估计动态调试很难解决。
但是用 xposed 完全可以自己写个迭代器去遍历这些对象包含的值。
最重要的是不需要去阅读 和 调试 Smail 源码 全过程都是 java 源码。
发表评论: