Rayman2脱壳记

两天前下了8077的R2镜像,装上了,好久没玩Rayman了。现在发现2比3要难很多,尤其是要打完美的话,于是得出一个结论,Rayman系列是越来越简单了。不过这次主要却不是要玩的,而是要做免CD破解。Rayman2.exe直接被360报毒,应该是被加壳的(加壳等于病毒,360千古定律之一),peid显示为petite壳,网上找脱壳机却都不顶用,只能手脱。od打开用esp定律顺利找到oep,直接用od脱壳插件搞定。直接能玩oh yeah

结果到第二天脱好的就不能玩了,od打开显示在gdi的GetDeviceCaps调用上跑飞。开始我还以为是软件有什么自修改的伎俩,后来意识到是这个函数在重建输入表的时候被漏掉了(每次脱壳后能玩,但重启系统后DLL加载地址改变,就会跑飞),于是重新OD,这次不选择重建输入表,而是用ImportREC修复IAT,结果在游戏中又非法操作了,而全屏游戏下是没法本地调试的。我表示很大的愤怒。。

想起在学校的时候看多少忘多少的《加密与解密》,试试能不能用OD的那个然后手动把那个函数给补上,于是用LordPE加载OD脱好的文件,打开输入表,新增一个导入DLL,添加GetDeviceCaps函数,然后将FirstThunk改成那个错误的地址(GDI.dll只导入那一个函数),然后再将Thunk值改回刚才,即搞定新增一个导入函数,游戏可以正常运行,但Depends无法查看导入表,原因不详。

pe结构真的是很复杂。。看来回上海还要再多看几遍。。

不过接下来出了件搞笑的事情,我在五年前买的盗版雷曼合集中找到了那个破解,发现那里面用的Rayman2.exe是没加壳的,并且文件大小和我这个加壳了的是一样的,但我脱壳的却多了一倍大小,用WinHex打开发现文件后半边全是0,囧。。并且这个没加壳的text、data、rdata等段都分明,而脱壳的所有信息全部放在了text段,于是决定用这个版本了。。

但诡异的是,这个版本的Rayman2.exe无法运行!OD查看发现IAT中kernel32.dll、user32.dll的导出函数均是无效的,经查发现它们原来是预先绑定了输入表,应该是和win98绑定。只是按说绑定无效操作系统会自动修复的啊,不知系统怎么没有修复。算了我自己修复吧,用WinHex打开,找到OrginalFirstThunk,然后将一大块内容copy下来,粘贴到FirstThunk的地方,搞定。

破解工作还在继续,那个D版的破解思路已经知道了,是Hook了用来验证部分的CreateFileA等函数。只是xp下第13关不会出CD Missing的海盗头,而win7下就会出,我打算尝试在渲染部分看能否找到显示海盗头的代码。。难度有点大。。得参考那个版本的DirectX头文件。。顺便学习COM。。不知能否找到。。

CategoriesUncategorized

2 Replies to “Rayman2脱壳记”

  1. “但诡异的是,这个版本的Rayman2.exe无法运行!OD查看发现IAT中kernel32.dll、user32.dll的导出函数均是无效的,经查发现它们原来是预先绑定了输入表,应该是和win98绑定。只是按说绑定无效操作系统会自动修复的啊,不知系统怎么没有修复。算了我自己修复吧,用WinHex打开,找到OrginalFirstThunk,然后将一大块内容copy下来,粘贴到FirstThunk的地方,搞定”

    能不能把你修复过的那个exe发送到我的邮箱?谢谢
    (邮箱在我的个人信息里。。)

Leave a Reply

Your email address will not be published. Required fields are marked *