前往小程序,Get更优阅读体验!
立即前往
首页
学习
活动
专区
圈层
工具
发布
首页
学习
活动
专区
圈层
工具
社区首页 >专栏 >frida学习笔记

frida学习笔记

作者头像
用户2135432
发布于 2023-10-21 03:06:15
发布于 2023-10-21 03:06:15
81900
代码可运行
举报
文章被收录于专栏:猛牛哥的博客猛牛哥的博客
运行总次数:0
代码可运行

说明

因为想学习怎么hook安卓程序,网上搜了一些资料,有xposed和frida两种。 xposed不便于调试,frida方便调试。所以先从学习frida入手。 以下过程是本菜鸡参考网络教程实践的坎坷路程,记录下来以备以后自己重复时参考。

电脑端安装frida

第一步查资料安装,需要先安装python,直接到python官网(https://www.python.org/downloads/ )下载windows版本安装。

下载后打开,一路next完成。

踩坑:我尝试过在windows store内安装python,装好后不带pip。手动安装pip后再安装frida,安装完成后无法运行frida命令。然后卸载后又手动安装的官网版python。

然后就是按照网上教程,打开命令行窗口,运行:

特别注意:一定要在安装完python后打开一个新的命令行窗口。因为安装python时自动添加的path变量不能在以前打开的命令行窗口生效。这是windows自己的问题。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
pip install frida
pip install frida-tools

安装完成后运行frida --version测试是否成功,并记住版本号。后面安装frida-server时要选择一致的版本。

安卓端安装frida-server

安装ADB

安装frida-server需要通过adb连接安卓。我以前没有装过,所以需要先安装ADB。 ADB下载地址:https://dl.google.com/android/repository/platform-tools-latest-windows.zip 解压保存。然后把保存路径添加到环境变量PATH。记得添加PATH新路径后再重新打开一个命令行窗口,以使新添加的路径生效。 安卓模拟器打开USB调试,用下面命令查看设备是否已连接

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb devices

运行adb shell input keyevent 4测试按下返回键有没有反应,模拟器内有反应,说明ADB连接成功。

如果提示adb.exe: more than one device/emulator错误,并且运行adb devices显示有多个设备,多余的设备为offline状态,可以尝试运行adb kill-server命令解决,如果没用,再运行taskkill /f /im adb.exe 如果确实有多个设备,可以用-s参数指定连接哪个设备。例如:adb -s emulator-5554 shell

安装frida-server

运行下面命令查看安卓CPU架构,下载frida-server时需要用。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb shell getprop ro.product.cpu.abi

我用的安卓虚拟机,所以该命令输出了x86,如果是手机,应该是arm之类的。 frida-server下载地址:https://github.com/frida/frida/releases 打开后点Show all 247 assets查看所有的下载链接(里面247数字可能有变化)。 我选择下载对应的frida-server-16.0.9-android-x86.xz,因为我刚才安装的电脑端frida版本是16.0.9,安卓模拟器CPU架构是x86。 下载的是 .xz结尾的文件,应该是一种压缩格式。我用7zip解压的。 然后把解压后的文件发送到安卓。这个文件要保存在命令行窗口的当前文件夹下,我自己尝试使用绝对路径不行。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb root
adb push frida-server-16.0.9-android-x86 /data/local/tmp
运行frida-server

命令如下:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb shell
su
cd /data/local/tmp
chmod 777 frida-server-14.2.18-android-arm
./frida-server-14.2.18-android-arm

运行完以上命令,命令行窗口会进入阻断状态,无法再输入新的命令。如果要结束frida-server,按CTRL+C

端口映射

这步需要新开一个命令行窗口

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
adb forward tcp:27042 tcp:27042
adb forward tcp:27043 tcp:27043

运行下面命令查看安卓内进程,有输出列表说明一切正常:

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
frida-ps -U
frida-ps

frida-ps用法

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
# 查看所有进程(不显包名)
frida-ps -U

# 查看正在运行的进程List running applications(显包名,好像是只显示有图形界面的程序)
$ frida-ps -Ua

# 查看安装了的app List installed applications
$ frida-ps -Uai

HOOK测试

模式

frida hook有两种模式,如下

1. attach模式

attach到已经存在的进程,核心原理是ptrace修改进程内存。如果此时进程已经处于调试状态(比如做了反调试),则会attach失败。

2. spawn模式

启动一个新的进程并挂起,在启动的同时注入frida代码,适用于在进程启动前的一些hook,比如hook RegisterNative函数,注入完成后再调用resume恢复进程。

未完待续

收集的可能有用的代码

显示进程所有模块信息(Python)

用法:保存为文件,例如getmodule.py,然后运行python getmodule.py "进程名"。该代码只能获取已经在运行的进程模块信息。 这是网上找来的,我做了部分修改:原来是固定进程名,我改为可以传参设置进程名;显示模块大小;显示非系统自带(/system/lib下)模块的路径。

代码语言:javascript
代码运行次数:0
运行
AI代码解释
复制
import frida
import sys

def on_message(message, data):
    print("[{}] => {}".format(message, data))

def main(target_process):
    session = process = frida.get_usb_device().attach(target_process)

    script = session.create_script("""
        Process.enumerateModules({
        onMatch: function(module){
            var reg=RegExp(/system/);
            if(module.path.toString().match(reg)){
              console.log('Module name: ' + module.name + " - " + "Base Address: " + module.base.toString() + " size:" + module.size/1024 + "k");
            }else{
              console.log('Module name: ' + module.name + " - " + "Base Address: " + module.base.toString() + " size:" + module.size/1024 + "k path:" + module.path);
            }

        }, 
        onComplete: function(){}
    });
    """)
    script.on("message", on_message)
    script.load()
    print("[!] Ctrl+D or Ctrl+Z to detach from instrumented program.\n\n")
    sys.stdin.read()
    session.detach()

if __name__ == "__main__":
    main(sys.argv[1])

本文参考资料: https://juejin.cn/post/6970941426930548767 https://blog.csdn.net/weixin_38819889/article/details/119845994 https://blog.csdn.net/cyjmosthandsome/article/details/120906998 HOOK详细一点的教程:https://www.jianshu.com/p/d4a44f803f33 python传参:https://blog.csdn.net/helloasimo/article/details/124210144 ADB错误:https://blog.csdn.net/gaojinshan/article/details/9455193 Frida获取所有模块名:https://www.jianshu.com/p/2524571eed86

本文参与 腾讯云自媒体同步曝光计划,分享自作者个人站点/博客。
原始发表:2023-02-15 ,如有侵权请联系 cloudcommunity@tencent.com 删除

本文分享自 作者个人站点/博客 前往查看

如有侵权,请联系 cloudcommunity@tencent.com 删除。

本文参与 腾讯云自媒体同步曝光计划  ,欢迎热爱写作的你一起参与!

评论
登录后参与评论
暂无评论
推荐阅读
编辑精选文章
换一批
[1091]Frida的环境搭建及入门实战
Frida是一款基于python + javascript 的hook框架,可运行在android ios linux windows osx等各平台,主要使用动态二进制插桩技术;由于是基于脚本(javascript)的交互,因此相比xposed和substrace cydia更加便捷
周小董
2022/04/13
2.8K0
[1091]Frida的环境搭建及入门实战
搭建frida+木木模拟器运行环境
直接去官网下载. http://mumu.163.com/ 此过程省略… 下载后首先:
李玺
2021/11/22
9100
搭建frida+木木模拟器运行环境
APP 逆向 —— Windows 下安装 Frida 环境
百度安装 Frida 全是直接 pip ,搜出来按照人家的步骤安装,结果坑一大堆。反正我是遇到一大堆的坑。
andrew_a
2020/04/07
6.4K0
APP 逆向 —— Windows 下安装 Frida 环境
App逆向 Frida - 夜神模拟器安装配置 基本使用
Frida 是一款基于 Python + JavaScript 的 Hook 与调试框架,实现app逆向的强大工具; 模拟器下载安装教程:https://blog.csdn.net/EXIxiaozhou/article/details/127767808
EXI-小洲
2022/12/13
4.4K0
App逆向 Frida - 夜神模拟器安装配置 基本使用
移动安全-安卓frida hook基础篇
https://developer.android.com/studio/releases/platform-tools
hyyrent
2022/12/26
9130
移动安全-安卓frida hook基础篇
官宣| 反手就送你们一个hook神器
上期的Android逆向之动态分析so篇大家学习的如何啦?本期斗哥将带来Android逆向之动态分析Frida篇。主要内容有Frida环境搭建与Frida在Android环境下的运行与使用。
漏斗社区
2018/11/08
1.5K0
Hook框架Frida之安装踩坑日记
一、概述 Frida,官网介绍:Dynamic instrumentation toolkit for developers, reverse-engineers, and security researchers,是个轻量级so级别的hook框架,Hook的原理简单地说就是用一个新的函数替代掉原来的函数。
Jayway
2020/07/15
4.8K0
Hook框架Frida之安装踩坑日记
Frida - App逆向 JavaScript代码注入 基本语法以及数据类型介绍
Frida可以通过将JavaScript 脚本插入到APP的内存中来对APP的逻辑进行跟踪和监视乃至修改原程序的逻辑,实现逆向开发和分析人员想要实现的功能称之为HOOK(钩子 即通过钩子机制与钩子函数建立联系);
EXI-小洲
2022/12/13
4K0
Frida - App逆向 JavaScript代码注入 基本语法以及数据类型介绍
Frida使用文档(一)安装、启动、运行、关闭
注意frida和python frida-tools的版本匹配,Frida与Frida-tools对应关系
拉灯的小手
2022/03/31
2.5K0
【APP 逆向百例】Frida 初体验,root 检测与加密字符串定位
本文章中所有内容仅供学习交流使用,不用于其他任何目的,不提供完整代码,抓包内容、敏感网址、数据接口等均已做脱敏处理,严禁用于商业用途和非法用途,否则由此产生的一切后果均与作者无关!
K哥爬虫
2023/01/12
1.6K0
【APP 逆向百例】Frida 初体验,root 检测与加密字符串定位
APP逆向神器之Frida【Android初级篇】
说到逆向APP,很多人首先想到的都是反编译,但是单看反编译出来的代码很难得知某个函数在被调用时所传入的参数和它返回的值,极大地增加了逆向时的复杂度,有没有什么办法可以方便地知道被传入的参数和返回值呢?
Python编程与实战
2019/12/04
2.8K0
实用FRIDA进阶:脱壳、自动化、高频问题
前面我们聊到了Frida在内存漫游、hook anywhere、抓包等场景中地用法,今天我们聊Frida在脱壳、自动化的用法以及经常被问到的高频问题。
bosh123
2021/01/23
4.4K0
一些APP渗透测试时的小tips
朋友们现在只对常读和星标的公众号才展示大图推送,建议大家把“亿人安全“设为星标”,否则可能就看不到了啦
亿人安全
2024/06/27
4280
一些APP渗透测试时的小tips
安卓Frida Hook基础
设置环境变量WORKON_HOME为下面自己建立好的路径,当然默认也可以不设置,默认在用户目录下
用户1423082
2024/12/31
860
安卓Frida Hook基础
r0capture安卓应用层通杀脚本-使用文档
应用程序间沟通的层,如简单电子邮件传输(SMTP)、文件传输协议(FTP)、网络远程访问协议(Telnet)等。
拉灯的小手
2022/04/01
1.4K0
android逆向之frida安装与使用
这篇文章最后以分析UnCrackable-Level1.apk介绍frida脚本的使用,如果大佬们对前面介绍的adb、frida安装已经清楚,则可以直接拉到最后看UnCrackable-Level1.apk的分析。
用户4682003
2022/05/19
5.7K0
android逆向之frida安装与使用
技术分享 | Frida 实现 Hook 功能的强大能力
Frida 通过 C 语言将 QuickJS 注入到目标进程中,获取完整的内存操作权限,达到在程序运行时实时地插入额外代码和数据的目的。官方将调用代码封装为 python 库,当然你也可以直接通过其他的语言调用 Frida 中的 C 语言代码进行操作。
用户9652437
2022/04/19
4980
firda学习
.\adb_server.exe connect 127.0.0.1:7555 连接
Ms08067安全实验室
2020/06/16
3980
技术分享 | Frida 实现 Hook 功能的强大能力
Frida 通过 C 语言将 QuickJS 注入到目标进程中,获取完整的内存操作权限,达到在程序运行时实时地插入额外代码和数据的目的。官方将调用代码封装为 python 库,当然你也可以直接通过其他的语言调用 Frida 中的 C 语言代码进行操作。
hogwartstester
2022/05/25
7040
精品连载丨安卓 App 逆向课程之二逆向神器 frida 的介绍
前阵子受《Xposed模块编写的那些事》[1]这篇文章的帮助很大,感觉有必要写一篇文章。现在最火爆的又是frida,该框架从Java层hook到Native层hook无所不能,虽然持久化还是要依靠Xposed和hookzz等开发框架,但是frida的动态和灵活对逆向以及自动化逆向的帮助非常巨大。
崔庆才
2020/06/17
2.7K0
精品连载丨安卓 App 逆向课程之二逆向神器 frida 的介绍
相关推荐
[1091]Frida的环境搭建及入门实战
更多 >
LV.0
这个人很懒,什么都没有留下~
领券
问题归档专栏文章快讯文章归档关键词归档开发者手册归档开发者手册 Section 归档