定位与hook

本文详细探讨了在不同情况下如何应对重放攻击,涉及参数处理、关键接口定位、稳定测试,以及如何利用hook技术重写浏览器函数,特别关注document.createElement、Array.prototype.push等。还介绍了对象属性的描述符修改和使用Proxy进行对象代理的方法。

定位:
第一种情况: 重放攻击有效, 删参数重放攻击 也有效 之后进行稳定性测试.
第二种情况: 重放攻击有效,删参数重放攻击出现问题,寻找最优解, 关键参数处理(找接口,固定值,set-cookie/js逆向),流程完善,代码总结, 稳定测试.
第三种情况: 重放攻击无效, 关键参数猜测与处理(找接口/固定值/set-cookie), 进行测试请求 删参数寻找最优解, 同上.
第四种情况: 重放攻击短期有效,参数过期.关键参数处理,删参数重放攻击,流程完善与代码总结.稳定性测试,短期内崩溃,重新查看是否为参数问题,加上参数在进行稳定性测试
第五种情况,重放攻击无效,在3的基础上炸了.
hook:
简单函数hook(不涉及this指向)
对象属性调用函数(涉及this指向)
document.createElement

_createElement = Document.prototype.createElement
Document.prototype.createElement = function(){
	debugger;
	return _createElement.call(this, arguments[0])}

push:

_push =Array.prototype.push
Array.prototype.push = function () {
    console.log(1111)
    return _push.call(this,arguments[0])
}

函数定义获得xxx方法:

Function.prototype.xxx = function(){console.log(2)}

浏览器上极大多数函数都可以hook重写,个别函数可能无法重写
hook函数是可以检测测到的比如上述push,用toString方法检测

a = [1]
a.push.toString()
//'function () {\n    console.log(1111)\n    return _push.call(this,arguments[0])\n}'

重写toString

document.createElement.toString = function(){
    return 'function createElement() { [native code] }'
}

(function(){}).toString.call(document.createElement)
Funcrion.prototype.toString = function(){
console.log(22222)
}

对象部分的hook
对象属性:一般采用修改其描述符的方法进行hook
Object.defineProperty.为对象里面的属性设置描述符的方法.
cookie的赋值不是单纯的替换而是拼接,小心递归栈溢出

_cookie = document.cookie
Object.defineProperty(document, 'cookie',{
    set: function(val){
        debugger;
    },
    get: function(){
        return _cookie;
    }

同时描述符的修改也会被检测.方法:Object.getOwnPropertyDescriptor

Object.getOwnPropertyDescriptor(document, 'cookie')

对象本体的hook
一般情况下选择使用ES6的新语法:代理 Proxy

global = new Proxy(window,{
                get:function(){
                    console.log(arguments)             
                }
})

关于对象,一部分可以,剩下的不行,特别是与window相关的内容.
类似 location(控制网页url),document(控制文档流),window(控制全局js)

### 如何使用 Frida 进行 Hook 定位 Frida 是一种强大的动态分析工具,能够帮助开发者和安全研究人员轻松实现对目标应用程序的行为监控以及功能拦截。以下是关于如何通过 Frida 实现 Hook 定位的具体方法。 #### 1. 基础环境搭建 为了成功运行 Frida 脚本并完成 Hook 操作,需先确认已正确安装 Frida 工具及其依赖项[^1]。可以通过以下命令验证当前设备上的 Frida 版本: ```bash frida --version ``` 对于 Android 设备,还需确保其 USB 调试模式开启,并且可以正常连接到主机上。测试连接状态可执行如下指令: ```bash adb devices ``` 上述操作完成后即可进入下一步脚本编写阶段。 #### 2. 编写 Hook 脚本 下面提供了一个简单的例子用于说明怎样利用 JavaScript 来定义一个基础的 Hook 功能: 假设我们需要挂钩 `com.example.app.MainActivity` 类中的某个特定函数,则对应的代码片段可能看起来像这样: ```javascript Java.perform(() => { const MainActivity = Java.use('com.example.app.MainActivity'); // 对指定的方法实施Hook处理逻辑 MainActivity.targetMethod.implementation = function (arg1, arg2) { console.log(`Original arguments: ${arg1}, ${arg2}`); // 可在此处修改参数或者记录日志等额外动作 let result = this.targetMethod(arg1 * 2, arg2); // 修改传入参数后再调用原生方法 console.log(`Result from target method call is :${result}`); return result; // 返回调整后的结果给调用方 }; }); ``` 此部分实现了对目标类中某具体成员函数的操作捕获自定义行为注入过程[^2]。 #### 3. 执行 Hook 并观察效果 当准备好以上提到的所有前提条件之后就可以正式开始尝试启动带有定制化JS脚本的应用实例了。例如采用如下方式加载外部文件形式编写的钩子程序并向终端输出调试信息流: ```bash frida -U -f com.example.app.package.name --no-pause -l my_custom_hook_script.js -o output_log.txt ``` 这里 `-U` 参数表示针对USB连接的目标装置;而 `-f` 后跟随的是待附加进程所属APK包名称字符串;最后再附加上指向本地存储路径下的JavaScript源码文档位置以及期望保存最终打印消息集合的位置地址作为结尾选项传递进去即完成了整个流程设置工作[^3]。 --- ###
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值