美文网首页
frida hook Toast

frida hook Toast

作者: 牙叔教程 | 来源:发表于2021-09-13 10:29 被阅读0次

牙叔教程 简单易懂

目标

hook安卓的Toast内容, 修改为牙叔教程

环境

雷电模拟器Android版本: 7.1.2

Android Studio版本: 4.1.2

流程

  1. 创建安卓app, 安装到雷电模拟器
  2. 执行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

参考

frida的用法--Hook Java代码篇

名人名言

思路是最重要的, 其他的百度, bing, stackoverflow, 安卓文档, autojs文档, 最后才是群里问问
--- 牙叔教程

声明

部分内容来自网络
本教程仅用于学习, 禁止用于其他用途

相关文章

网友评论

      本文标题:frida hook Toast

      本文链接:https://www.haomeiwen.com/subject/ysaxgltx.html