免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!
内容参考于:图灵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、get console.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() })