本期用到 :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")
欢迎大家前来交流