Android Hook

1. adb

控制手机

  • 启动adb

    >> adb start-server
    
  • 关闭adb

    >> adb kill-server
    
    • 查看电脑上连接的设备

      >> adb devices  # 安卓设备需要开启USB调试,如果模拟器会直接显示
      
  • 查看模拟器CPU

    >> adb -s 45Z5NNMJ99999999  shell getprop ro.product.cpu.abi
    arm64-v8a
    
  • 登录设备

    >> adb -s 45Z5NNMJ99999999 shell
    >> adb shell  # 如果只进入了一个设备
    

2. frida

  • PC端frida

    >> pip install frida==14.2.18  # 版本稍微第一点
    >> pip install frida-tools=9.2.5
    
  • 设备端frida-server

    • 下载frida server 版本与PC端frida版本一致,以及设备CPU来选择

    • 下载地址: https://github.com/frida/frida/releases/tag/14.2.18

    • 解压出可执行文件:frida-server-14.2.18-android-arm64.xz

    • 文件上传到设备2个方式:

      • 上传共享文件夹

      • adb上传

        >> adb push /Users/miaokela/Downloads/frida-server-14.2.18-android-arm64 /sdcard
        

        /sdcard目录去哪里找?

        在设备终端中:
        >> adb shell
        >> su -  # 切换至root用户
        >> ls  # 可以看到sdcard目录
        
    • 将 frida-server-14.2.18-android-arm64移动到/data/local/tmp

      >> mv frida-server-14.2.18-android-arm64 /data/local/tmp
      >> cd /data/local/tmp
      >> chmod 777 frida-server-14.2.18-android-arm64  # 授予可执行权限
      

3. Hook示例

  • 设备端启动 frida-server

    >> ./frida-server-14.2.18-android-arm64
    
  • PC端

    • 端口转发(新的终端)

      >> adb forward tcp:27042 tcp:27042
      >> adb forward tcp:27043 tcp:27043
      
    • 编写Python和Javascript代码进行Hook

      # 枚举手机上的所有进程 & 前台进程
      import frida
      
      # 获取设备信息
      rdev = frida.get_remote_device()
      print(rdev)
      
      # 枚举所有的进程
      processes = rdev.enumerate_processes()
      for process in processes:
          print(process)
      
      # 获取在前台运行的APP
      front_app = rdev.get_frontmost_application()
      print(front_app)
      
      import frida
      import sys
      
      # 连接手机设备
      rdev = frida.get_remote_device()
      
      # Hook手机上的那个APP(app的包名字)
      # 注意事项:在运行这个代码之前,一定要先在手机上启动app
      session = rdev.attach("com.che168.autotradercloud")  # 车智赢+
      
      
      scr = """
      Java.perform(function () {
      
          // 包.类
          var AHAPIHelper = Java.use("com.autohome.ahkit.AHAPIHelper");
          var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
          
          // Hook,替换
          AHAPIHelper.appendPublicParam.implementation = function(context,map){
              console.log(123);
              // 执行原来的方法
              this.appendPublicParam(context,map);
              console.log(666);
          }
          
          // Hook
          SecurityUtil.encodeMD5.implementation = function(str){
              console.log("md5加密前,明文=",str);
              var res = this.encodeMD5(str);
              console.log("md5加密后,密文=",res);
              return res;
              
          }
      });
      """
      script = session.create_script(scr)
      
      
      def on_message(message, data):
          print(message, data)
      
      
      script.on("message", on_message)
      script.load()
      sys.stdin.read()
      
posted on 2022-04-25 23:40  _tiny_coder  阅读(149)  评论(0编辑  收藏  举报