目标
hook安卓的Toast内容, 修改为牙叔教程
环境
雷电模拟器Android版本: 7.1.2
Android Studio版本: 4.1.2
流程
- 创建安卓app, 安装到雷电模拟器
- 执行frida的hook命令, 修改Toast内容
代码讲解
1. 安卓代码, 就一个Toast命令, 内容为牙叔教程
package com.yashu.aaaaaaaaaaaaaaaaaaaaaa; public class MainActivity extends AppCompatActivity { @Override protected void onCreate(Bundle savedInstanceState) { super.onCreate(savedInstanceState); Toast.makeText(getApplicationContext(), "牙叔教程", Toast.LENGTH_SHORT).show(); } }
2. 启动模拟器上的服务
adb shell cd /data/local/tmp ls ./frida-server-15.1.1-android-x86
3. 打开当前目录的cmd窗口
start . cmd
4. 执行hook
frida -U -f com.yashu.aaaaaaaaaaaaaaaaaaaaaa --no-pause -l hook.js
5. hook.js
Java.perform(function () { // hook类: MainActivity var MainActivity = Java.use("com.yashu.aaaaaaaaaaaaaaaaaaaaaa.MainActivity"); // hook方法: MainActivity.onCreate MainActivity.onCreate.implementation = function (savedInstanceState) { console.log("enter onCreate"); // 不打断程序, 该执行的还要执行 // 执行this.onCreate, 且传参 this.onCreate(savedInstanceState); }; // 获得Toast组件 var Toast = Java.use("android.widget.Toast"); var makeText = Toast.makeText; var String = Java.use("java.lang.String"); // 函数重载, 设置参数类型 makeText.overload("android.content.Context", "java.lang.CharSequence", "int").implementation = function ( context, content, time ) { console.log("修改toast内容"); // 设置字符串重复次数 var content = "牙叔教程 超级棒棒\n".repeat(10); // 实例化字符串 var hookContent = String.$new(content); // 可以hook, 但是不能打断原先的程序, 原来该做什么, 还要继续做下去 return this.makeText(context, hookContent, time); }; });
6. 退出frida
ctrl c quit
参考
名人名言
思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途