吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

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

[Android CrackMe] 【CrackMe】破解游戏——你敢挑战吗?

  [复制链接]
JiGuro 发表于 2026-5-17 01:51
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。

很多人问最近我在做什么,其实我一直在研究 CrackMe
今天终于把成品做出来了,如图:



软件名叫 Deep Archive {JiGuro} ,对应软件内的剧情。页面相对比较简洁,点“任务简报”可以查看详细信息,在密钥输入框中输入flag,再点击下方的按钮检查,检查结果会在下方的命令行窗口中输出:



CrackMe 使用了 Native C++ 编译,破解起来相对没有纯 Java 那么简单。Java 代码和 C 代码都进行了部分混淆。同时,也加入了一些轻微的反调试。不过我都故意留了破绽,应该很好过。

玩法很简单,只需要找出真正的 flag (密钥) 即可。当然,如果只是通过修改 APK 文件成功的那可不行哦。如果有可能的话,各位也可以把自己对本软件算法的分析详细分享出来,这是最好的。

与其说是 CrackMe ,更不如说它是一个游戏。CrackMe 中的UI、故事剧情都是我精心设计好的,如果获得了正确的flag,可以触发隐藏剧情和效果。

这里为了节省时间,我先把故事的背景贴出来:
[ 时间 ]

公元 2157 年

[ 背景 ]

早在 10 年前,人类已经可以将意识上传至轨道服务器,并在宇宙中长期漂流,实现了某种意义上的永生。

一位代号为 “JiGuro” 的程序员,编写了意识上传和恢复的底层代码,也成为了该项目的开创者。他立志要上传所有人类的意识,并将这个宏伟的计划命名为 “深空记忆库计划(Deep Archive Project)”。

项目一开始运转良好,源源不断的人选择把自己的记忆上传,托管在轨道空间站 “厄瑞玻斯” (EREBOS,内部编号:45524542)上,并在空间站的休眠仓进行休眠,直到他们设定的时间为止。
一切看起来是那么的美好,项目未来充满了无限的希望。

不过,好景不长,一次致命失误使项目失控。
空间站与地球失联,在宇宙中孤单漂泊。
所有参与者的意识数据被永久封存,JiGuro 也不知身在何处,至今生死不明。

你是空间站内,最后仍能行动的工程师。你主动背上了解开程序、恢复意识的任务,即使你自己的记忆也已丢失。只有恢复了所有意识信息,空间站才有机会与地球重连并返回地球。

为了防止数据库被入侵,JiGuro 留下了最后一道验证程序,至今无人破解。你只有拿到密钥获取系统最高权限后,才能恢复记忆。
你拿起手边的电脑和手机,打开了这个尘封已久的程序,准备接受来自 JiGuro 的挑战。



CrackMe 的难度我给了四颗星,★★★★☆ 较难,主要是因为有些地方可能比较难以想到。但是只要你想到了,就会变得非常简单,而且成就感满满。可以说,这一款 CrackMe 是对你的技术和思路的双重考验
所以在这里我要强调一下:程序中的任何文字和故事情节都很重要,每句话都可能藏着解题的关键。
千万不要偷懒不看故事情节哦!

更多详细规则,大家可以下载软件后查看。
这款 CrackMe 将会在 吾爱破解论坛、MT论坛、酷安 等渠道先后发布,第一个解答出来并给出思路的 (以发帖时间为准) 有奖励哦!(什么奖励?虽然我也拿不出什么东西,但MT管理器月卡、BetterVia内测权限还是可以给的)

希望论坛里的大佬们都可以行动起来,挑战一下自己。就算是小白,也可以尝试一下,说不定就被你攻破了
我相信,你一定可以的。

如果过一段时间后还没有人能给出答案,那我只好亲自下场了,等有空的时候再发几篇帖子详细分析一下。
CrackMe 的源码也会开源,仓库为:https://github.com/JiGuroLGC/Deep-Archive ,各位可以提前关注。

最后,祝各位玩得愉快!
欢迎各位在评论区多多留言讨论

软件下载链接:
https://jiguro.lanzouw.com/igo0q3pmn90d 密码:8888
请各位切换浏览器UA至电脑版下载

最后声明:
本软件内剧情、故事内容均为虚构,如有雷同,纯属巧合
该逆向游戏仅用作学习交流使用,请勿过度解读
版权所有 © 2026 JiGuro
禁止用作商业及违法用途

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?注册[Register]

x

免费评分

参与人数 9吾爱币 +10 热心值 +8 收起 理由
lcp427 + 1 我很赞同!
lyl610abc + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
111mz + 1 + 1 我很赞同!
3y3s + 1 + 1 做得很好汉
FZZZP + 1 + 1 我很赞同!
zxcvbnm12 + 1 看着有点好玩
xhlbudd + 1 + 1 我很赞同!
arctan1 + 1 + 1 热心回复!
xxxlsy + 1 + 1 热心回复!

查看全部评分

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

lyl610abc 发表于 2026-5-20 00:53
本帖最后由 lyl610abc 于 2026-5-20 00:56 编辑

拿 AI 跑了下,算是入门级,让 AI 写了个 writeup (含人量百分之 0 ε=ε=ε=┏(゜ロ゜;)┛ 逃)

Deep Archive Writeup

题目结论

  • 伪 flag:
    • flag{N0_0ne_Can_R3v3rse_Th1s_Pr0gr4m!}
  • 真 flag:
    • flag{Cr@ckme_JigUr0_5ZPoJie_MT8B5_2O26:05:1G_xV9qL7n_L0L}

总览

这题最容易被带偏的地方,是 native 里同时存在两条链:

  1. 一条会还原出很像最终答案的伪 flag,并且还能继续解出隐藏日志和提示图。
  2. 另一条才是真正的校验链,最终返回系统最高权限。

关键点在于:伪 flag 不是纯干扰,它是后续解密真正线索的钥匙。

1. 真实校验点在哪里

Java 层会调用 native 的 sub_968096 作为输入总入口,对应:

  • verify_input_968096
  • 地址:0x2fa8

这条函数的逻辑很清楚:

  1. 先做反调试 / 反 Frida / 反 Xposed 检查。
  2. 输入长度必须在 5..256 之间。
  3. 如果命中 sub_350158,返回 2,进入 hidden-note 分支。
  4. 否则调用 sub_375940 计算 64 位十六进制 digest。
  5. digest 命中常量时返回 1,进入真成功分支。

也就是说:

  • 返回 2:说明输入是伪 flag
  • 返回 1:说明输入是真 flag

2. 伪 flag 的来源

native 里还有两个关键函数:

  • sub_132918:直接返回一条内置字符串
  • sub_350158:校验用户输入是否等于那条字符串

它们都会做同一件事:

  1. 拼接一段 base64:
9r28/DC8PBsB+ZaxUQ4O+MLiq6g5gWkbZf/CnU0/Epf3o+n2ao8=
  1. base64 解码。
  2. 再和内置 16 字节 XOR key 异或。
  3. 还原出伪 flag:
flag{N0_0ne_Can_R3v3rse_Th1s_Pr0gr4m!}

所以前半段静态分析拿到的 flag,其实只是 hidden 分支的入口钥匙。

3. hidden-note 分支怎么走

当输入伪 flag 时,sub_968096 返回 2,Java 层进入隐藏分支:

  1. 先调用 sub_460339
  2. 解出 9 条隐藏日志
  3. 然后读取 R.raw.rundll32
  4. 把资源字节和伪 flag 一起传给 sub_979970
  5. 解出一张 note 图片

这 9 条日志内容如下:

> [ SYSTEM ] 检测到有效记忆碎片...
> [ SYSTEM ] 身份哈希部分匹配
> [ INFO ] 同步率:17%
> [ ERROR ] 同步错误!
> [ WARNING ] 当前凭证已被标记为:[伪造权限]
> [ INFO ] 检测到部分信息痕迹
> [ INFO ] 正在恢复隐藏文件...
> [ INFO ] 正在解密历史日志...
> [ RUN ] vim /deep-archive/recovery/notes/note_21470327.log

这几句已经明确说明:

  • 当前凭证是伪造的
  • 但它能恢复隐藏文件
  • 也就是:伪 flag 不是终点,而是提示链的入口

4. rundll32 / res/4t 是怎么解的

在签名清单里能看到一个资源名 res/4t,经过 apktool 还原后,对应的是:

  • res/raw/rundll32

对应的 native 解密函数是 sub_979970,逻辑不是 AES,而是:

  1. 输入长度至少 521
  2. 把前 520 字节挪到文件末尾
  3. 然后用伪 flag 整串循环异或
  4. 检查结果是否为 PNG/JPEG magic

写成一句话就是:

先轮转 520 字节,再用伪 flag 循环 XOR

解出来是一张伪装成 Vim 界面的 note 图。

5. note 图真正提示了什么

note 图里最关键的几句是:

  • 第一个密钥是伪造的,但不是毫无意义
  • 真正的密钥不该隐藏在混淆的逻辑之中
  • 真相不在逻辑迷宫里
  • 要关注开发者无法擦除的签名
  • AES-256-CBC
  • EREB0S

这几句的意思是:

  1. 不要继续只盯 native 控制流。
  2. 真 payload 不在普通资源、普通代码里。
  3. 应该去原始 APK 容器的签名区域找东西。

6. 真正的 payload 在 APK Signing Block 里

这里是整题最关键的一步。

如果只有 jadx_outapktool_out,是看不到这部分数据的,因为:

  • APK Signing Block 位于 ZIP Central Directory 之前
  • 它不是普通 ZIP entry
  • 解包工具不会把它还原到目录树里

对原始 APK 直接读尾部,可以找到:

  • APK Sig Block 42

继续解析 signing block 内的 entries,会发现一个自定义块:

  • ID:0x45524542

把它按 ASCII 看,就是:

EREB

这和剧情里的:

  • EREBOS
  • 内部编号 45524542

正好对上。

这个自定义块里存的是一段 JSON:

{"seed":"RVJFQjBTXzIxNDcwMzI3IQ==","archive":"RsxG28SwnXELKT6/i42/+npxR+t4H/ToXMxLpRrQZk9L8tVZQU5wVMjpI13kkxZlXgP2q9b7KEL2NRlfgXsy2g=="}

7. seedarchive 的作用

7.1 seed

seed base64 解码后得到:

EREB0S_21470327!

长度正好是 16 字节,因此可以直接作为:

  • AES-CBC 的 IV

7.2 AES key

伪 flag 去掉外层 flag{} 后得到:

N0_0ne_Can_R3v3rse_Th1s_Pr0gr4m!

长度正好是 32 字节,因此可以直接作为:

  • AES-256 的 key

7.3 archive

archive base64 解码后得到 AES 密文。

于是整个解密参数就齐了:

  • 算法:AES-256-CBC
  • Key:N0_0ne_Can_R3v3rse_Th1s_Pr0gr4m!
  • IV:EREB0S_21470327!
  • Ciphertext:archive base64 解码结果

8. 解密得到真 flag

使用上述参数解密 archive,去掉 PKCS#7 padding,得到:

flag{Cr@ckme_JigUr0_5ZPoJie_MT8B5_2O26:05:1G_xV9qL7n_L0L}

这条字符串也能反过来通过 native 真校验:

  • sub_375940(true_flag) 的结果
  • 正好等于 sub_968096 比较的四段目标 digest

因此这是最终 flag。

9. 题目设计总结

这题的设计非常完整,分成了两层:

第一层:伪 flag 线

  • sub_132918 / sub_350158
  • 还原出伪 flag
  • 用伪 flag 解出隐藏日志与 note 图

第二层:真 flag 线

  • note 图提示不要只盯逻辑本身
  • 转去原始 APK 的 Signing Block
  • 在自定义块里拿到 seedarchive
  • 用伪 flag 内核作为 AES-256 key
  • 最终解出真 flag

所以伪 flag 的定位不是“纯干扰项”,而是:

用来打开真正解题路径的中间钥匙

10. 最终答案

flag{Cr@ckme_JigUr0_5ZPoJie_MT8B5_2O26:05:1G_xV9qL7n_L0L}

免费评分

参与人数 1吾爱币 +1 收起 理由
JiGuro + 1 用心讨论,共获提升!

查看全部评分

Victorique_W 发表于 2026-5-17 22:13
陨落星辰 发表于 2026-5-18 05:50
这个题里,前面 sub_350158 / sub_132918 生成的flag{N0_0ne_Can_R3v3rse_Th1s_Pr0gr4m!} 是干扰项,不是最终 flag。
真正的校验点在 native 层 libdeeparchive.so 里的 sub_968096,最终的flag是:
flag{Cr@ckme_JigUr0_5ZPoJie_MT8B5_2O26:05:1G_xV9qL7n_L0L}

免费评分

参与人数 1吾爱币 +1 收起 理由
JiGuro + 1 用心讨论,共获提升!

查看全部评分

昧光 发表于 2026-5-18 14:37
没有人写怎么破解的过程吗
头像被屏蔽
gd6930085 发表于 2026-5-17 07:58
提示: 作者被禁止或删除 内容自动屏蔽
yunsunyun 发表于 2026-5-17 02:39
我试一试

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

cadd 发表于 2026-5-17 07:11
好作品.学习一下

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

孤狼微博 发表于 2026-5-17 11:14
有难度,我搞不定SO也看了
loka 发表于 2026-5-17 11:18
点赞 挺好的思路

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

k1n0cv6 发表于 2026-5-17 11:48
支持一下,随便试试 ^w^

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

gzh19815 发表于 2026-5-17 11:57
厉害的技术人才

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

xhlbudd 发表于 2026-5-17 13:16
好高深的感觉,谢谢楼主的分享~~

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

lenias 发表于 2026-5-17 19:20
看着,对于我这个小白来说,并不简单,还在学习中。

免费评分

参与人数 1违规 +1 收起 理由
RS水果 + 1 CM区严禁灌水

查看全部评分

您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2026-7-3 17:37

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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