|
|
本帖最后由 正己 于 2024-5-11 16:35 编辑

一、课程目标
1.配置frida环境,了解frida原理
2.从0到1编写frida脚本
3.了解frida的常用Api
二、工具
1.教程Demo(更新)
2.jadx-gui
3.雷电模拟器
4.VS Code
三、课程内容
1.什么是Frida?
---
Frida 是一款开源的动态插桩工具,可以插入一些代码到原生App的内存空间去动态地监视和修改其行为,支持Windows、Mac、Linux、Android或者iOS,从安卓层面来讲,可以实现`Java`层和`Native`层`Hook`操作。
项目地址
官网及使用文档

4.Frida环境配置
---
1.安装Python与VS Code
下载python

下载VS Code
汉化:在插件搜索Chinese,选择第一个插件安装重启即可
2.虚拟环境的env的安装
1. 安装环境
- pip install virtualenvwrapper-win -i [url]https://pypi.tuna.tsinghua.edu.cn/simple[/url]
复制代码
1. 设置WORKON_HOME环境变量
- mkvirtualenv 新建环境
- rmvirtualenv 删除环境
复制代码
3.Frida安装以及多版本处理
- pip install frida-tools -i [url]https://pypi.tuna.tsinghua.edu.cn/simple[/url]
复制代码
配置代码提示
4.push Frida-server
点击下载
PS:版本一定要对应!!!
!图片
5.Frida基础知识
---
1.基础指令
1.frida-ps -U 查看当前手机运行的进程
2.frida-ps --help 查看help指令
- frida-ps --help
- 使用方式: frida-ps [选项]
- 选项:
- -h, --help 显示帮助信息并退出
- -D ID, --device ID 连接到具有给定ID的设备
- -U, --usb 连接到USB设备
- -R, --remote 连接到远程frida-server
- -H HOST, --host HOST 连接到HOST上的远程frida-server
- --certificate CERTIFICATE
- 与HOST进行TLS通信,期望的CERTIFICATE
- --origin ORIGIN 连接到设置了"Origin"头为ORIGIN的远程服务器
- --token TOKEN 使用TOKEN验证HOST
- --keepalive-interval INTERVAL
- 设置心跳包间隔(秒),或设置为0以禁用(默认为-1,根据传输方式自动选择)
- --p2p 与目标建立点对点连接
- --stun-server ADDRESS
- 设置与--p2p一起使用的STUN服务器地址
- --relay address,username,password,turn-{udp,tcp,tls}
- 添加与--p2p一起使用的中继
- -O FILE, --options-file FILE
- 包含额外命令行选项的文本文件
- --version 显示程序版本号并退出
- -a, --applications 只列出应用程序
- -i, --installed 包括所有已安装的应用程序
- -j, --json 以JSON格式输出结果
复制代码

Spawn模式
- frida -U -f 进程名 -l hook.js
复制代码
attach模式 :
frida_server自定义端口
- frida server 默认端口:27042
- taimen:/ $ su
- taimen:/ [b][size=5]cd data/local/tmp/[/size][/b]
- taimen:/data/local/tmp [b][size=5]./fs1280 -l 0.0.0.0:6666[/size][/b]
复制代码
`logcat |grep "D.zj2595"`日志捕获
`adb connect 127.0.0.1:62001`模拟器端口转发

6.Hook框架模板
- js
- function main(){
- Java.perform(function(){
- hookTest1();
- });
- }
- setImmediate(main);
复制代码
6.Frida常用API
---
1.Hook普通方法、打印参数和修改返回值
- js
- //定义一个名为hookTest1的函数
- function hookTest1(){
- //获取一个名为"类名"的Java类,并将其实例赋值给JavaScript变量utils
- var utils = Java.use("类名");
- //修改"类名"的"method"方法的实现。这个新的实现会接收两个参数(a和b)
- utils.method.implementation = function(a, b){
- //将参数a和b的值改为123和456。
- a = 123;
- b = 456;
- //调用修改过的"method"方法,并将返回值存储在`retval`变量中
- var retval = this.method(a, b);
- //在控制台上打印参数a,b的值以及"method"方法的返回值
- console.log(a, b, retval);
- //返回"method"方法的返回值
- return retval;
- }
- }
复制代码
2.Hook重载参数
- js
- // .overload()
- // .overload('自定义参数')
- // .overload('int')
- function hookTest2(){
- var utils = Java.use("com.zj.wuaipojie.Demo");
- //overload定义重载函数,根据函数的参数类型填
- utils.Inner.overload('com.zj.wuaipojie.Demo$Animal','java.lang.String').implementation = function(a,b){
- b = "aaaaaaaaaa";
- this.Inner(a,b);
- console.log(b);
- }
- }
复制代码
3.Hook构造函数
- js
- function hookTest3(){
- var utils = Java.use("com.zj.wuaipojie.Demo");
- //修改类的构造函数的实现,$init表示构造函数
- utils.$init.overload('java.lang.String').implementation = function(str){
- console.log(str);
- str = "52";
- this.$init(str);
- }
- }
复制代码
4.Hook字段
- js
- function hookTest5(){
- Java.perform(function(){
- //静态字段的修改
- var utils = Java.use("com.zj.wuaipojie.Demo");
- //修改类的静态字段"flag"的值
- utils.staticField.value = "我是被修改的静态变量";
- console.log(utils.staticField.value);
- //非静态字段的修改
- //使用`Java.choose()`枚举类的所有实例
- Java.choose("com.zj.wuaipojie.Demo", {
- onMatch: function(obj){
- //修改实例的非静态字段"_privateInt"的值为"123456",并修改非静态字段"privateInt"的值为9999。
- obj._privateInt.value = "123456"; //字段名与函数名相同 前面加个下划线
- obj.privateInt.value = 9999;
- },
- onComplete: function(){
- }
- });
- });
-
- }
复制代码
5.Hook内部类
- js
- function hookTest6(){
- Java.perform(function(){
- //内部类
- var innerClass = Java.use("com.zj.wuaipojie.Demo$innerClass");
- console.log(innerClass);
- innerClass.$init.implementation = function(){
- console.log("eeeeeeee");
- }
- });
- }
复制代码
6.枚举所有的类与类的所有方法
- js
- function hookTest7(){
- Java.perform(function(){
- //枚举所有的类与类的所有方法,异步枚举
- Java.enumerateLoadedClasses({
- onMatch: function(name,handle){
- //过滤类名
- if(name.indexOf("com.zj.wuaipojie.Demo") !=-1){
- console.log(name);
- var clazz =Java.use(name);
- console.log(clazz);
- var methods = clazz.class.getDeclaredMethods();
- console.log(methods);
- }
- },
- onComplete: function(){}
- })
- })
- }
复制代码
7.枚举所有方法
- js
- function hookTest8(){
- Java.perform(function(){
- var Demo = Java.use("com.zj.wuaipojie.Demo");
- //getDeclaredMethods枚举所有方法
- var methods =Demo.class.getDeclaredMethods();
- for(var j=0; j < methods.length; j++){
- var methodName = methods[j].getName();
- console.log(methodName);
- for(var k=0; k<Demo[methodName].overloads.length;k++){
- Demo[methodName].overloads[k].implementation = function(){
- for(var i=0;i<arguments.length;i++){
- console.log(arguments[i]);
- }
- return this[methodName].apply(this,arguments);
- }
- }
- }
- })
- }
复制代码
8.主动调用
静态方法
- js
- var ClassName=Java.use("com.zj.wuaipojie.Demo");
- ClassName.privateFunc();
复制代码
非静态方法
- js
- var ret = null;
- Java.perform(function () {
- Java.choose("com.zj.wuaipojie.Demo",{ //要hook的类
- onMatch:function(instance){
- ret=instance.privateFunc("aaaaaaa"); //要hook的方法
- },
- onComplete:function(){
- //console.log("result: " + ret);
- }
- });
- })
- //return ret;
复制代码
四、课后小作业
五、答疑
待更新
六、视频及课件地址
百度云
阿里云
哔哩哔哩
PS:解压密码都是52pj,阿里云由于不能分享压缩包,所以下载exe文件,双击自解压
七、其他章节
《安卓逆向这档事》一、模拟器环境搭建
《安卓逆向这档事》二、初识APK文件结构、双开、汉化、基础修改
《安卓逆向这档事》三、初识smail,vip终结者
《安卓逆向这档事》四、恭喜你获得广告&弹窗静默卡
《安卓逆向这档事》五、1000-7=?&动态调试&Log插桩
《安卓逆向这档事》六、校验的N次方-签名校验对抗、PM代{过}{滤}理、IO重定向
《安卓逆向这档事》七、Sorry,会Hook真的可以为所欲为-Xposed快速上手(上)模块编写,常用Api
《安卓逆向这档事》八、Sorry,会Hook真的可以为所欲为-xposed快速上手(下)快速hook
《安卓逆向这档事》九、密码学基础、算法自吐、非标准加密对抗
《安卓逆向这档事》十、不是我说,有了IDA还要什么女朋友?
《安卓逆向这档事》十二、大佬帮我分析一下
《安卓逆向这档事》番外实战篇1-某电全家桶
《安卓逆向这档事》十三、是时候学习一下Frida一把梭了(上)
《安卓逆向这档事》十四、是时候学习一下Frida一把梭了(中)
《安卓逆向这档事》十五、是时候学习一下Frida一把梭了(下)
《安卓逆向这档事》十六、是时候学习一下Frida一把梭了(终)
《安卓逆向这档事》十七、你的RPCvs佬的RPC
《安卓逆向这档事》番外实战篇2-【2024春节】解题领红包活动,启动!
八、参考文档
frida检测
IDA&Frida 学习
https://github.com/FuzzySecurity/Fermion
https://mp.weixin.qq.com/s/RzdyDWRZ4un2_mC4Om8XZg
https://forum.butian.net/share/1389
https://github.com/dqzg12300/fridaUiTools
Frida工作原理学习(1)
frida源码阅读之frida-java
Art 模式实现XposedNativeHook兼容Android10
Frida 入门及介绍
https://bbs.kanxue.com/thread-278145.htm
FRIDA 使用经验交流分享
|
-
查看全部评分
总评分:好评 +7
金币 +9
|