首页 > 其他分享 >【APP逆向06】Hook的两种方案

【APP逆向06】Hook的两种方案

时间:2024-01-14 23:25:12浏览次数:22  
标签:06 res APP 应用程序 Hook str console SecurityUtil message

  • hook有两种方案

    • 1.attach方案
      • Attach 方式是在目标应用程序已经运行的过程中动态地连接并注入 Frida 的 Agent 代码
      • 需要对已经运行的应用程序进行 Hook,即动态地连接到正在运行的进程。
      • 需要在应用程序运行时拦截和修改特定的方法调用。
      • 需要实时监视和修改应用程序的行为,例如参数修改、返回值篡改等。
      • 需要对应用程序进行调试和分析,以查找潜在的问题和漏洞。
    • 2.spawn方案
      • Spawn 方式是在目标应用程序启动时直接注入 Frida 的 Agent 代码
      • 需要在应用程序启动的早期阶段进行 Hook。
      • 需要访问和修改应用程序的内部状态,例如应用程序的全局变量、静态变量等。
      • 需要 Hook 应用程序的初始化过程,以实现对应用程序的自定义初始化逻辑。
      • 需要在应用程序的上下文中执行代码,并与其他模块或库进行交互。
  • python实现

    • 1.attach方案
import frida
import sys

### 以后这个代码不需要动### ### ###
rdev = frida.get_remote_device()
session = rdev.attach("app_name")  # 写上要hook的app的名字
### 以后这个代码不需要动### ###

# 要改动的地方,js语法
scr = """
Java.perform(function () {
    //找到类 反编译的首行+类名:com.autohome.ahkit.utils下的
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    
    //替换类中的方法,方法有几个参数,就要传几个参数
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("参数:",str); // 传入的参数打印了,我们猜是明文密码
        var res = this.encodeMD5(str); //调用原来的函数
        console.log("返回值:",res);  // 打印出正常执行这个方法,返回的结果
        return res; // 通过hook技术--》把传入的明文,直接返回--》抓包抓到的密码就是明文
    }
});
"""

####下面代码完全不需要动
script = session.create_script(scr)
def on_message(message, data):
    print(message, data)
script.on("message", on_message)
script.load()
sys.stdin.read()
  • 2.spawn方案,他会自动重启app-->>适应于应用程序启动初期进行hook
import frida
import sys

rdev = frida.get_remote_device()
pid = rdev.spawn(["com.che168.autotradercloud"])
session = rdev.attach(pid)

scr = """
Java.perform(function () {
    // 包.类
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("明文:",str);
        var res = this.encodeMD5(str);
        console.log("md5加密结果=",res);
        return "305eb636-eb15-4e24-a29d-9fd60fbc91bf";
    }
});
"""
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()
  • JavaScript实现
    • 由于frida提供了js的api,所以也可以使用js脚本运行hook
    • 1.attach方案
// 名字叫:hook.js
Java.perform(function () {
    // 包.类
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("明文:",str);
        var res = this.encodeMD5(str);
        console.log("md5加密结果=",res);
        return res;
    }
});

// attach 运行 命令 (应用已经在前台运行了,不需要指定应用名字和包名)
// frida -UF -l hook.js  

  • 2.spawn方案
Java.perform(function () {
    // 包.类
    var SecurityUtil = Java.use("com.autohome.ahkit.utils.SecurityUtil");
    SecurityUtil.encodeMD5.implementation = function(str){
        console.log("明文:",str);
        var res = this.encodeMD5(str);
        console.log("md5加密结果=",res);
        return "123";
    }
});

// spawn 方案运行 命令,会重启应用,需要指定应用的包名,不能不写包名,不写包名,不知道启动哪个应用
// frida -U -f 包名 -l hook.js

标签:06,res,APP,应用程序,Hook,str,console,SecurityUtil,message
From: https://www.cnblogs.com/xwltest/p/17964425

相关文章

  • 【APP逆向05】Hook小案例
    前言当我们通过抓包找到需要解密或者解密的参数后,然后反编译APP,找到对应的加解密方法,但是我们不确定找到的方法是不是就是参数加解密的地方,这个时候我们就需要使用hook来确定了需求:逆向某APP的密码1.通过抓包,找到加解密参数;2.反编译APP,找到加密参数的大概位置3.此时......
  • uni-app实现生成海报
    示例图:文献参考:参考文档:https://zhuanlan.zhihu.com/p/597629702uni-app官网:uni.createSelectorQuery()|uni-app官网微信小程序官网:canvas|微信开放文档海报内容准备:1、背景图片2、二维码3、用户头像,用户名称4、简短的描述文案PS:1、若使用<canvastype="2d"id="......
  • 寒假生活指导06
    实验报告题目:Spar机器学习库MLlib编程实践姓名 日期2024.1.14实验环境:操作系统:Ubuntu16.04JDK版本:1.7或以上版本Spark版本:2.1.0实验内容与完成情况:1.数据导入从文件中导入数据,并转化为DataFrame。代码:frompyspark.ml.featureimportPCA......
  • 吴师兄学算法day06 双指针 27. 移除元素
    题目:27. 移除元素易错点:差点猛住了,可以用pass顺着逻辑来识别代码示例:classSolution:defremoveElement(self,nums:List[int],val:int)->int:slow=0forfastinrange(len(nums)):ifnums[fast]==val:#删除......
  • 吴师兄学算法day06 双指针 283. 移动零
    题目:283. 移动零注意点:可以交换,也可以最后补零代码示例:classSolution:defmoveZeroes(self,nums:List[int])->None:"""Donotreturnanything,modifynumsin-placeinstead."""slow=0forfa......
  • app.UseAuthentication()、app.UseAuthorization() 及其它
    首先,这两段代码拼写就比较容易混淆,一个是UseAuthentication,一个是UseAuthorization,很容易看混。app.UseAuthentication(); 这个方法代表"认证"中间件的添加,这个中间件负责对来自客户端的请求进行认证,也就是说,它会把请求中包含的用户信息(比如一个cookie或者token)解释出来,然后构......
  • uni-app中的推送
    需求:最近公司要做推送,用的是uni-app,这里备注一下 App.vue里这样操作:分别是iOS和Android的在线创建推送,以及点击事件的处理,这里点击事件存储一下,然后发送消息在首页处理推送。如果在这里处理,会有先跳转推送页再返回首页的问题。plus.push.addEventListener('click',fu......
  • uniapp的video组件在层级太高,无法遮挡的问题
    uniapp-vue项目中需要播放视频,uniapp的video组件在层级太高,无法遮挡,所以使用原生dom的video标签在APP中播放视频,可以被其他元素进行覆盖、遮挡,页面具有更高的定制性<!--eslint-disable--><template><viewv-html="videoHtml"id="dom-video"class="dom-video......
  • 吴师兄学算法day06 485. 最大连续 1 的个数
    题目:485. 最大连续1的个数易错点:第一眼想到从队尾开始交换,后来发现不行。 代码示例:classSolution:defmoveZeroes(self,nums:List[int])->None:"""Donotreturnanything,modifynumsin-placeinstead."""slow=......
  • 吴师兄学算法day06 双指针 485. 最大连续 1 的个数
    题目:485. 最大连续1的个数易错点:考察双指的距离注意设置lastzero=-1虚拟坐标为-1,方便做减法。注意,防止最后的1位越界。对应的处理方案就是每轮结束都有统计结果。其实减法,是左闭右右开的区间,比如,3-2是1,      写成区间是 [2,3),减法算的是距离而几到几,......