当前位置: 首页 > news >正文

15.安卓逆向-frida基础-HOOK类方法1

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!

内容参考于:图灵Python学院

本人写的内容纯属胡编乱造,全都是合成造假,仅仅只是为了娱乐,请不要盲目相信。

工具下载:

链接:https://pan.baidu.com/s/1rEEJnt85npn7N38Ai0_F2Q?pwd=6tw3

提取码:6tw3

复制这段内容后打开百度网盘手机App,操作更方便哦

上一个内容:14.安卓逆向-frida基础-编写hook脚本2

上一个内容里写了Frida的脚本语法怎么玩着,本次接着上一个内容进行实操,搞在逆向的时候HOOK的一些东西

比如:

hook okhttp的方法 HttpUrl、Request、addHeader,通过hook HttpUrl方法得到请求地址,通过hook Request得到请求和相应,通过hook addHeader得到请求头

hook json数据,有些app会把参数放到json里面去,app和服务器交互通过会使用json格式

hook 排序算法,有些app会把参数放到排序算法中

hook String字符串转换,有的app在加完密之后会使用String的方法进行转字符串

hook StringBuilder,有些app会使用StringBuilder添加参数

hook 按钮点击事件

然后首先是hook java特殊类型

`下图红框位置它有使用HashMap

然后上图红框里调用了show方法,下图show方法的内容,做的是把Map里的数据拿出来用StringBuilder进行拼接,然后如果想看东西的话,需要hook show方法

代码和效果图:

function demo1(){var utils = Java.use("com.luoge.com.BufferMap")utils.show.implementation = function(map){console.log("\n")console.log("参数1--》"+map)// console.log("\n")var res = this.show(map)console.log("返回值--》"+res)return res}
}Java.perform(function (){ // 调用java代码也就是getCalc方法demo1()
})

Map类型取值一般要用下方红框的写法

function demo1(){var utils = Java.use("com.luoge.com.BufferMap")utils.show.implementation = function(map){console.log("\n")var key = map.keySet()var it = key.iterator()var result = ""while(it.hasNext()){var keystr = it.next()var valuestr = map.get(keystr)result += valuestr}console.log("循环处理的数据:", result)console.log("参数1--》"+map)// console.log("\n")var res = this.show(map)console.log("返回值--》"+res)return res}
}Java.perform(function (){ // 调用java代码也就是getCalc方法demo1()
})

向map里添加数据

function demo1(){var utils = Java.use("com.luoge.com.BufferMap")utils.show.implementation = function(map){console.log("\n")var key = map.keySet()var it = key.iterator()var result = ""while(it.hasNext()){var keystr = it.next()var valuestr = map.get(keystr)result += valuestr}console.log("循环处理的数据:", result)map.put(" 添加的k", " 添加的值")console.log("参数1--》"+map)// console.log("\n")var res = this.show(map)console.log("返回值--》"+res)return res}
}Java.perform(function (){ // 调用java代码也就是getCalc方法demo1()
})

hook okhttp

hook请求抓包,有些抓包软件抓不到东西,这就需要采用hook 发送请求的类来抓包,这里hook okhttp,如果app不用okhttp它也是没办法抓包

function demo2() {// hook 请求var Builder = Java.use("okhttp3.Request$Builder")Builder.newCall.overload('okhttp3.HttpUrl').implementation = function (a){console.log()var res = this.url()return res}
}function demo3() {// hook 请求和响应var OkHttpClient = Java.use("okhttp3.OkHttpClient")OkHttpClient.newCall.overload('okhttp3.Request').implementation = function (a){console.log()console.log("入参:", a.url().toString())// 请求地址var call = this.newCall(a)console.log("newCall")var response = call.execute();console.log("返回值:", response.body().string())// 请求返回值return call}
}function demo4(){ // hook请求头var Builder = Java.use("okhttp3.Request$Builder")Builder["addHeader"].implementation = function (str1, str2){console.log("key:", str1)console.log("val:", str2)var result = this["addHeader"](str1, str2)return  result}}function demo5() {// hook 请求和响应var OkHttpClient = Java.use("okhttp3.OkHttpClient")OkHttpClient.newCall.overload('okhttp3.Request').implementation = function (request){console.log()console.log("请求地址:", request.url().toString())// 请求地址var headers = request.headers() // 获取请求头console.log("请求头:", headers.toString())var method = request.method()// 获取请求的方式,post、getconsole.log("请求方式:",method)var requestBody = request.body()if(requestBody === null){return this.newCall(request)}const FormBody = Java.use("okhttp3.FormBody")// 获取表单if(request.method() !== null && requestBody.getClass()!==null && requestBody.getClass().getName() === "okhttp3.FormBody"){var formBody = Java.cast(requestBody, FormBody)// cast是用来转类型的,它会把requestBody转成FormBody类型console.log("请求体(Body)")for (var i = 0; i < formBody.size(); i++) {console.log(formBody.name(i)+":"+formBody.value(i))}}return this.newCall(request)}
}Java.perform(function (){ // 调用java代码也就是getCalc方法// demo1()// demo2()demo5()
})


img


http://www.mrgr.cn/news/39248.html

相关文章:

  • 《Linux从小白到高手》理论篇(五):文件权限控制及文件操作相关的命令
  • 画个心,写个花!Python Turtle库带你玩转创意绘图!
  • CAD快捷键
  • STM32LL库之printf函数重定向
  • 【OS】计算机系统概述|操作系统基本概念|并发|并行|虚拟异步
  • cudnn的section介绍
  • Java-数据结构-Map和Set-(二)-哈希表 |ू・ω・` )
  • 2024年云南省职业院校技能大赛赛程规章(大数据赛项)
  • 从零开始搭建UVM平台(四)-加入interface
  • 天童美语:宝宝睡眠不足,对大脑发育有这些影响
  • “卷”智能, 从高质量算力开始
  • 1.2.1 计算机网络分层结构(上)
  • 设计模式之责任链模式
  • 什么是后仿
  • Prisma 基本使用
  • 谱分解与Cholesky分解
  • 《后端程序猿 · Spring事务失效场景》
  • g2o 中定义好的常用边的类型
  • 修改qtcreator创建项目的模板
  • DialMAT:跨模态特征提取与对抗训练的结合