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

news/2024/7/19 12:25:12 标签: 爬虫, frida, hook

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

http://www.niftyadmin.cn/n/997513.html

相关文章

MathType6.9按章节插入编号

先插入Chapter,然后修改break主要是该起始编号。 这样话会用一行红色红代码,选中,邮件字体,然后在格式里选择隐藏就好了,这个不能删除。

安卓逆向脱壳:Frida-DEXDump一吻杀一个人,三秒脱一个壳

本期用到 :pythonfrida模拟器Frida-DEXDump 如果没布置Frida环境可以跳转此文: Hook神器: frida超详细安装教程 一、前言 APP 加固发展到现在已经好几代了,从整体加固到代码抽取到虚拟机保护,加固和脱壳的方案也逐渐趋于稳定。随着保护越来越强&#xf…

linux bash $()和${}和$(())和(())

2019独角兽企业重金招聘Python工程师标准>>> $()和${}和$(())和(()) $()和${}的用法: 在 bash shell 中,$( ) 与 (反引号) 都是用来做命令替换用(command substitution)的。而 $( ) 并不见的每一种 shell 都能使用,若你用 bash2…

设置图片和文字的垂直居中

设置图片和文字的垂直居中。vertical-align:middle;图片竖向居中,然后文字就可以和图片对齐。 转载于:https://www.cnblogs.com/ganchuanpu/p/6221047.html

Linux + ProxyPool 搭建属于爬虫代理IP池

前言: 当爬虫达到一定速度时,大家都会遇到封Ip的情况,而搭建代理ip池是解决的最好方法,网络上有很多优秀的付费代理,但是作为白嫖党的我们又怎么能付钱那,本文将教会大家用一个成熟的开源项目搭建代理池。…

P1082 找朋友

描述 童年的我们,对各种事物充满了好奇与向往。这天,小朋友们对数字产生了兴趣,并且想和数字交朋友。可是,怎么分配这些数字才能使得每个小朋友都唯一地找到一个数字朋友呢?C小朋友说:咱们按自己…

插件绑定

2019独角兽企业重金招聘Python工程师标准>>> Maven的生命周期与插件相互绑定,用以完成实际的构建任务。具体而言,是生命周期的阶段与插件的目标相互绑定,以完成某个具体的构建任务。例如项目编译这一任务,它对应了defa…

python链接mysql数据库

import MySQLdb connMySQLdb.connect(host127.0.0.1,userroot,passwd123456,db08day5) curconn.cursor() #打开数据库 #提取数据 reCountcur.execute(select * from admin) data cur.fetchall() print reCount print data #关闭数据 cur.close() conn.close()转载于:https://bl…