好友
阅读权限10
听众
最后登录1970-1-1
|
CM是什么?Crackme是什么?这是什么东西?楼主发的什么?
他们都是一些公开给别人尝试破解的小程序,制作 Crackme 的人可能是程序员,想测试一下自己的软件保护技术,也可能是一位 Cracker,想挑战一下其它 Cracker 的破解实力,也可能是一些正在学习破解的人,自己编一些小程序给自己破解,KeyGenMe是要求别人做出它的 keygen (序号产生器), ReverseMe 要求别人把它的算法做出逆向分析, UnpackMe 是要求别人把它成功脱壳,本版块禁止回复非技术无关水贴。
一、 前言
近期在练习移动端脱壳与算法逆向,发现在 GitHub 上有一个十分优秀的开源练习项目 android-crackme-challenge。该项目提供了 5 个难度递增的 CrackMe,非常适合从基础到进阶的系统性训练。本贴选取其中最具代表性的 Challenge 5(密码储存在字符串资源中) 和 Challenge 1(沙盒文件提取) 作为实战案例,分享完整的分析和破解思路。
二、 样本信息
· 项目名称:android-crackme-challenge
· 获取地址:https://github.com/reoky/android-crackme-challenge
· 测试环境:Android 模拟器 (Android 7.1) / JADX / ApkTool / Frida
· 挑战目标:提取隐藏密钥并完成注册
三、 实战分析:从明文提取到动态逆向
1. 挑战五(难度:入门级)
· 分析思路:利用 JADX 反编译 APK。由于密码直接存储在资源文件中,直接搜索 res/values/strings.xml 即可发现明文密钥。
· 核心发现:这一关只需绕过简单的 UI 逻辑,对于学习 AndroidManifest.xml 和 smali 基础非常有帮助。
2. 挑战一(难度:沙盒机制)
· 分析思路:该挑战会在应用的沙盒目录内生成一个文件。通过 adb shell 进入 /data/data/[包名]/ 目录,提取其中的敏感文件。
· 进阶思考:这涉及 Android 的数据隔离机制。在实际安全分析中,通常使用 Frida Hook open API 来监控文件读写,动态获取数据。
四、 核心代码与注册机编写
对于 Challenge 5,我尝试了多种爆破方式。最有效的方法之一是修改 smali 代码,将 if-nez 逻辑反转,从而绕过校验。
```smali
# 找到验证失败的 Toast 逻辑
# 原代码:if-nez v0, :cond_0 (若v0不为0,则显示失败)
# 修改为:if-eqz v0, :cond_0 (若v0为0,则显示失败)
```
注册机源码:逆向出的核心算法是一个简单的 MD5 哈希比对。以下是根据算法还原的注册机:
```python
import hashlib
def crackme_keygen(username):
# 还原 Challenge 5 的逻辑:对用户名进行 MD5 哈希并大写
return hashlib.md5(username.encode()).hexdigest().upper()
print("生成的注册码为:", crackme_keygen("52pojie"))
```
五、 脱壳环境配置(UnPacker)
如果后续练习遇到加壳样本,可以基于 android_unpacker 项目搭建脱壳环境。该项目通过修改 AOSP 源码配合 Hook 脚本,能较通用地提取内存中的 DEX 文件,是实战脱壳的必备工具。
六、 总结与致谢
android-crackme-challenge 项目结构清晰,从明文提取到 Location 模拟等都有涉及,很适合作为入门到进阶的过渡练习。
|
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|
|