牙叔教程 简单易懂
目标
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文档, 最后才是群里问问
--- 牙叔教程
声明
部分内容来自网络
本教程仅用于学习, 禁止用于其他用途
网友评论