吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 8399|回复: 37
收起左侧

[Android 原创] 【春节】解题领红包之三 {Android 中级题}解题过程分享

  [复制链接]
pk8900 发表于 2021-3-1 23:20
本帖最后由 pk8900 于 2021-3-1 23:31 编辑

0x01:使用工具
jadx-gui
IDA
AndroidKiller
0x01:初步探查
下载APK后,用jadx-gui打开,转到APK入口:入口:cn.pojie52.cm01.MainActivity
看到代码如下:

[Java] 纯文本查看 复制代码
public class MainActivity extends AppCompatActivity {
    public native boolean check(String str);

    static {
        System.loadLibrary("native-lib");
    }

    /* access modifiers changed from: protected */
    @Override // androidx.activity.ComponentActivity, androidx.core.app.ComponentActivity, androidx.appcompat.app.AppCompatActivity, androidx.fragment.app.FragmentActivity
    public void onCreate(Bundle bundle) {
        super.onCreate(bundle);
        setContentView(R.layout.activity_main);
        final EditText editText = (EditText) findViewById(R.id.flag);
        findViewById(R.id.check).setOnClickListener(new View.OnClickListener() {
            /* class cn.pojie52.cm01.MainActivity.AnonymousClass1 */

            public void onClick(View view) {
                String trim = editText.getText().toString().trim();
                if (trim.length() != 30) {
                    Toast.makeText(MainActivity.this, "flag格式错误,请重试", 0).show();
                } else if (MainActivity.this.check(trim)) {
                    Toast.makeText(MainActivity.this, "恭喜你,验证正确!", 0).show();
                } else {
                    Toast.makeText(MainActivity.this, "flag错误,再接再厉", 0).show();
                }
            }
        });
    }
}

发现关键函数check为so("libnative-lib")中函数,于是用IDA打开native-lib.so,查看。

[C] 纯文本查看 复制代码
__int64 __fastcall Java_cn_pojie52_cm01_MainActivity_check(_JNIEnv *a1, __int64 a2, __int64 a3)
{
  const char *v5; // x21
  size_t v6; // w0
  unsigned int v7; // w0
  __int64 v8; // x0
  _BYTE *v9; // x0
  //.....中间省略
  __int64 v29; // [xsp+78h] [xbp-28h]

  v29 = *(_QWORD *)(_ReadStatusReg(ARM64_SYSREG(3, 3, 13, 0, 2)) + 40);
  if ( a1->functions->GetStringUTFLength((JNIEnv *)a1, (jstring)a3) != 30 )
    return 0;
  v5 = a1->functions->GetStringUTFChars(a1, a3, 0LL);
  v28 = 0u;
  v27 = 0u;
  v26 = 0u;
  *(_OWORD *)dest = 0u;
  v6 = strlen(v5);
  strncpy(dest, v5, v6);
  a1->functions->ReleaseStringUTFChars((JNIEnv *)a1, (jstring)a3, v5);
  v7 = strlen(dest);
  sub_7B3C7C0B90(dest, v7, "areyousure??????");
  v8 = strlen(dest);
  v9 = sub_7B3C7C0D90(dest, v8);
  *(_OWORD *)v19 = unk_7B3C7C11A1;
  *(_OWORD *)&v19[16] = unk_7B3C7C11B1;
  *(_QWORD *)&v19[25] = unk_7B3C7C11BA;
//............中间省略
 while ( v9[v16] == v19[v16] )
  {
    if ( v9[v16] )
    {
      if ( ++v16 != 0x29 )
        continue;
    }
    v17 = 1;
    goto LABEL_9;
  }
  v17 = 0;
LABEL_9:
  free(v9);
  return v17;
}


以上为check函数,函数第一个参数是_JNIEnv *类型,可以读取JNI的C头文件,然后指定参数类型,即可解析GetStringUTFLength和GetStringUTFChars等函数。
看头部“GetStringUTFLength((JNIEnv *)a1, (jstring)a3) != 30 )”可以确定:flag长度为30,中间经过加密,最后进行对比的位置为:while ( v9[v16] == v19[v16] ),于是打算进行IDA调试,然而在安装APK时确遇到如下问题:
0x02:安装修改APK
第一次安装:
[Shell] 纯文本查看 复制代码
D:\programme\platform-tools>adb install X:\wuaipoji\2021\CrackMe.apk
Performing Streamed Install
adb: failed to install X:\wuaipoji\2021\CrackMe.apk: Failure [INSTALL_FAILED_OLDER_SDK: Failed parse during installPackageLI: /dat
a/app/vmdl397888885.tmp/base.apk (at Binary XML file line #7): Requires newer sdk version #26 (current version is #25)]

看提示为sdk版本高,无法安装,于是用AndroidKiller工具反编译,在apktool.yml文件中修改最低skd版本:
[Plain Text] 纯文本查看 复制代码
sdkInfo:
  minSdkVersion: '24'
  targetSdkVersion: '30'
sharedLibrary: false
sparseResources: false

minSdkVersion: '26'修改为:minSdkVersion: '24'
打包安装,出现错误如下:
[Plain Text] 纯文本查看 复制代码
adb: failed to install D:\CrackTools\AndroidTools\AndroidKiller_v1.3.1org\projects\CrackMe\Bin\CrackMe_killer.apk: Failure [INSTAL
L_FAILED_INVALID_APK: Failed to extract native libraries, res=-2]

百度查找,解决方法,修改AndroidManifest.xml中的application标签中的: android:extractNativeLibs="true",或将该属性去掉。重新编译后安装成功。
0x02:调试SO文件
在IDA中附加调试libnative-lib.so,在check函数中下断点:输入flag:123456789012345678901234567890,点击验证,在check函数中断。发现在关键对比(while ( v9[v16] == v19[v16])中:
V9="4Gg1pHHQ8N3nGMbAVaX9s3XnwNCzMxgPDVU="
V19="5Gh2/y6Poq2/WIeLJfmh6yesnK7ndnJeWREFjRx8"
经对比发现:对字符串“123456789012345678901234567890”进行RC4加密,密钥为:areyousure?????? 则加密结果为:4Gg1pHHQ8N3nGMbAVaX9s3XnwNCzMxgPDVUAhRd9,仅后面几位与V9不同。
Image2.png
于是对V19进行RC4解密:
Image3.png
得出flag为:52pojieHappyChineseNewYear2021
RC4在线加解密测试网站:http://www.metools.info/code/c95.html
鉴于输入123456789012345678901234567890后得到的字符串V9与RC4加密结果不同,又测试了输入:111111111122222222223333333333,进行测试,发现V9的值为:4Gs3oXXX9tTvGcXAVKP6t3Dty9KxMhgIC1AEjh1+,与网站测试结果一致,估计是CRACKME在实现RC4算法时哪个步骤有细微变动所致。具体算法部分没有进行还原。
能解出这个CRACKME,运气占了一大部分,如果是非标准算法,那就要分析主要的算法函数了。
很久没有发贴了,写的不对的地方还请指正。
附上CRACKME文件,方便大家下载练手。 CrackMe.rar (1.07 MB, 下载次数: 74)

免费评分

参与人数 23威望 +2 吾爱币 +118 热心值 +18 收起 理由
w599421343 + 1 优秀本体
Amalwayshere_U + 1 + 1 我很赞同!
JIAN_ + 1 鼓励转贴优秀软件安全工具和文档!
xsk666 + 1 谢谢@Thanks!
SIMPLE43 + 1 鼓励转贴优秀软件安全工具和文档!
nzpz + 1 我很赞同!
swz7852151 + 1 + 1 热心回复!
努力加载中 + 1 + 1 谢谢@Thanks!
KylinYang + 1 + 1 我很赞同!
sheele + 1 用心讨论,共获提升!
Walnut. + 1 我很赞同!
金泽 + 1 + 1 热心回复!
louchen94 + 1 + 1 我很赞同!
qtfreet00 + 2 + 100 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
抱薪风雪雾 + 1 + 1 谢谢@Thanks!
itkmzhao + 1 + 1 用心讨论,共获提升!
sherppard + 1 + 1 我很赞同!
违心 + 1 + 1 热心回复!
发抖的小喵喵 + 1 + 1 热心回复!
q200492sg + 1 我很赞同!
芽衣 + 1 之前我找的网站都解密不成功,我以为搞错了
xaibin + 1 + 1 谢谢@Thanks!
chinawolf2000 + 1 + 1 热心回复!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

霍洛 发表于 2021-3-6 11:09
本帖最后由 霍洛 于 2021-3-6 11:28 编辑

请问大佬,断点应该下在什么位置?我下了断点不知道为什么输入30个字符没断下来,不知道哪里出了问题
另外,androidkiller一直卡在“正在反编译APK源码,请稍等”(我直接安装成功了,所以没用androidkiller改)
1.png
2.png
 楼主| pk8900 发表于 2021-3-6 18:46
霍洛 发表于 2021-3-6 11:09
请问大佬,断点应该下在什么位置?我下了断点不知道为什么输入30个字符没断下来,不知道哪里出了问题{:1_90 ...

断点位置没错,估计是IDA调试的哪个环节的问题,adb shell am start -D 启用调试模式,我用的XPosed模块。
nagra 发表于 2021-3-1 23:23
头像被屏蔽
a15119497456 发表于 2021-3-2 00:02
提示: 作者被禁止或删除 内容自动屏蔽
andyyang886 发表于 2021-3-2 07:23
蒙蔽树下蒙蔽果,还有就是你懂的!
whbshj 发表于 2021-3-2 07:52
看不懂啊啊啊啊
wzwzaozao 发表于 2021-3-2 07:53
等级低,看不懂。好好学习吧
奇迹先生 发表于 2021-3-2 07:59
这个好高端,赞楼主,慢慢研究
zlb7758 发表于 2021-3-2 08:27
不懂哦,小白一枚!
lili2312280 发表于 2021-3-2 08:57
不错不错呀,膜拜大佬!!!
q200492sg 发表于 2021-3-2 09:04
看到一半有点复杂,马克一下
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-11-15 11:40

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表