Android逆向之hook框架Frida:Frida的环境搭建及入门实战

作者原文传送
littleywww.littley.top

简介

Frida是一款基于python + javascript 的hook框架,可运行在android ios linux windows osx等各平台,主要使用动态二进制插桩技术;由于是基于脚本(javascript)的交互,因此相比xposed和substrace cydia更加便捷
官网址址:https://frida.re/
github地址:https://github.com/frida/frida

配置环境需求

  1. python使用版本python3.7:https://www.python.org/
  2. mumu android模拟器:http://mumu.163.com/baidu/
  3. adb驱动:https://adb.clockworkmod.com/
  4. jadx-gui(apk反编译):http://www.pc6.com/softview/SoftView_579787.html
  5. apkhelper v3.0(应用包名等查看):http://www.pc6.com/softview/SoftView_472196.html
  6. vscode编辑器(主要用于源码分析):https://code.visualstudio.com/
  7. windows10 64位
  8. nice app(实战使用的app):https://www.wandoujia.com/apps/2604261

环境配置

Frida的安装很简单,需要在windows安装frida客户端和在安卓安装frida服务端。

windows安装frida客户端:

pip install frida-tools
pip install frida   

Android 安装frida服务端

下载 : https://github.com/frida/frida/releases相应的版本
我用的是mumu模拟器所以下载的是frida-server-12.8.6-android-x86.xz
在这里插入图片描述在这里插入图片描述时间 20220228 添加备注 cpu架构abi查看
在adb shell 中执行
getprop |grep cpu
时间 20220228 添加备注 cpu架构abi查看
下载后解压(主意下载是压缩包,要解压一下)
在这里插入图片描述
使用adb连接mumu模拟器(注意打开root权限及usb调试模式)

adb connect 127.0.0.1:7555

关闭指令为

adb disconnect 127.0.0.1:7555

将上面的解压得到的文件传送至模拟器上到/data/local/tmp 目录,并命名为frida-server

adb push frida-server-12.8.6-android-x86 /data/local/tmp/frida-server

进入adb shell并设置frida-server的权限

在这里插入图片描述

使用./frida-server启动服务

之后另外开启一个命令窗口运行命令:frida-ps -U(查看运行的进程)

在这里插入图片描述出现上图说明服务起成功

最后将手机端的端口转发到PC端进行通信
adb forward tcp:27042 tcp:27042

adb forward tcp:27043 tcp:27043

反编译nice app,找到hook点

使用jdax-gui工具打开nice-main-5.4.29-release.apk(反编译时间过长,耐心等待…),反编译完点击jdax-gui的File—> Save as gradle project将源码保存在本地,并使用vscode打开
本次实战hook点是使用已有账登录,输入账号密码后,点登录获取账号密码信息
在这里插入图片描述在这里插入图片描述Fiddler代理设置请自行百度

通过Fiddlert查看,每获次登录的请求响应如下
在这里插入图片描述由上图片得出请求路径:/account/login

分析源码

vscode中全文搜索/account/login
在bil.java中a方法中找到
在这里插入图片描述
在这里插入图片描述
由此得见,我们从a方法就是我们的hook点,a方法的参数jsonObject str即是我们要获取的内容

编写脚本

import frida
import sys

# hook逻辑脚本
jscode = """
Java.perform(function () {
//获取bli类型,使用js将其包状成代理对象
  var bil = Java.use('bil');


  var function_a = bil.a;
  //重写方法a
  function_a.overload("org.json.JSONObject","java.lang.String").implementation = function (obj,str) {
    // Show a message to know that the function got called
    send('function_a');
	 send('obj'+obj);
	 send('str'+str);
    // Call the original onClick handler
    //调用实际的a方法(即包装之前的a方法,类似于装饰器工能)
 return    this.a( obj,str);
  };
});
"""

# 注入进程,attach传入进程名称(字符串)或者进程号(整数)
rdev = frida.get_remote_device()
session = rdev.attach("com.nice.main")
script = session.create_script(jscode)
#int()函数把字符串表示的16进制数转换成整数
#上面的jscode % int(sys.argv[1], 16)是python格式化字符串的语法

# 接收脚本信息的回调函数
# message是一个对象,type属性为send则表示send函数发送的信息,其内容在payload里
# 下面这个on_message函数可以做固定用法,一般无需改动,当然也可直接打印message看看里边的内容
def on_message(message, data):
    if message['type'] == 'send':
        print(message['payload'])
    elif message['type'] == 'error':
        print(message['stack'])
# 应该是设置message事件的回调函数
script.on('message', on_message)
# 加载hook脚本
script.load()
# 保持主线程不结束(也可以使用time.sleep循环)
sys.stdin.read()

#在反编译的文件中有些类没有包名如:
在这里插入图片描述package defpackage;说明没有包名,在使用Java.use();方法时
直接使用类名就可以了如Java.use(‘bil’);

参考:https://blog.csdn.net/chifu5720/article/details/102861359

运程脚本

运行脚本前一定要先在模拟器中将nice app运行起来
然后在cmd中运行

python my_script.py

在这里插入图片描述
然后输入账号密码即可获取到账号与密码(此处密码是加密后的)等相关内容
在这里插入图片描述成功hook!!!

相关资料:
https://blog.csdn.net/qq_44906504/article/details/89672518
https://blog.csdn.net/u014476720/article/details/83537843
https://blog.csdn.net/qq_44906504/article/details/89672518

https://blog.csdn.net/jinangl_vsnake/article/details/72919329
https://www.cnblogs.com/tjp40922/p/11353808.html

https://www.52pojie.cn/forum.php?mod=viewthread&tid=931872

扩展

在使用frida过程中发现有些app会对27042 /27043端口或frida-server服务名称进行检测,导制一运行frida注入app就闪退,解决方法如下:
1.重命名服务frida-server为不fs64或其他名字
2.frida服务默认启动端口为27042可指定端口端启动如:

chmod 777 fs64
fs64 -l 0.0.0.0:1234

然后转发

adb forward tcp:1234 tcp:1234

客户端使用方式:
frida-cli的使用自定端口的方式:

frida -H 127.0.0.1:1234 package_name -l hook.js 

python脚本使用自定义端口的方式:

host = '127.0.0.1:1234'
manager = frida.get_device_manager()
device= manager.add_remote_device(host)

备注:get_remote_device()方法,后来发现这个函数默认连接的是127.0.0.1:27042,使用上面代码代替即可

相关资料:
https://bbs.pediy.com/thread-254974.htm
https://wrlu.cn/cyber-security/mobile-security/android-frida/

作者原文传送
littleywww.littley.top
  • 1
    点赞
  • 48
    收藏
    觉得还不错? 一键收藏
  • 2
    评论
### 回答1: 《Android应用安全实战:Frida协议分析》是一本介绍Frida工具的使用和Android应用安全分析的书籍。Frida是一个强大的动态分析工具,可以帮助开发人员和安全研究人员对应用进行动态分析。本书以Frida为基础,介绍了如何对一些常见的安全问题进行定位和修复。 本书主要分为三部分,第一部分介绍了Frida工具的安装和使用方法,包括如何在Windows、Mac和Ubuntu三个系统上安装Frida,以及如何使用Frida对应用进行动态分析和漏洞挖掘。第二部分介绍了一些常见的安全问题,如反调试、class tampering、hook、rpc等问题,并详细介绍了如何通过Frida对这些问题进行分析和修复。第三部分介绍了一些应用案例分析,以及如何通过Frida对应用中的加密算法、网络协议、第三方代码等进行分析。 本书的特点在于实战性强,作者通过大量的实例和案例,让读者能够更加深入地理解Frida工具的使用方法,并能够将所学知识应用到实际的项目中。同时,本书还提供了一些工具和脚本,方便读者能够更加快速地进行分析和修复工作。 总的来说,本书是一本对于安卓开发人员、移动安全研究人员和安全工程师来说非常有价值的工具书,无论是对于入门和提高都有很大的帮助。Frida工具的特点在于动态分析,能够帮助开发人员和安全工程师快速定位和修复常见的安全问题。而本书则是一个详细的实例教程,通过这份教程的学习,读者将能够掌握Frida工具的使用方法,并能够熟练地应用到实际的项目中。 ### 回答2: 《Android应用安全实战:Frida协议分析PDF》是一本针对移动应用安全的实战指南。这本书主要讲述了如何借助Frida这个强大的工具来进行移动应用的安全分析和漏洞挖掘。 Frida是一款可用于对移动应用进行实时动态分析的工具,它的优点在于可以轻松地hook任意函数和类,还可以在不用重新编译应用程序的情况下动态修改应用程序的行为。Frida的这些特性使得它成为了许多黑客和渗透测试人员使用的首选工具之一。 在《Android应用安全实战:Frida协议分析PDF》中,作者首先介绍了Frida工具的基本原理和使用方法,包括安装和配置Frida、使用Frida脚本、使用Frida进行hook等。接着,作者详细介绍了Android应用程序的各个组成部分和重要的安全机制,并给出了许多实例来演示如何通过Frida来绕过这些安全机制。 最后,作者还介绍了一些常用的Frida脚本和工具,比如Hooking SSLPinning脚本、Frida-Extract工具、在Android 8.0上使用Frida等。这些工具和脚本可以帮助读者更快更高效地进行移动应用的安全分析和漏洞挖掘。 总的来说,《Android应用安全实战:Frida协议分析PDF》是一本非常实用的书籍,对于渗透测试人员、黑客和移动应用开发人员来说都具有一定的参考价值。通过学习和掌握Frida这个工具,可以让我们更好地发现和修复移动应用程序中的安全问题,从而提升我们的移动应用程序的安全性和可靠性。 ### 回答3: 《Android应用安全实战:Frida协议分析》是一本关于安卓应用安全的实战教程。该书的重点在于介绍如何使用Frida协议进行应用程序的逆向分析,得出应用程序的安全漏洞,并给出相应的解决方案。 Frida是一个能够在运行时动态注入JavaScript并调试代码的工具。这也意味着Frida能够直接访问运行在内存中的应用程序。这个优势使Frida成为了一个强大的安卓应用程序分析和调试工具。通过使用Frida,用户可以对应用程序进行监视、修改、甚至是攻击。 《Android应用安全实战:Frida协议分析》详细介绍了Frida的使用方法,包括Frida的架构、基本操作、配置和调试应用程序等。此外,该书还介绍了有关安卓应用程序逆向工程和安全审计的实操技能。通过本书的学习,在安卓应用程序的开发过程中,读者可以掌握一定的安全知识和技能,从而提高应用程序的安全性,避免攻击和漏洞的发生。 总之,《Android应用安全实战:Frida协议分析》是一本非常实用、易懂的安卓应用程序安全入门教材。在阅读该书并掌握其中的技能后,用户可以应用这些技能进行应用程序的逆向分析和安全审计,从而达到提高安卓应用程序安全性的目的。

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值