设为首页收藏本站繁体中文

轻之国度

 找回密码
 注册(右键在新窗口打开)

QQ登录

只需一步,快速开始

查看: 562|回复: 8
收起左侧

获取游戏 DLC 的错误方法

[复制链接]
发表于 2019-8-25 02:53 | 显示全部楼层 |阅读模式
本帖最后由 tippisum 于 2019-8-25 17:08 编辑

起因是 PSV 游戏「クリミナルガールズ INVITATION」。
游戏内容就不多介绍了……

相比 PSP 上的初版做了清晰度的提升,并且增加了额外的剧情。除了部分素材没有重绘以及没有做新的 CG 之外,还算是比较良心的重制版。
总之,是个很不错的游戏……


有趣的地方在于这货有一个预约特典 DLC。
然而,很多年后的今天,除了在某些网站上还能找到这个 DLC 曾经存在过的痕迹之外,没有任何地方可以获得它。想花钱都买不到……

为了满足自己的好奇心,会长还是果断地抄起了 IDA,磨刀霍霍向猪羊……


考虑到 PSV 游戏 DLC 的尿性,这种“预约特典”,实际的内容多半早就已经含在游戏本体里面了,所谓的“DLC”只不过是一个激活码而已。

--- 上来先盲狙一发 addcont0: ---

BINGO,中了,找到了路径 addcont0:CGAD00000X001000/ADD000.dat

唉,简直是轻松愉快。 <- 此处有 FLAG

建立空文件,进游戏,咦?没效果……

好吧,果然没那么简单。看来游戏不仅会检查激活文件是否存在,对内容也有校验。
还是得看看具体的逻辑再说。右键,Jump to xref to operand...

嗯?怎么没有?!喂喂,尊敬的 IDA 先生,这和说好的不一样啊,访问这个路径的代码呢?别跟我说你没发现是哪段代码在访问啊……?(崩溃中

算了,我就知道 Sony 的工程师为了给反向工程增加难度,给可执行文件格式里塞了各种私货,解析不出来代码参照也不是 IDA 的错。何况这也难不倒我:根据局部性原则,互相靠近的代码访问的数据应该也是互相靠近的。把旁边几个字符串抓下来都试一遍好了。

--- 都试了一遍 ---
还是不行……怎么可以这样……

要是 PC 游戏的话这就该是调试器发挥它的价值的时候了。然而零售版的 PSV 并不支持调试……怎么可以这样……我至少需要一个断点……

等等,断点确实是存在的。感谢开源社区,rePatch 的源代码告诉我它在 sceAppMgrDrmOpenForDriver 这个内核函数上下了钩子,而这个函数有很大的可能性会被游戏调用用来检查 DLC 是否存在。

--- 改代码重新编译 rePatch,在 sceAppMgrDrmOpenForDriver 的钩子上打日志 ---
BINGO,这次中了。

我就说嘛,内核态都已经掌握在我手上了,你一个小破程序还能翻得了天么? <- 此处有 FLAG

然而断点打在内核态,还得想办法退到用户态去。这倒也没什么难的,直接抓取用户态的 LR 寄存器就好了……

WAIT!PSV 的系统调用居然用的是 System 模式而不是 SVC 模式?!为什么!Sony 的工程师们你们为什么要这个样子……(以头抢地中

没办法,只好沿着调用链一层层回溯了……然而并没有调试器!没有调试器!调试器!器!……
更可怕的是 ARM 不像 x86 有规整的栈帧,只需要沿着栈向下查找就可以找出完整的调用链。在 ARM 平台上,鬼知道!一个函数的返回地址到底在什么位置!丫的高兴的话甚至可以让返回地址根本不出现在栈上!

想要回退调用链,唯一的办法是人肉模拟 ARM CPU,从断点的位置一直往后面模拟执行,直到退到用户态……(瑟瑟发抖

没办法了,硬着头皮上吧……先把当前 PC 位置的内容 dump 下来,然后丢到 IDA 里去看代码模拟执行。遇到内存访问的代码还得看完了之后再重新把相应的内存数据也 dump 下来……说起来上次干“读程序写结果”还是多少年前的事情了来着…… =_=

--- 以极大的耐心和毅力回溯了 7 层调用栈,最后倒在了系统调用派发的逻辑黑洞里 ---

怎么可以这个样子……怎么可以这个样子……怎么可以这个样子…… <- FLAG 回收中

--- 绝望的会长到处去找 PSV 内核态的资料 ---

--- 绝望的会长正在麻木地翻阅 Team Molecule 的 GitHub 仓库 ---

等等,
forgot the most important feature

这是啥?
--- 点进去看 ---

哦哦哦!赞美伟大的 Team Molecule,这居然是 IDA 用的 PSV 可执行文件解析插件!真是拯救 PSV 开发者于水火之中啊……
--- 使用 vita_loader 加载 ---

啊,它抓到了!它抓到参照这个路径的代码了!再次赞美伟大的 Team Molecule。会长再也不想当人肉 ARM CPU 模拟器了……


--- 尾声 ---
这个世界上大多数事情的结局往往都是令人乏味的。揭晓的谜底不仅不会让人拍案叫绝,甚至反而会带来无尽的空虚。比如说,PSV 里面工作在最高级别的加密芯片,使用的密钥是 0xAAAAAAAA……
同样的,浪费了会长漫长的人生去研究的的游戏检测 DLC 的逻辑也没有任何精妙之处,只是简单地把文本比对拆成了两半而已…… <- 无尽的空虚

不过如果你已经看到了这里,而且还对这个游戏感兴趣的话,那下面的内容就当作福利了。
游客,本帖隐藏的内容需要积分高于 1000 才可浏览,您当前积分为 0

评分

参与人数 9轻币 +630 收起 理由
zaregoto + 12 膜拜大佬
啊豪华游轮 + 10 我很赞同
Jason.D + 12 是大佬ヽ(・∀・)ノ
navychung + 11 給大佬遞闊洛
咕咕哒的咕 + 20 不明觉厉
杜若楪葉 + 500 给dalao递茶
夜久欲太 + 10 大佬大佬
自由天使 + 50 原创内容 旗幟滿天飛
ancientkaa + 5 不明觉厉

查看全部评分

发表于 2019-8-25 03:46 | 显示全部楼层
本帖最后由 Jason.D 于 2019-8-25 03:51 编辑

這是我看過最
平淡、曲折、崩潰、努力、勵志而又空虛的故事


所以,會長你玩完DLC的感想是空虛?



玩個遊戲感覺費好大的功夫|ω・)


发表于 2019-8-25 08:43 | 显示全部楼层
…………看完了,看不懂,还是继续玩我的传颂之物吧
发表于 2019-8-25 09:04 | 显示全部楼层
只在课上碰过一点x86汇编瑟瑟发抖……(还是跑在dosbox里的
发表于 2019-8-25 11:12 | 显示全部楼层
大佬牛啤了,技术贴
发表于 2019-8-25 11:23 | 显示全部楼层
是逆向汇编大佬,wsl
发表于 2019-8-25 11:36 | 显示全部楼层
大佬也太强了
发表于 2019-8-25 14:55 | 显示全部楼层
居然是会长
虽然看不懂代码。。。
发表于 2019-8-25 15:21 | 显示全部楼层
這部的bgm跟插曲真的很讚,
"讓少女學技能"的時候不帶耳機真的沒辦法玩(笑
劇情不論,各方面都還蠻滿意的 個人遊戲時間約36小時

本版积分规则

手机版|Archiver|轻之国度

JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!JS of wanmeiff.com and vcpic.com Please keep this copyright information, respect of, thank you!

  

GMT+8, 2024-6-7 17:25

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2020, Tencent Cloud.

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