[异变0x0001]一个简单的免cd程序的制作,以夏めろ为例

//比较幸运的是,本次比较顺利,应该说是比较简单的一次破解。

//下面我大概说一下破解的准备。

1.首先是工具

工具的话我用的是 Ollydbg,相信这个反汇编的工具大家都很熟悉。如果不熟悉od的操作,下面我也会说清楚一点。

2.然后是相关知识

> Cd认证不管复杂简单,最重要的一个函数,一般都是GetDriveType(),这个api,可以通过百度进行了解,很简单就是返回磁盘类型,5是光驱,而我们的本地磁盘的返回值是3。

> 有了这些,我们就开始进行破解【修改】。

1.打开od,加载Natsu.exe,由于我是64位,需要先进行32位的准备工作【猜测】,所以我们需要先f9一次,才能进入程序内。

2.然后我们按下ctrl+n 找到 GetDriveTypeA(),在参考下设置断点。

[异变0x0001]一个简单的免cd程序的制作,以夏めろ为例_第1张图片

双击,定位到 0x406561 处,可以看到

00406561   .  FF15 B8104300 CALL DWORD PTR DS:[<&KERNEL32.GetDriveTy>; \GetDriveTypeA

00406567      83F8 05       CMP EAX,5

0040656A      75 43         JNZ SHORT Natsu.004065AF

      这里的cmp eax,5 然后jnz,就是判断是否是光驱,不是就跳转,明显我们这里可以改为

Cmp eax,3或者 JNZ SHORT Natsu.004065AF [右键,选汇编,或者按空格可以进行修改]。

改好之后就算不是光驱也能进行接下来的判断操作了。

      我们按下f9 ,程序就运行了,停在了 0x406561处,按下f8继续进行,我们发现下面还有一个api,GetVolumnInformationA(),这是获取磁盘信息的,我们暂时不管,f8继续。到了这里停住:

004065A3   .  51            PUSH ECX                                 ; /String2

004065A4   .  52            PUSH EDX                                 ; |String1

004065A5   .  FF15 3C114300 CALL DWORD PTR DS:[<&KERNEL32.lstrcmpA>] ; \lstrcmpA

在0x004065A5c处有一个判断,很可疑,我们看下堆栈,便发现

004065AB   .  85C0          TEST EAX,EAX

004065AD      74 34         JE SHORT Natsu.004065E3

如果字符串【卷标】相同,就可以接下来的处理,于是我们可以将 JE改成了 JNE,然后按下f9看看能不能运行,结果游戏成功运行了。

这tm真是太简单的认证了吧!!

好了,改完之后我们,右键 -> 复制到可执行文件爱你 -> 全部修改,取名为 Natsu_NoCD.exe就ok啦,本次破解就结束。确实很简单,高手们轻喷啊。我只是个渣渣。

咨询 ->贴吧链接


奇迹风祝汉化组

2015年8月4日

你可能感兴趣的:([异变0x0001]一个简单的免cd程序的制作,以夏めろ为例)