安卓逆向之hook框架---Frida Hook Java层修改函数返回值

本期用到 :python+frida+模拟器
如果没布置Frida环境可以跳转此文: Hook神器: frida超详细安装教程

一、分析

APK:AliCrackme.apk
阿里安全比赛上的题目,目标无壳,一个简单的密码校验软件,只有输入正确的密码才能进入,错误密码会提示检验失败。
安卓逆向之hook框架---Frida Hook Java层修改函数返回值_第1张图片

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,然后随意输入密码,校验成功。

安卓逆向之hook框架---Frida Hook Java层修改函数返回值_第2张图片
如果想要自己动手练习的话,可以关注公众号回复: hookjava
获取练习的APK

console.log("公众号:虫术")
console.log("wx:spiderskill")
欢迎大家前来交流

你可能感兴趣的:(安卓逆向,爬虫经典案例,爬虫,frida,hook)