frida hook的一些尝试
Posted 「已注销」
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了frida hook的一些尝试相关的知识,希望对你有一定的参考价值。
frida 真的是app逆向的神器,当你遇上他的时候,就会爱上他。
这篇文章主要是通过自己写个app的demo,然后一步步的hook它。之后会有系列的文章介绍frida对其他app的应用。
知识准备
环境
- as android开发工具
- pycharm
- 小米手机一步 (root)
- android和python的frida环境
描述
之前在如何让app不走代理的文章中写了一个小的app的demo。现在我准备一步一步的hook这个demo。以便能加深对frida 的理解。
图
appdemo 源码
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();
步骤1 hook掉OnClick方法
- js代码
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;
)
步骤2 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)
)
步骤3 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其他东西打开了空间。
以上是关于frida hook的一些尝试的主要内容,如果未能解决你的问题,请参考以下文章