前言
frida 真的是 app 逆向的神器,当你遇上他的时候,就会爱上他。这篇文章主要是通过自己写个 app 的 demo,然后一步步的 hook 它。之后会有系列的文章介绍 frida 对其他 app 的应用。
知识准备
frida 基础知识
android 知识
环境
android studio android 开发工具
已 root 的安卓手机
android 和 python 的 frida 环境
描述
之前在如何让 app 不走代理的文章中写了一个小的 app 的 demo。现在我准备一步一步的 hook 这个 demo。以便能加深对 frida 的理解。
源码
以下是 demo APP 的源码
public void onClick(View view) throws IOException {
new Thread(this).start();
}
@Override
public void run() {
Looper.prepare();
OkHttpClient okHttpClient = new OkHttpClient.Builder().
proxy(Proxy.NO_PROXY).
build();
Request request = new Request.Builder()
.url("http://www.baidu.com")
.build();
Response response = null;
try {
response = okHttpClient.newCall(request).execute();
Toast.makeText(this, Objects.requireNonNull(response.body()).string(), Toast.LENGTH_SHORT).show();
} catch (IOException e) {
Log.e("ioerror",e.getMessage());
}
Looper.loop();
}
一:hook 掉 onClick 方法
第一步:hook 掉 onClick 方法,代码如下
Java.perform(
function () {
// 通过反射获得MainActivity
var mainActivity = Java.use('com.example.myapplication.MainActivity');
// 获得onClick钩子
var onClick = mainActivity.onClick;
// 重写
onClick.implementation=function (view) {
//事前
console.log(view)
// 事中
var result = onClick.call(this,view)
// 事后
return result;
}
}
)
结果如下:
二:hook 掉 Toast 的 makeText 方法
目的是让让 toast 出我们自己定义的内容,代码如下:
Java.perform(
function () {
// 获得Toast组件
var Toast = Java.use('android.widget.Toast')
var makeText = Toast.makeText
var String = Java.use('java.lang.String')
makeText.overload('android.content.Context', 'java.lang.CharSequence', 'int').implementation=function (context,content,time) {
var hookContent = String.$new('hook掉了')
return this.makeText(context,hookContent,time)
}
}
)
hook 结果
三:hook 掉 OkHttp 中的 Response
hook 掉 OkHttp 的 Response 构造方法,并打印出请求的 url 和响应码。
Java.perform(
function () {
var Response = Java.use("okhttp3.Response");
var init = Response.$init;
init.implementation=function (request,protocol,message,code,Handshake,Headers,ResponseBody, Response1, Response2, Response3, long1,long2, Exchange) {
if(ResponseBody){
console.log(request.url()+'-----'+code)
}
return this.$init(request,protocol,message,code,Handshake,Headers,ResponseBody, Response1, Response2, Response3, long1,long2, Exchange)
}
}
)
最终结果:
总结
通过步骤 1 学会了使用 frida 如何进行 hook 操作
通过步骤 2 学会了如何调用构造方法
通过步骤 2 学会了如何 hook 存在方法重载的函数
通过步骤 3 hook 了 okhttp 的 Response 构造方法,获得了请求 url 和响应码
除了讲解了常用语法之外,步骤 3 也为我们 hook 其他东西打开了空间。
作者:阳光下的小树
https://me.csdn.net/u013356254
每周送书活动还在继续,本周送书如下:
书籍简介:
主要讲解数据分析与大数据处理所需的技术、基础设施、核心概念、实施流程。从编程语言准备、数据采集与清洗、数据分析与可视化,到大型数据的分布式存储与分布式计算,贯穿了整个大数据项目开发流程。本书轻理论、重实践,目的是让读者快速上手!
”
上周分享最多者 小黑 。恭喜您中奖,请尽快私我地址噢!
推荐阅读
THANKS
- End -
点个“在看”必升职加薪喔!