第一次写技术文章,请多多指教,不罗嗦马上进入主题。
/ q7 v9 A- N# S* s8 u/ g 你有没有试过对某游戏里的图片很感兴趣想要拿出来用?你有没有试过进入游戏目录里寻找图片而一无所获?没错,那就是图片文件被游戏程序员打包了,不仅是图片还有音乐,游戏脚本,游戏字体等资源有时会被打包起来。
; X: K" k5 B! X 为什么要打包呢?我想原因有几个。一.防止玩家修改避免游戏出错。二.防止玩家盗取游戏资源.三.加快文件读取速度减少硬盘磁臂的平均寻道时间。四....暂时还想不到,想到再告诉你。 + n0 P: T1 i" g$ T
什么叫打包呢?通俗的说就是把所有文件合并起来,有的还加了密。所以一般来说你从游戏目录里是不可能直接找到JPG,BMP,MP3,WMA,BIK等之类的游戏资源。面对游戏公司如此打包手段,作为我们难道就如此放弃?哈哈,幸好我们还有破解这个东东来对付它。利用这种技术能读取打包文件里的资源也就是解包啦。
' O; `4 [8 |. a/ K. a e8 W; U } 怎么解包呢?呵呵,这个你不用找书了,书上肯定找不到的,为什么啊?大哥,那是商业的东西哦而且在书上写出来很可能会被游戏公司起诉的哦。(小猫昂首挺胸露出邪恶的笑容说“我不怕死de,哈哈”)一般来说破解资源文件包格式有两种方法。 5 d$ V5 T* u* S( }
1.利用静态分析工具例如w32dasm反汇编游戏主程序,游戏程序员再怎么隐藏也逃避不了要使用API吧从API着手未为不可(API双手抱胸说“你想要干嘛?-_-!”),游戏在运行的时候打包文件即使再怎样加密都好都一定需要解包后游戏才能调用哦,所以我们利用w32dasm查看一下游戏调用了哪些系统API函数,根据经验不难猜测一般都是什么openfileW,createfileW之类和文件有关的API函数,然后我们跟踪进这些函数里,看看到底这些函数在处理什么有什么功能,一边跟踪同时密切注意堆栈里的情况,如果看见堆栈里出现累似游戏资源包的文件名,那就提起精神细心跟踪这个函数啦,它有可能就是我们要找的解包函数了,找到解包函数后我们就要耐心地分析它的函数参数个数,每个参数的类型,是指针还是数组还是字符串等。等你把把解包函数完全分析好了,然后就是如何调用这个函数的问题了。一般来说有两个办法。1.利用钩子函数对解包函数挂钩,监视和控制解包函数,也就是自己写DLL。2.利用反汇编修改游戏主程序的解包函数,把解包函数写成导出资源函数。
, r, _; i/ R+ v0 Y. e! \
5 W3 @- h( a- P9 f1 ? x2。利用WINHEX之类的16进制编辑工具打开游戏资源打包文件,然后慢慢分析各个字节的含义,也就是图片的存储格式。游戏公司自己写的打包格式个个不同,这个就要靠自己的分析经验了。我举个游戏公司常用的那就是索引文件,学过数据结构的人应该不陌生吧,游戏公司把图片文件和图片索引文件分开,读取资源的时候到图片索引文件去找,图片索引文件通常有4个字节的地址做指针指向图片文件的始止地址。 - Q; f& l' v5 ]; w
很多人用WINHEX打开打包文件后看见全部都是数字就害怕了,然后无从下手。其实这也很正常,如果这么容易被你分析出格式那游戏图片不就满天飞咯?哈哈,其实啊这些数字非常有规律性的,我们可以利用规律性归纳出它的存储格式啊。游戏资源包的格式一般都是文件头+资源索引+资源压缩数据。一般来说文件头都是固定的,而资源索引也非常有数字递增的规律。只要我们非常非常非常耐心地慢慢分析,总会看出点东西来的,其实嘛那就是结构数组吧,游戏公司的程序员利用结构数组存储每个文件的文件头+资源索引的哦,为什么这么肯定?我想如果不是这样做的话,那游戏公司的程序员处理起来一定非常麻烦了,试想每个文件头和文件索引的长度和大小都不一样,这么多资源文件那怎么处理啊和调用啊??因为是结构数组,所以数据分布的规律就有张可寻了(结构数组的2进制存储方法大家的知道的吧??不知道?晕啊...不知道的话先看看BMP,JPG这些标准公开格式的数据分析文章吧)。 / c- W6 x* s0 k" W. U1 h w
呵呵,总算写完啦。上面这些是我几年以来学习解包的心得和自己的想法,希望对大家有帮助。 |