首页/安卓逆向/ Xposed框架Hook及调试安卓APK算法分析

Xposed框架Hook及调试安卓APK算法分析

作者:神奇   分类:安卓逆向   时间:2018-04-30 18:49:39  标签:


前端时间一直想学动态调试APK应用,看了 idea ida 等各种乱起八糟的动态教程贴,自己测试断点一直不成功,而且调试过程中总安卓程序是一卡一卡的,只好放弃了,动态调试这东西无非就是下个断点,查看下相关变量的内容和信息;
     以前都是用 反编译 --> 修改代码(加入log 输出代码) --> 正编译 打印信息的,但是问题又来了。 修改 smail 代码后经常性的出现各种错误,毕竟 smail 类似于 汇编代码,插入的位置不正确肯定容易出现各种错误。。经常性的需要再次转换成jar分析。
     终于一次偶然的机会看到了 Xposed 框架,使用 Xposed 这货我们可以轻松的在不修改 APK 文件的基础上 HOOK 任意方法(不包括接口),查看相关的参数 返回值 并且 修改参数和返回值。
    
   废话不多说来点干货。有人说我是个骗子(关于花椒源码贴) 那么我就以花椒为教程吧。
   首先准备一个脱壳的花椒 apk;
    



我对花椒的 socket 长连接感兴趣,我想知道他是怎么加密和传输的;
这个时候我通过静态分析找到了 一个和 socket 加密有关的东东。

 
 
 
通过静态分析找到了上面这个加密的类。可惜完全被混淆了。我嗯 阅读一下这个类


看到这里,这是个RC4不会错了 即便不是 RC4 把这个类文件贴到java 或者翻译成易语言都不会太辛苦。

那么我们现在就需要搞明白加密 传输的数据 和 和密钥了。

这里我们需要 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 源码。


温馨提示如有转载或引用以上内容之必要,敬请将本文链接作为出处标注,谢谢合作!

评论:

发表评论:

code