安卓逆向之hook框架---Frida Hook Java层修改函数返回值
本期用到 :python+frida+模拟器
如果没布置Frida环境可以跳转此文: Hook神器: frida超详细安装教程
一、分析
APK:AliCrackme.apk
阿里安全比赛上的题目,目标无壳,一个简单的密码校验软件,只有输入正确的密码才能进入,错误密码会提示检验失败。
2、JADX分析代码逻辑
直接搜索“验证码校验失败”锁定代码位置。
代码如下:
package com.yaotong.crackme;
import android.app.Activity;
import android.content.Intent;
import android.os.Bundle;
import android.view.View;
import android.view.View.OnClickListener;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;
public class MainActivity extends Activity {
public Button btn_submit;
public EditText inputCode;
public native boolean securityCheck(String str);
/* access modifiers changed from: protected */
public void onCreate(Bundle savedInstanceState) {
super.onCreate(savedInstanceState);
setContentView(R.layout.activity_main);
getWindow().setBackgroundDrawableResource(R.drawable.bg);
this.inputCode = (EditText) findViewById(R.id.inputcode);
this.btn_submit = (Button) findViewById(R.id.submit);
this.btn_submit.setOnClickListener(new OnClickListener() {
public void onClick(View v) {
if (MainActivity.this.securityCheck(MainActivity.this.inputCode.getText().toString())) {
MainActivity.this.startActivity(new Intent(MainActivity.this, ResultActivity.class));
return;
}
Toast.makeText(MainActivity.this.getApplicationContext(), "验证码校验失败", 0).show();
}
});
}
static {
System.loadLibrary("crackme");
}
}
代码很清晰做了一个if判断,函数securityCheck来验证输入的验证码是否正确,正确就进入下个Activity
,不正确提示 验证码校验失败。我们只要HOOK 函数securityCheck()无论传入什么值都返回true。
3、关门放Frida
#-*- coding:utf-8 -*-
import frida, sys
def on_message(message, data):
if message['type'] == 'send':
print("[*] {0}".format(message['payload']))
else:
print(message)
jscode = """
Java.perform(function () {
//调用类
//包+类
var fun = Java.use('com.yaotong.crackme.MainActivity');
//函数及传参
fun.securityCheck.overload('java.lang.String').implementation = function(str1) {
send("return true");
return true;
};
});
"""
process = frida.get_usb_device().attach('com.yaotong.crackme')
script = process.create_script(jscode)
script.on('message', on_message)
print('[*] Hook Start Running')
script.load()
sys.stdin.read()
启动模拟器上的frida-sever,然后随意输入密码,校验成功。
如果想要自己动手练习的话,可以关注公众号回复: hookjava
获取练习的APK
console.log("公众号:虫术")
console.log("wx:spiderskill")
欢迎大家前来交流
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步