注:本文为“小米安全中心”原创,转载请联系“小米安全中心”

前言

xposed框架

xposed,主页:http://repo.xposed.info/module/de.robv.android.xposed.installer

是个开源的框架,在github上有源码的,直接下载apk后安装激活就可以使用,很多地方有这方面的教程,针对不同的手机架构,有大牛做了针对性的修改。可以在论坛中进行搜索

通过替换/system/bin/app_process程序控制zygote进程,使得app_process在启动过程中会加载XposedBridge.jar这个jar包,从而完成对Zygote进程及其创建的Dalvik虚拟机的劫持。

Xposed在开机的时候完成对所有的Hook Function的劫持,在原Function执行的前后加上自定义代码。

很多人将这个框架用在对android的私有化定制上面,其实在android安全测试方面这个框架提供了很大的便利,xposed主要是对方法的hook,在以往的重打包技术中,需要对smali代码的进行修改,修改起来比较麻烦。

利用xposed框架可以很容易的获取到android应用中的信息,比如加密私钥、salt值等等,不需要反编译获取密钥转换算法、不需要了解密钥保存机制,直接hook函数,获取输入输出就可以。

原理

在Android系统中,应用程序进程都是由Zygote进程孵化出来的,而Zygote进程是由Init进程启动的。Zygote进程在启动时会创建一个Dalvik虚拟机实例,每当它孵化一个新的应用程序进程时,都会将这个Dalvik虚拟机实例复制到新的应用程序进程里面去,从而使得每一个应用程序进程都有一个独立的Dalvik虚拟机实例。这也是Xposed选择替换app_process的原因。

Zygote进程在启动的过程中,除了会创建一个Dalvik虚拟机实例之外,还会将Java运行时库加载到进程中来,以及注册一些Android核心类的JNI方法来前面创建的Dalvik虚拟机实例中去。注意,一个应用程序进程被Zygote进程孵化出来的时候,不仅会获得Zygote进程中的Dalvik虚拟机实例拷贝,还会与Zygote一起共享Java运行时库。这也就是可以将XposedBridge这个jar包加载到每一个Android应用程序中的原因。XposedBridge有一个私有的Native(JNI)方法hookMethodNative,这个方法也在app_process中使用。这个函数提供一个方法对象利用Java的Reflection机制来对内置方法覆写。有能力的可以针对xposed的源码进行分析,不得不说,作者对于android的机制和java的了解已经相当深入了。

简单实例

很简单的一个android登入代码:

很简单的就是判断下用户输入的用户名和密码是正确,这里做个简单的演示,将用户输入的用户名和密码信息hook出来不管正确与否

简单说下xposed模块的开发,首先需要的是导入api,具体的可以参考:https://github.com/rovo89/XposedBridge/wiki/Using-the-Xposed-Framework-API

在manifest中定义

声明这个是xposed模块,名称为hook test 并且使用api版本号是82

下面创建运行时候的hook代码:

看代码中的注释,主要是三个方法的调用,handleLoadPackage,主要是获取到android包的相关信息,这里由于只是对logintest进行hook,做下简单的判断。

findAndHookMethod 是主要的hook入口,里面几个参数分别为包名,classloader,hook的函数名,参数类型(这个比较容易出错,比如list类型写为List.class),回调函数

回调函数中比较重要的:beforeHookedMethod和afterHookedMethod,一个是在函数运行前劫持掉,一个是hook后放行,实例中对用户输入的字段进行劫持打印,后面将参数之改为正确登入用户名和密码,这样在app中输入任何字符都能登入成功

frida Hook框架

Frida是一款基于python + javascript 的hook框架,通杀android\ios\linux\win\osx等各平台,由于是基于脚本的交互,因此相比xposed和substrace cydia更加便捷,本文重点介绍Frida在android下面的使用。

Frida的官网为:http://www.frida.re/

安装

安装Frida非常简单,在pc端直接执行

pip install frida

即可

在Android设备需要导入frida的服务端,需要root你的手机

运行

设备上运行frida-server:

电脑上运行adb forward tcp转发:

27042端口用于与frida-server通信,之后的每个端口对应每个注入的进程。

运行如下命令验证是否成功安装:

$ frida-ps-R

正常情况应该输出进程列表如下:

Hook模块的编写

hook的主要模块是js编写的,利用javascript的api与server进行通信

下面结合一个真实例子进行简单的介绍,首先是测试代码:

反编译获取app中的核心函数

对于上面的js代码,其实就是调用app中的某个函数,比如sign值生成函数,加密解密函数,不需要自己单独的去分析算法流程,分析key值在哪,直接调用app的相应函数,让app帮我们完成这些工作。

这里我们分析的app是友宝,这是一款饮料售货机,当时抓包看到提货的时候是只有个订单id的,猜想是不是遍历订单的id,支付成功但是没有取货的订单会不会响应请求,自己掉货出来。

下面对友宝的订单进行分析过程

1.抓取支付订单成功链接

分析:

sign是校验值,主要是防止订单伪造的,orderid是产生的支付订单id,这个主要是防止伪造用

2.反编译友宝app

找到morder/shipping所在的包为:com/ub/main/d/e.class

其中localStringBuffer存储的就是url中的参数信息,该请求查找到的代码在a()

生成签名的函数在com/ub/main/d/e.class中的b函数

最后加上sign值,发送请求

3.可以反编译出他的sign计算方法,也可以直接调用b函数来产生sign值,后来发现app会自动取时间戳,我们就不需要给他array型的参数

直接调用a函数,把orderId给他,让他直接return一个值出来就好了,就有了上面的js代码

4. 自动化的批量处理

看代码

构造了一个类,后面直接fuzz uid就可以了,提取里面的sign值拼接到post数据中去。

可以产生的post请求和抓到的数据包的请求是完全一样的,但是并没有测试成功,分析原因有可能是订单id和用户的id有所绑定。

不过学习到了怎样通过frida对app进行分析。

复杂参数的hook

如果遇到函数的参数类型是数组、map、ArrayList类型的,首先目标MyClass类的fun1函数,声明如下:

解决方法:

用Xposed自身提供的XposedHelpers的findClass方法加载每一个类,然后再将得到的类传递给hook函数作参数!

具体实现可参考链接,大牛讲的很清楚。

参考链接:

https://xianzhi.aliyun.com/forum/read/611.html

http://www.freebuf.com/articles/terminal/56453.html

http://bbs.pediy.com/showthread.php?t=202147&page=2

【注:本文为“小米安全中心”原创,作者: ECHO   小米安全中心入驻安全脉搏账号发布】

本文作者:小米SRC

android hook 第三方app_【MiSRC】技术分享-浅谈android hook技术相关推荐

  1. 计算机网络仿真技术概述,浅谈计算机网络仿真技术及其研究

    浅谈计算机网络仿真技术及其研究 来源:用户上传 作者: 摘要:在信息化和工业化相互促进的现代化进程中,计算机网络仿真技术将逐步深入到国民经济的各个领域,并将扮演越来越重要的角色.该文正是基于此背景,对 ...

  2. c语言 去掉双引号_技术分享|浅谈C语言陷阱和缺陷

    良好的软件架构.清晰的代码结构.掌握硬件.深入理解C语言是防错的要点,人的思维和经验积累对软件可靠性有很大影响.C语言诡异且有种种陷阱和缺陷,需要程序员多年历练才能达到较为完善的地步.软件的质量是由程 ...

  3. 技术分享 | 浅谈滴滴派单算法

    桔妹导读:说到滴滴的派单算法,大家可能感觉到既神秘又好奇,从出租车扬召到司机在滴滴平台抢单最后到平台派单,大家今天的出行体验已经发生了翻天覆地的变化,面对着每天数千万的呼叫,滴滴的派单算法一直在持续努 ...

  4. 技术分享| 浅谈IM 产品中的“缩略图”功能

    在 IM 产品中,发送图片是产品的一个基本功能,如何生成缩略图以及如何显示缩略图都是该模块的组成部分,本文就如何显示缩略图从产品设计的角度去阐述. 从产品上来确认该功能如何去设计,最稳妥的方式就是模仿 ...

  5. 技术分享 | 浅谈 MySQL 的临时表和临时文件

    作者:姚嵩 爱可生南区交付服务部经理,爱好音乐,动漫,电影,游戏,人文,美食,旅游,还有其他.虽然都很菜,但毕竟是爱好. 本文来源:原创投稿 *爱可生开源社区出品,原创内容未经授权不得随意使用,转载请 ...

  6. android 省电优化,如何延长续航时间 浅谈Android手机的省电机制

    Android手机的续航能力为何普遍偏低,如今各大手机品牌又有哪些"补救手段"?为了很多Android手机在开启节能模式后却收不到微信消息?这一切,还得从手机的省电机制谈起. 为何 ...

  7. 高通android逆向分析,浅谈Android高通(Qualcomm)和联发科(MTK)平台

    一款CPU好不好是要从多个方面考虑的,并不是说简简单单看一个主频.几个核心数就完了,更重要的是它的综合实力到底有多强,这里面当然也会牵扯到价格问题,性能相似当然是便宜的获胜,这是毋庸置疑的. 事实上, ...

  8. 浅谈Android保护技术__代码混淆

    浅谈Android保护技术__代码混淆 浅谈Android保护技术__代码混淆 代码混淆 代码混淆(Obfuscated code)亦称花指令,是将计算机程序的代码,转换成一种功能上等价,但是难于阅读 ...

  9. 浅谈Android SDK开发

    目录 浅谈Android SDK开发 SDK开发的原则 SDK设计 功能与职责边界设计 接口设计 兼容性设计 发布输出设计 SDK文档设计 SDK项目架构 组件化.模块化 统一资源管理 第三方依赖管理 ...

最新文章

  1. ArcGIS Server的配置
  2. python自学 知乎-学习Python的迷茫,如何高效有趣地学习Python?
  3. Android动态加载技术
  4. 如何在树莓派上进行python编程_《树莓派Python编程指南》怎么样_目录_pdf在线阅读 - 课课家教育...
  5. 设计模式:装饰模式(Decorator)
  6. 关于硕士研究生的几点思考
  7. kali linux解密栅栏密码,最详细bugku加密小白解法---持续更新!
  8. 三星Galaxy Fold入网:屏幕故障+数次跳票 热度还有多少?
  9. 前端图片点击按钮加载更多内容_前端开发规范
  10. yield关键字 C#
  11. 需求分析报告模板(免费)
  12. 2017 ACM-ICPC 亚洲区(西安赛区)网络赛 F Trig Function(切比雪夫多项式)
  13. 高一计算机算法教案,高中信息技术 算法及其实现 教案
  14. 能有效恢复已删除文件的 5 个免费数据恢复软件分享
  15. (附源码)计算机毕业设计SSM疫情下小区网格化管理系统
  16. 电源与地之间接电容的原因分析
  17. 成君忆 易中天 三国专家网上博斗
  18. 室内膨胀型防火涂料根据BS 476-21 耐火标准测定需要符合几项?
  19. 帆软 列表自动滚动脚本
  20. UML快速入门 1 为什么要用UML建模-建模的重要性

热门文章

  1. android 直播sdk 抖音,从零开始仿写一个抖音App——跨平台视频编辑SDK项目搭建
  2. 软件测试方法进行调优,一种大型软件测试方法
  3. android app套壳马甲开发,Android应用开发最佳实践:马甲包配置管理
  4. python文件批量改名
  5. 联邦学习首次被纳入Gartner隐私计算技术成熟度曲线
  6. 如何搭建属于自己的阿里云服务器
  7. sem竞价账户怎么提升效果提高转化
  8. 计算机基础在线网络课程,欢迎访问大学计算机基础网络课程
  9. 2020北京邮电大学计算机学院复试经验分享
  10. 大沱湾水电站拦河闸坝设计