jadx安装与配置,hook框架frida

发布时间 2023-07-24 11:37:24作者: 字母一哥

jadx

1.下载jadx反编译工具,安装(解压即用)

# 下载地址:https://github.com/skylot/jadx/releases 

2.打开jadx反编译工具:

3.抓包与代码定位

3.1 抓包

  # 1.安装apk
  # 2.打开chaarles,打开app,定位到登录请求

3.2.反编译定位代码的位置

  # 抓包
  # 想去反编译代码中的位置
  # 搜素关键字   
    -优先考虑地址
    - pwd不能直接搜,java中字符串是双引号引起来的
    -(“pwd”)

hook 框架

1.hook介绍

2.下载与安装

注意:

-在电脑端(写hook函数----需要安装软件)----》需要有python的解释器环境(

需要安装两个模块

pip install frdia==16.0.19

pip install frida-tools==12.1.2

  # 有可能安装会报错,需要下载whl,egg文件安装(用源码包安装)
  #  需要根据:frdia+python版本+操作系统来选择对应的egg或whl文件
  # htts://pypi.doubanio.com/simple/frdia/
  # pip install xx.whl/egg

-在手机(执行某个App的某个函数----需要运行服务)(所以手机也需要安装16.0.9)

注意注意:在手机上的服务版本要和电脑端的版本一致,否则不行

手机端安装步骤

# 1.官网下载frida-server运行在手机上
# 2.下载后解压,把文件传入到手机上
命令: adb push xxxx /data/local/tmp/
# 3.给上传的文件加上执行权限
# 4.在手机端, 启动frdia-server(卡主就是已经启动了)
./frdia-server-16.0.9
 

下载地址

hook启动

frida查看手机端所有的进程和前台进程

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)


### 


2.hook脚本

import frida
import sys
# 1.连接手机设备
rdev = frida.get_remote_device()
# 2.hook手机中的哪个App,(app的包名字)
session = rdev.attach("车智赢+")
scr = """
Java.perform(function(){
    //包,类  com.autohome.ahkit.utils.SecurityUtil
    var UserModel = Java.use("com.che168.autotradercloud.user.model.UserModel");
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    //hook替换  encodeMD5
      UserModel.loginByPassword.implementation = function(str,str2,str3,responseCallback){
        console.log("-----------------------请求来了-----------------------");
        console.log("用户名", str2);
        console.log("密码", str3);
        var res = this.loginByPassword(str,str2,str3,responseCallback);
        return res;
    };
    SecurityUtil.encodeMD5.implementation = function(str){
    console.log("=================请求来了....");
    console.log("明文是:" ,str);
    var res = this.encodeMD5(str);
    console.log("密文是:",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()

3.python的hook方式

#spawn 方式:在目标和应用程序启动时直接注入 ,Frida的Agent 代码
#Attach方式: 在目标应用程序已经启动中动态注入

# spawn这种模式是在启动hook脚本的时候自动开启App
import frida
import sys

rdev = frida.get_remote_device()
pid = rdev.spawn(["com.hupu.shihuo"])
session = rdev.attach(pid)
scr = """
Java.perform(function(){
    //包,类  com.azhon.appupdate.dialog.UpdateDialog
    var UpdateDialog = Java.use("com.azhon.appupdate.dialog.UpdateDialog")
   
    //hook替换
    UpdateDialog.show.implementation = function(){
    console.log("++++++++show来啦++++++++++++++");
    //this.show();
    } 
   
});       
"""
script = session.create_script(scr)


def on_message(message, data):
    print(message, data)


script.on("message", on_message)
script.load()
rdev.resume(pid)
sys.stdin.read()

js的hook方式

############################################################
Java.perform(function(){
    //包,类  com.azhon.appupdate.dialog.UpdateDialog
    var UpdateDialog = Java.use("com.azhon.appupdate.dialog.UpdateDialog")

    //hook替换
    UpdateDialog.show.implementation = function(){
        console.log("++++++++show来啦++++++++++++++");
        //this.show();
    }
});
##################################################################
执行js的hook代码
//运行命令
//attach,先启动app,然后再在终端运行
//
// >>> frida -UF -l xxxx.js
//
// spwan 脚本自动重启app并进行hook
//
// >>> frida -U -f com.che168.autotradercloud -l xxx.js
// 注意:输入q+再点击回车则退出