android-crackme-07

本文介绍了如何使用Xposed框架对android-crackme-07进行hook破解。通过hook checkSN()函数,实现了登录验证的绕过。详细讲述了Xposed框架的工作原理,模块开发流程,包括添加XposedBridgeApi库,AndroidManifest.xml配置,以及Hooks和CheckSNHook类的编写。最后,提到了生成和安装hook模块的apk文件,并展示了成功破解的效果。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

android-crackme-07

这次打算利用hook技术来实现破解效果,主要是相对其中的原理和模块编写流程进行以此记录。

首先还是链接

crackme:

链接:https://pan.baidu.com/s/1a4YDW54mKIXYv6d1pqX5YQ 
提取码:kka5 
 

针对这个crackme的hook程序:

链接:https://pan.baidu.com/s/16xBy5AC7PO-qpKeZ2olOpQ 
提取码:py67 
 

项目代码和hook代码

链接:https://pan.baidu.com/s/1Hp6ivJgIEEofczcnCpM3SQ 
提取码:dcob 

 

先介绍一下Xposed框架

Xposed 是一个 Android 平台上的动态劫持框架,通过替换手机上的孵化器 zygote 进程为 Xposed 自带的 zygote,使其在启动过程中加载 XposedBridge.jar,模块开发者可以通过 jar 提供的 API 来实现对所有的 Function(这里可以理解为方法) 的劫持,在原 Function 执行的前后加上自定义代码。

Xposed框架是一款可以在不修改APK的情况下影响程序运行(修改系统)的框架服务,基于它可以制作出许多功能强大的模块,且在功能不冲突的情况下同时运作。Xposed理论上能够hook到系统任意一个Java进程,由于是从底层hook,所以需要root权限,并且每次更新都要重新启动,否则不生效 。

 

crackme

首先是crackme的部分

编写简单的登陆验证功能:

emmmm     这里就直接把代码贴上来吧

package com.android.crackme07;

import android.content.pm.PackageManager;
import android.support.v7.app.AppCompatActivity;
import android.os.Bundle;
import android.view.View;
import android.widget.Button;
import android.widget.EditText;
import android.widget.Toast;

import java.security.NoSuchAlgorithmException;

public class MainActivity extends AppCompatActivity {
    private EditText edit_userName;
    private EditText edit_passWord;
    private Button button_register;

    @Override
    protected void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);

        edit_userName = (EditText)findViewById(R.id.edit_username);
        edit_passWord = (EditText)findViewById(R.id.edit_password);
        button_register = (Button)findViewById(R.id.button_OK);
        button_register.setOnClickListener(new View.OnClickListener(){

            public void onClick(View v){
                if(!checkSN(edit_userName.getText().toString().trim(),edit_passWord.getText().toString().trim())){
                    Toast.makeText(MainActivity.this, R.string.unsuccessed, Toast.LENGTH_SHORT).show();
                }else{
                    Toast.makeText(MainActivity.this,R.string.successed, Toast.LENGTH_SHORT).show();
                }
            }
        });
    }

    private boolean checkSN(String username, String password){

            if((username == null) || (username.length() == 0))
                return false;
            if((password == null) || (password.length() == 0))
                return false;

            if("admin".equals(username)){
                if("123456".equals(password))
                    return true;
        }
        return false;
    }
}

可以看到,程序的功能就是把输入的username和password作为参数,使用checkSN()函数进行验证,而checkSN()函数的功能就是将这两个参数和特定值进行比较,从而进行身份验证。

模拟器下,运行结果示例(此处输入为:abc  /  123):

Hook

很明显我们主要是需要修改checkSN()函数从而实现破解效果

基于Xposed框架,编写模块实现针对这个函数的Hook

Xposed框架的下载安装这里就不说了,主要是说模块编写的流程,以及可能遇到的问题

 

首先在app目录下新建文件夹lib,然后将XposedBridgeApi-54.jar添加到该目录下并右键选择“add as library”

这里我也是结合了许多其它文章中对这里的描述,可能的原因是:“如果将jar包放置到libs目录下,可能会产生错误,估计Xposed作者在其框架内部也引用了BrideApi,这样操作能避免重复”

 

然后在AndroidMainfest.xml中添加代码

        <meta-data
            android:name="xposedmodule"
            android:value="true" />
        <!--模块描述-->
        <meta-data
            android:name="xposeddescription"
            android:value="a hook demo" />
        <!--模块版本-->
        <meta-data
            android:name="xposedminversion"
            android:value="30" />

1.xposedmodule属性设置为true,表示这是一个xposed模块

2.xposeddescription是指对这个模块的介绍

3.xposedminversion表示此模块支持的最低版本

 

 

接下来就是hook模块主要代码的编写了

创建类Hooks

在这里主要是实现包名的过滤

public class Hooks implements IXposedHookLoadPackage{
    final String package_name = "com.android.crackme07";
    @Override
    public void handleLoadPackage(final XC_LoadPackage .LoadPackageParam lpparam) throws Throwable{
        if(!lpparam.packageName.equals(package_name)){
            return;
        }
        new CheckSNHook(lpparam.classLoader);
    }
}

创建类CheckSNHook,这里就是我们实现hook功能的主要代码了

import android.util.Log;

import de.robv.android.xposed.XC_MethodHook;
import de.robv.android.xposed.XposedBridge;
import de.robv.android.xposed.XposedHelpers;

public class CheckSNHook {
    static final String TAG="hooktemp";

    public CheckSNHook(ClassLoader cl){
        super();
        XposedBridge.log("hooking checkSN");
        try{
            Class clz = (Class<?>) XposedHelpers.findClass("com.android.crackme07.MainActivity",cl);
            XposedHelpers.findAndHookMethod(clz,"checkSN",String.class,String.class,new XC_MethodHook(){
                @Override
                protected void afterHookedMethod(XC_MethodHook.MethodHookParam param) throws Throwable{
                    XposedBridge.log("checkSN afterhooked.");
                    String s1 = (String) param.args[0];//username
                    String s2 = (String) param.args[1];//password

                    param.setResult(true);

                    super.afterHookedMethod(param);
                }
            });
        }catch(Exception e){
            e.printStackTrace();
        }
        XposedBridge.log("hook checkSN done.");
    }
}

然后在src/main目录下创建assets,并在assets文件夹中添加文件xposed_init,在其中声明主入口类

xposed_init的文件内容为  包名.入口类名    此处为 com.android.hook07.Hooks

添加后截图示例:

 

编写完成后,记得检查一下jar的依赖选项

在project structure中查看依赖选项,使用compile only依赖,hook失败的话,有可能就是这里选择有问题

 

简单xposed模块编写流程大致如上,生成apk文件,安装后,在xposed模块中勾选后重启设备

再次运行crackme07程序,输入,查看弹窗结果

此处输入为  abc  /  123

 

关于xposed模块编写的文章推荐:

https://www.freebuf.com/articles/terminal/114910.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值