【Android逆向】破解看雪 test1.apk

android,逆向,破解,test1,apk · 浏览次数 : 46

小编点评

1. **获取 APK**: - 使用链接获取 libroysue.apk。 - 在浏览器中打开获取链接,并下载 APK 文件。 2. **安装 APK**: - 安装下载的 APK 文件到手机上的应用程序目录。 - 启动手机,找到应用程序目录,并安装 APK 文件。 3. **运行程序**: - 启动手机。 - 打开应用程序目录,找到 libroysue.apk 文件。 - 单击运行程序。 4. **看到提示信息**: - 程序将显示一个提示消息,根据结果进行解码。 - 为了确定结果,请检查提示信息中的“flag”字段。 5. **结果分析**: - “flag”字段将包含一个 Base64编码的字符串。 - 通过对该字符串进行解码,可以获取其实际值。 - 解编码后的值将是 “r0ysuell0vey0us0muchadb shell input text \"r0ysuell0vey0us0much\"”。 6. **结论**: - 该程序对传入的字符串进行 base64 处理,并解码得到一个可执行的命令。 - 该命令用于运行一个 shell 输入文本,其中包含攻击性的命令。

正文

1. 获取apk,并安装至手机

apk 获取地址: https://www.kanxue.com/work-task_read-800624.htm

adb install -t test1.apk
# 这个apk必须加-t ,否则会报错

2. 只有一个输入框,随便输入内容,提示壮士继续加油

3. 将apk拖入到jadx中观察

public class MainActivity extends AppCompatActivity {
    TextView message_tv;
    EditText password_et;
    EditText username_et;

    public static native String doMath(byte[] bArr);

    static {
        System.loadLibrary("roysue");
    }

    /* JADX INFO: Access modifiers changed from: protected */
    @Override // androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity, androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, android.app.Activity
    public void onCreate(Bundle savedInstanceState) {
        super.onCreate(savedInstanceState);
        setContentView(R.layout.activity_main);
        this.username_et = (EditText) findViewById(R.id.editText);
        this.message_tv = (TextView) findViewById(R.id.textView);
        findViewById(R.id.button).setOnClickListener(new View.OnClickListener() { // from class: com.roysue.easyso1.MainActivity.1
            @Override // android.view.View.OnClickListener
            public void onClick(View v) {
                String res = MainActivity.doMath(MainActivity.this.username_et.getText().toString().getBytes());
                if (res.compareTo("cjB5c3VlbGwwdmV5MHVzMG11Y2g=\n") == 0) {
                    MainActivity.this.message_tv.setText("恭喜你!");
                } else {
                    MainActivity.this.message_tv.setText("壮士请继续加油!");
                }
            }
        });
    }
}

4. 从代码中疑似感觉这个字符串是个base64加密的字符串,看看native中的逻辑确定一下猜想

5. 加压apk将libroysue.so拖入IDA中进行观察

【1】导出表中搜索 doMath函数,发现没有,说明是动态注册,搜索JNI_OnLoad
jint JNI_OnLoad(JavaVM *vm, void *reserved)
{
  JNIEnv *env; // [sp+10h] [bp-10h] BYREF

  env = 0;
  if ( _JavaVM::GetEnv(vm, (void **)&env, 65542) )
    return -1;
  if ( !env )
    _assert2(
      "/root/Desktop/202104test/easyso1/app/src/main/cpp/roysue.cpp",
      60,
      "jint JNI_OnLoad(JavaVM *, void *)",
      "env != nullptr");
  if ( registerMethods(env, "com/roysue/easyso1/MainActivity", method_table, 1) )
    return 65542;
  else
    return -1;
}

说明关联的函数在 method_table中,点击观察 method_table

.data:00004000                               ; ===========================================================================
.data:00004000
.data:00004000                               ; Segment type: Pure data
.data:00004000                               AREA .data, DATA
.data:00004000                               ; ORG 0x4000
.data:00004000                               ; JNINativeMethod method_table[1]
.data:00004000 09 26 00 00 10 26 00 00 B1 09+_ZL12method_table JNINativeMethod <aDomath, aBLjavaLangStri, _Z3mmmP7_JNIEnvP7_jclassP11_jbyteArray+1>
.data:00004000 00 00                                                                 ; DATA XREF: JNI_OnLoad+56↑o
.data:00004000                                                                       ; JNI_OnLoad+58↑o
.data:00004000                                                                       ; .text:off_B74↑o
.data:00004000                                                                       ; mmm(_JNIEnv *,_jclass *,_jbyteArray *) ...
.data:0000400C                               ; unw_addr_space_t unw_local_addr_space
.data:0000400C 10 40 00 00                   unw_local_addr_space DCD _ZN9libunwind17LocalAddressSpace17sThisAddressSpaceE ; libunwind::LocalAddressSpace::sThisAddressSpace
.data:0000400C                               ; .data ends
.data:0000400C

可以看到 Domath 关联的函数叫mmm(aDomath,aBLjavaLangStri,_Z3mmmP7_JNIEnvP7_jclassP11_jbyteArray+1)
点击_Z3mmmP7_JNIEnvP7_jclassP11_jbyteArray,观察

jobject __fastcall mmm(JNIEnv *env, jclass clazz, jbyteArray bytearray)
{
  _jmethodID *StaticMethodID; // r0
  _jclass *clazza; // [sp+10h] [bp-18h]

  clazza = _JNIEnv::FindClass(env, "android/util/Base64");
  StaticMethodID = _JNIEnv::GetStaticMethodID(env, clazza, "encodeToString", "([BI)Ljava/lang/String;");
  return _JNIEnv::CallStaticObjectMethod(env, clazza, StaticMethodID, bytearray, 0);
}

由此可得,确实是对传入的字符串进行base64处理,然后对结果进行比对,
于是解码可得flag为r0ysuell0vey0us0much

adb shell input text "r0ysuell0vey0us0much" 提交通过

与【Android逆向】破解看雪 test1.apk 相似的内容:

【Android逆向】破解看雪 test1.apk

1. 获取apk,并安装至手机 apk 获取地址: https://www.kanxue.com/work-task_read-800624.htm adb install -t test1.apk # 这个apk必须加-t ,否则会报错 2. 只有一个输入框,随便输入内容,提示壮士继续加油 3.

【Android逆向】破解看雪test3.apk方案一

1. test3.apk 安装到手机 2. 发现其实际逻辑和之前的test2.apk基本一致,逆向so查看到加入了一些检查逻辑 代码: jstring __fastcall fuck(JNIEnv *env, jclass jcls, jstring str_) { ...... if ( !str

【Android逆向】破解看雪test3.apk方案二

方案二就是要hook那三个条件,不让追加字符串变成false v20 = "REAL"; clazz = _JNIEnv::FindClass(env, "android/os/Build"); fieldID = _JNIEnv::GetStaticFieldID(env, clazz, "FIN

【Android逆向】破解看雪9月算法破解第一题

1. 安装apk到手机 2. 随意输入账号和密码,点击register,报错crackme1:ERROR 3. 将apk拖入到jadx中进行观察 public native String register(String str); static { System.loadLibrary("nativ

【Android逆向】破解看雪9月算法破解第二题

1. apk安装到手机,一样的界面,随便输入一样的报错 2. apk拖入到jadx重看看 public native String sha1(String str); static { System.loadLibrary("native-lib"); } /* JADX INFO: Access

【Android逆向】破解看雪9月算法破解第三题

这题的目标是算法还原,并写出注册机 1. 9月份算法第一题.apk 安装到手机 2. 随意输入账号密码,提示错误 3. apk拖入到jadx中 public native boolean register(String str, String str2); static { System.loadL

【Android逆向】破解黑宝宝apk,绕过签名校验

这是52pojie的一道题,实现输入任何密码都可以登录成功 他知道你最近在学习Android逆向 他想在游戏上线前让你测试一下他新加的签名验证是否能防住别人的破解。 下面是李华编写的黑宝宝apk 链接:https://pan.baidu.com/s/1h6pX2ARE3qtiKiYbcnJ-3g 密

【Android逆向】frida 破解 jwxdxnx02.apk

apk 路径: https://pan.baidu.com/s/1cUInoi 密码:07p9 这题比较简单,主要是用于练习frida 1. 安装apk到手机 需要输入账号密码 2. 使用jdax 查看apk package hfdcxy.com.myapplication; import andr

[Android逆向]Exposed 破解 jwxdxnx02.apk

使用exposed 遇到了一些坑,这里记录一下 源码: package com.example.exposedlesson01; import de.robv.android.xposed.IXposedHookLoadPackage; import de.robv.android.xposed.X

[Android 逆向]frida 破解 切水果大战原版.apk

1. 手机安装该apk,运行,点击右上角礼物 提示 支付失败,请稍后重试 2. apk拖入到jadx中,待加载完毕后,搜素失败,找到疑似目标类MymmPay的关键方法payResultFalse 4. adb logcat 或者androidstudio 查看该进程的日志,发现以下日志 com.mf