返回列表 发新帖

《安卓逆向这档事》十三、是时候学习一下Frida一把梭了(上)

  [复制链接]

91

主题

3807

回帖

2万

积分

博士后

萌新

Rank: 8Rank: 8

金币
10363
好评
335
信誉
278

考神MT论坛帅哥MT论坛最佳新人MT论坛活跃会员

QQ
发表于 2023-8-19 21:01:58 | 显示全部楼层 | 阅读模式  来自 福建
本帖最后由 正己 于 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.  安装环境

  1. pip install virtualenvwrapper-win -i [url]https://pypi.tuna.tsinghua.edu.cn/simple[/url]
复制代码

1. 设置WORKON_HOME环境变量

  1. mkvirtualenv 新建环境
  2. rmvirtualenv 删除环境
复制代码

3.Frida安装以及多版本处理

  1. 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指令

  1. frida-ps --help
  2. 使用方式: frida-ps [选项]

  3. 选项:
  4.   -h, --help            显示帮助信息并退出
  5.   -D ID, --device ID    连接到具有给定ID的设备
  6.   -U, --usb             连接到USB设备
  7.   -R, --remote          连接到远程frida-server
  8.   -H HOST, --host HOST  连接到HOST上的远程frida-server
  9.   --certificate CERTIFICATE
  10.                         与HOST进行TLS通信,期望的CERTIFICATE
  11.   --origin ORIGIN       连接到设置了"Origin"头为ORIGIN的远程服务器
  12.   --token TOKEN         使用TOKEN验证HOST
  13.   --keepalive-interval INTERVAL
  14.                         设置心跳包间隔(秒),或设置为0以禁用(默认为-1,根据传输方式自动选择)
  15.   --p2p                 与目标建立点对点连接
  16.   --stun-server ADDRESS
  17.                         设置与--p2p一起使用的STUN服务器地址
  18.   --relay address,username,password,turn-{udp,tcp,tls}
  19.                         添加与--p2p一起使用的中继
  20.   -O FILE, --options-file FILE
  21.                         包含额外命令行选项的文本文件
  22.   --version             显示程序版本号并退出
  23.   -a, --applications    只列出应用程序
  24.   -i, --installed       包括所有已安装的应用程序
  25.   -j, --json            以JSON格式输出结果
复制代码



Spawn模式

  1. frida -U -f 进程名 -l hook.js
复制代码


attach模式 :

  1. frida -U 进程名 -l hook.js
复制代码


frida_server自定义端口

  1. frida server 默认端口:27042

  2. taimen:/ $ su
  3. taimen:/ [b][size=5]cd data/local/tmp/[/size][/b]
  4. 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框架模板

  1. js
  2. function main(){
  3.     Java.perform(function(){
  4.         hookTest1();
  5.     });
  6. }
  7. setImmediate(main);
复制代码


6.Frida常用API
---

1.Hook普通方法、打印参数和修改返回值

  1. js
  2. //定义一个名为hookTest1的函数
  3. function hookTest1(){
  4.         //获取一个名为"类名"的Java类,并将其实例赋值给JavaScript变量utils
  5.     var utils = Java.use("类名");
  6.     //修改"类名"的"method"方法的实现。这个新的实现会接收两个参数(a和b)
  7.     utils.method.implementation = function(a, b){
  8.             //将参数a和b的值改为123和456。
  9.         a = 123;
  10.         b = 456;
  11.         //调用修改过的"method"方法,并将返回值存储在`retval`变量中
  12.         var retval = this.method(a, b);
  13.         //在控制台上打印参数a,b的值以及"method"方法的返回值
  14.         console.log(a, b, retval);
  15.         //返回"method"方法的返回值
  16.         return retval;
  17.     }
  18. }

复制代码



2.Hook重载参数

  1. js
  2. // .overload()
  3. // .overload('自定义参数')
  4. // .overload('int')
  5. function hookTest2(){
  6.     var utils = Java.use("com.zj.wuaipojie.Demo");
  7.     //overload定义重载函数,根据函数的参数类型填
  8.     utils.Inner.overload('com.zj.wuaipojie.Demo$Animal','java.lang.String').implementation = function(a,b){
  9.         b = "aaaaaaaaaa";
  10.         this.Inner(a,b);
  11.         console.log(b);
  12.     }
  13. }



复制代码



3.Hook构造函数
  1. js
  2. function hookTest3(){
  3.     var utils = Java.use("com.zj.wuaipojie.Demo");
  4.     //修改类的构造函数的实现,$init表示构造函数
  5.     utils.$init.overload('java.lang.String').implementation = function(str){
  6.         console.log(str);
  7.         str = "52";
  8.         this.$init(str);
  9.     }
  10. }


复制代码



4.Hook字段
  1. js
  2. function hookTest5(){
  3.     Java.perform(function(){
  4.         //静态字段的修改
  5.         var utils = Java.use("com.zj.wuaipojie.Demo");
  6.         //修改类的静态字段"flag"的值
  7.         utils.staticField.value = "我是被修改的静态变量";
  8.         console.log(utils.staticField.value);
  9.         //非静态字段的修改
  10.         //使用`Java.choose()`枚举类的所有实例
  11.         Java.choose("com.zj.wuaipojie.Demo", {
  12.             onMatch: function(obj){
  13.                     //修改实例的非静态字段"_privateInt"的值为"123456",并修改非静态字段"privateInt"的值为9999。
  14.                 obj._privateInt.value = "123456"; //字段名与函数名相同 前面加个下划线
  15.                 obj.privateInt.value = 9999;
  16.             },
  17.             onComplete: function(){

  18.             }
  19.         });
  20.     });
  21.    
  22. }
复制代码


5.Hook内部类
  1. js
  2. function hookTest6(){
  3.     Java.perform(function(){
  4.         //内部类
  5.         var innerClass = Java.use("com.zj.wuaipojie.Demo$innerClass");
  6.         console.log(innerClass);
  7.         innerClass.$init.implementation = function(){
  8.             console.log("eeeeeeee");
  9.         }

  10.     });
  11. }

复制代码


6.枚举所有的类与类的所有方法
  1. js
  2. function hookTest7(){
  3.     Java.perform(function(){
  4.         //枚举所有的类与类的所有方法,异步枚举
  5.         Java.enumerateLoadedClasses({
  6.             onMatch: function(name,handle){
  7.                     //过滤类名
  8.                 if(name.indexOf("com.zj.wuaipojie.Demo") !=-1){
  9.                     console.log(name);
  10.                     var clazz =Java.use(name);
  11.                     console.log(clazz);
  12.                     var methods = clazz.class.getDeclaredMethods();
  13.                     console.log(methods);
  14.                 }
  15.             },
  16.             onComplete: function(){}
  17.         })
  18.     })
  19. }

复制代码


7.枚举所有方法
  1. js
  2. function hookTest8(){
  3.     Java.perform(function(){
  4.         var Demo = Java.use("com.zj.wuaipojie.Demo");
  5.         //getDeclaredMethods枚举所有方法
  6.         var methods =Demo.class.getDeclaredMethods();
  7.         for(var j=0; j < methods.length; j++){
  8.             var methodName = methods[j].getName();
  9.             console.log(methodName);
  10.             for(var k=0; k<Demo[methodName].overloads.length;k++){
  11.                 Demo[methodName].overloads[k].implementation = function(){
  12.                     for(var i=0;i<arguments.length;i++){
  13.                         console.log(arguments[i]);
  14.                     }
  15.                     return this[methodName].apply(this,arguments);
  16.                 }
  17.             }
  18.         }
  19.     })
  20. }

复制代码


8.主动调用

静态方法
  1. js
  2. var ClassName=Java.use("com.zj.wuaipojie.Demo");
  3. ClassName.privateFunc();
复制代码


非静态方法
  1. js
  2.     var ret = null;
  3.     Java.perform(function () {
  4.         Java.choose("com.zj.wuaipojie.Demo",{    //要hook的类
  5.             onMatch:function(instance){
  6.                 ret=instance.privateFunc("aaaaaaa"); //要hook的方法
  7.             },
  8.             onComplete:function(){
  9.                     //console.log("result: " + ret);
  10.             }
  11.         });
  12.     })
  13.     //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 使用经验交流分享




已有9人评分好评 金币 理由
golency521 + 1
xueshanshi + 1 + 1 大神辛苦啦!
cwhappy + 1 + 1 感谢(^
江湖故人 + 1 + 1 大佬牛B
肖博坤 + 1 + 1
龙一 + 1 赞一个!
氵衮 + 1 + 1
虚伪的鲲 + 1 + 1
By陈心弦 + 1 + 1 赞一个!

查看全部评分 总评分:好评 +7  金币 +9 

回复

使用道具 举报

2

主题

123

回帖

537

积分

初中生

Rank: 3Rank: 3

金币
156
好评
0
信誉
102

考神

发表于 2023-8-19 21:03:32 来自手机  | 显示全部楼层  来自 陕西
学习学习
回复

使用道具 举报

17

主题

2107

回帖

6957

积分

硕士生

Rank: 6Rank: 6

金币
2516
好评
8
信誉
100

MT论坛最佳新人MT论坛帅哥MT论坛新人

发表于 2023-8-19 21:04:11 来自手机  | 显示全部楼层  来自 广东
感谢分享
回复

使用道具 举报

9

主题

307

回帖

1026

积分

高中生

Rank: 4

金币
142
好评
0
信誉
100
发表于 2023-8-19 21:04:54 来自手机  | 显示全部楼层  来自 广东
看看一下吧
回复

使用道具 举报

56

主题

3619

回帖

8852

积分

硕士生

6

Rank: 6Rank: 6

金币
657
好评
43
信誉
145

考神MT论坛新人MT论坛帅哥

QQ
发表于 2023-8-19 21:05:39 来自手机  | 显示全部楼层  来自 河南
谢谢分享
回复

使用道具 举报

3

主题

564

回帖

1825

积分

高中生

Rank: 4

金币
992
好评
0
信誉
100
发表于 2023-8-19 21:08:23 来自手机  | 显示全部楼层  来自 河南
让我看看
回复

使用道具 举报

62

主题

653

回帖

2250

积分

大学生

Rank: 5Rank: 5

金币
1111
好评
23
信誉
40

MT论坛最佳新人考神

QQ
发表于 2023-8-19 21:08:46 来自手机  | 显示全部楼层  来自 浙江
看看。。。。
回复

使用道具 举报

0

主题

1万

回帖

2万

积分

博士后

Rank: 8Rank: 8

金币
6877
好评
1
信誉
100
发表于 2023-8-19 21:09:32 | 显示全部楼层  来自 河北
想学习
回复

使用道具 举报

20

主题

1792

回帖

5404

积分

硕士生

Rank: 6Rank: 6

金币
1578
好评
2
信誉
100

MT论坛最佳新人

发表于 2023-8-19 21:09:40 来自手机  | 显示全部楼层  来自 山东
看看大佬
回复

使用道具 举报

16

主题

7688

回帖

1万

积分

博士生

:)))))

Rank: 7Rank: 7Rank: 7

金币
5763
好评
12
信誉
107

MT论坛帅哥考神MT论坛新人MT论坛活跃会员

发表于 2023-8-19 21:09:40 来自手机  | 显示全部楼层  来自 河南
看看隐藏
回复

使用道具 举报

23

主题

1158

回帖

3985

积分

大学生

Rank: 5Rank: 5

金币
798
好评
9
信誉
131
发表于 2023-8-19 21:09:51 来自手机  | 显示全部楼层  来自 重庆
查看
回复

使用道具 举报

17

主题

1317

回帖

3403

积分

大学生

Rank: 5Rank: 5

金币
632
好评
3
信誉
101

考神MT论坛新人MT论坛帅哥

发表于 2023-8-19 21:10:37 来自手机  | 显示全部楼层  来自 山东
看出来了
回复

使用道具 举报

0

主题

217

回帖

679

积分

初中生

Rank: 3Rank: 3

金币
702
好评
0
信誉
100
发表于 2023-8-19 21:13:25 来自手机  | 显示全部楼层  来自 浙江
看看隐藏
回复

使用道具 举报

4

主题

1287

回帖

4316

积分

大学生

风一样的男人

Rank: 5Rank: 5

金币
4829
好评
1
信誉
100

考神

发表于 2023-8-19 21:13:52 来自手机  | 显示全部楼层  来自 江苏
必看
回复

使用道具 举报

5

主题

203

回帖

566

积分

初中生

Rank: 3Rank: 3

金币
53
好评
0
信誉
87
发表于 2023-8-19 21:13:58 来自手机  | 显示全部楼层  来自 江苏
看看隐藏
回复

使用道具 举报

发表回复

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表