Schwarzer教你破解Cytus2谱面加密

前前言


Lanotalium(Lanota可视化制谱器)的开发基本上也算完成了,闲的没事,把前些天尝试破解Cytus2谱面校验的过程记录下来,免得以后要用的时候自己都不知道搞过逆向(x

前言


Cytus2 iOS版发布了,立刻拿出来研究一番,il2CppDumper,启动!IDA,启动!
一看Dumper还有了新功能生成DummyDll,dnSpy,启动!

看起来比台湾诺西高到不知道哪里去了,直接加密了谱面,而不是采用校验的方式

一路查找KeyStore来历

查KeyStoreFactory.Create
其中反序列化了一段二进制文件,调用了IKeyStoreExtension.Init,跳转

发现了和string ”ASSET“ 比较了一番

初始化了一个Aes加密和另一个啥玩意,不过不重要,注意到解密谱面的时候

用的就是ASSET这个来寻找加密器,接下来就分析AesEncryptor

构造函数和一个静态解密方法中传递了Key数组,我们寻找一下这个静态函数的调用

发现接口函数实际上也调用了他,所以分析此静态函数就好
猜想解密的时候会调用此函数,我也打算学习一个动态调试,破解由此展开

环境


Windows:
  • VMWare Workstation 12
  • macOS 10.13 High Sierra 镜像
  • 能玩Cytus2的越狱iOS设备

配置


  1. 这篇文章装好macOS虚拟机与VMWare Tools
  2. 在macOS上下载并安装xcode
  3. 在macOS里去iFunbox官网下载iFunbox
  4. 打开xcode,把你的iOS设备与电脑连接
  5. xcode中 Window-Devices and Simulators 添加你的iOS设备

准备


以下步骤均在macOS中操作

1.usbmuxd
  • 点击下载
  • 打开命令行窗口A(窗口比较多,做个记号)切换到 /usbmuxd-1.0.8/python-client
  • 接着 sudo python ./tcprelay.py -t 22:2222
    这个窗口就可以放着不动了
2.debugserver
  • 打开iFunbox,点击Raw File System
  • /Developer/usr/bin下,把debugserver拖出来
  • 开启新命令行窗口B,切换到debugserver目录
    lipo -thin arm64 debugserver -output debugserver
    (若你是iPhone5/5c等32位设备请把arm64换为armv7s)
  • 新建一个文件,贴入以下文本,命名为ent.xml,放到debugserver旁边
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
        <key>com.apple.springboard.debugapplications</key>
        <true/>
        <key>get-task-allow</key>
        <true/>
        <key>task_for_pid-allow</key>
        <true/>
        <key>run-unsigned-code</key>
        <true/>
</dict>
</plist>
  • 接着敲ldid -Sent.xml debugserver,没错,-Sent.xml没有空格,没有ldidbrew install ldid一下,没有brew自己百度装brew(x
  • 再次打开iFunbox,把debugserver复制到iOS设备中的/usr/bin
3.连接
  • 在命令行窗口B,切换到/usbmuxd-1.0.8/python-client输入sudo python ./tcprelay.py -t 12345:12345,也可以放着不动了
  • 开启新命令行窗口C,输入ssh root@localhost -p 2222,SSH连接到iOS设备,密码一般是alpine
  • 输入ps -ef | grep "cytus2"
    记下cytus2的pid
  • 输入debugserver *:12345 --attach pid,此处为1650
  • 你会发现cytus2中断运行了,命令行窗口C也可放着不管了

破解


  • 打开命令行窗口D,敲lldb,回车,发现C,D同时走字,即连接iOS设备上的debugserver成功
  • 打开IDA,运行il2CppDumper提供的导入符号py脚本,定位至AesEncryptor$$_Decrypt
  • 记录下地址0x00000001000C5D74
  • 回到命令行窗口D,键入process connect connect://127.0.0.1:12345,等待连接
  • 显示如图则连接完成
  • 键入image list -o -f,拖到[1]项
  • 记录下模块地址0x00000000000b4000
  • 则实际代码地址为0x00000000000b4000 + 0x00000001000C5D74 = 0x0000000100179D74
  • 在命令行D输入br s -a 0x0000000100179D74下断点
  • 输入c继续cytus2运行,随便进首歌
  • 断点命中!再看看函数形参列表
  • key位于第四项,输入p $x4输出他的地址
  • 并不知道byte[]这个类的结构,先看内存为敬
  • 发现这个16很可疑,因为密钥长度可以为16
  • 再次dump后面的内存
  • 则密钥已呈现在眼前
  • Aes还需要一个IV向量才能解密,返回IDA
  • 经过我对注释位置下断点并单步调试得出设置IV向量的位置
  • 类似方法得到IV向量,发现竟然就是谱面文件5-20字节,这也和调用解密函数的第二个参数offset相吻合,为20

总结


  • 至此Cytus2破解工作已经结束
  • 解密只需用得到的Key,提取谱面5-20字节部分作IV向量,解密21字节及以后的部分,并用UTF8编码读出即可
  • 加密随机得到IV向量,先写入c2cd前缀,再写入IV向量,再写入加密数据即可

声明


  • 破解仅为学习使用,不会用于盗版或商用,用途包含自制导入,谢谢
源码来自:https://pan.quark.cn/s/a4b39357ea24 《C++ Primer》作为C++编程领域中的一部权威著作,主要服务于初学者和经验丰富的开发者,致力于帮助他们深入掌握C++的核心知识。 第一章通常会详细讲解C++语言的基础概念和语法结构,包括变量的使用、数据类型的分类、常量的定义、运算符的应用以及基础的输入输出操作。 接下来,我们将对这一章中的核心知识点和可能的习题解答进行深入分析。 ### 1. 变量与数据类型在C++编程中,变量被视为存储数据的媒介。 每一个变量都必须预先声明其数据类型,常见的数据类型有整型(int)、浮点型(float)、双精度浮点型(double)以及字符型(char)。 例如:```cppint age = 25; // 声明一个整型变量age并赋予其初始值25float weight = 70.5f; // 声明一个浮点型变量weight并赋予其初始值70.5char grade = A; // 声明一个字符型变量grade并赋予其初始值A```### 2. 常量与字量常量指的是不可更改的值,可以通过`const`关键字进行声明。 例如:```cppconst int MAX_SIZE = 100; // 声明一个整型常量MAX_SIZE,其值为100```字量是指程序中直接书写的值,如`42`、`3.14`或`"Hello"`。 ### 3. 运算符C++提供了多种运算符,涵盖了算术运算符(+,-,*,/,%)、比较运算符(==,!=,<,>,<=,>=)、逻辑运算符(&&,||,!)以及赋值运算符(=,+=,-=,*=,/=,%=)等。 ### 4. 输入与输出在C++中,使用`std::cin`来实现输...
内容概要:本文详细介绍了一个基于C++的仓库存储管理系统的设计与实现,涵盖了项目背景、目标、挑战及解决方案,并系统阐述了整体架构设计、数据库建模、功能模块划分、权限安全、并发控制、数据一致性保障、异常处理与可扩展性等关键内容。通过向对象编程思想,采用分层架构与模块化解耦设计,结合STL容器、多线程、锁机制等C++核心技术,实现了高效的库存管理功能,包括入库、出库、盘点、调拨、权限控制、日志追踪与智能报表分析。文中还提供了核心类如Inventory(库存)、User(用户权限)、LogEntry(操作日志)及WarehouseManager(主控制器)的代码示例,展示了数据结构设计与关键算法逻辑。; 适合人群:具备C++编程基础,熟悉向对象设计与基本数据结构的软件开发人员,尤其适合从事企业级管理系统开发或希望深入理解系统架构设计的中级开发者(工作1-3年);也适用于计算机相关专业学生进行课程设计或毕业项目参考; 使用场景及目标:①学习如何使用C++构建复杂业务系统的整体架构与模块划分方法;②掌握高并发、数据一致性、权限控制、异常处理等企业级系统关键技术的实现思路;③理解仓储管理业务流程及其在软件系统中的建模与落地方式;④为开发类似ERP、MES等后台管理系统提供技术原型与设计参考; 阅读建议:此资源不仅提供理论架构与代码片段,更强调系统设计的完整性与工程实践性。建议读者结合代码示例动手实现核心模块,深入理解类之间的关系与交互逻辑,重点关注多线程安全、事务管理与权限校验等难点环节,并尝试扩展功能如对接GUI界或数据库持久化模块,以全提升系统开发能力。
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
红包 添加红包
表情包 插入表情
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值