他毛的下了个硬盘版居然说不是正版不能用…… 观察了一下,这位读了win的序列号,估计是机器有关的,丫的谁做的硬盘版……

于是开始搞,挂上ollydbg,截messagebox,就抓到了…… 往回看看,抓到了第一个地方:

0x413b09 jnz short ef_fd_cn.00413b11 大约是比较序列号的正确性,之前读了serialcode和installkeycode

之后跑起来,注意到有debug string说啥CheckSelfIdentity(): filecrc=xxx, execrc=xxx之类,估计有自我校验。观察以后,把这个关掉:

0x47a996 mov esi,eax 这里把算出来的file crc移到esi里,之后会比较。因为正确的crc就在ebx里,直接改成mov esi, ebx就解决问题了。

接着跑着跑着居然就死循环了,看了一下,之前调了isdebuggerpresent()... 貌似还是动态从kernel32里抓出来的函数地址……

0x41ae96 mov al,1 这个函数调了isdebuggerpresent, 这里返回1表示有,改成xor al,al就可以让他返回0…… 不过其实跑起来没关系,只是调的时候,如果是1,接着就会直接dead loop……

接着不出一开始的错误框了,但是进去之后,硕大的血红色画面,里面说你用的是盗版……

继续研究,发现之前判断完正版之后会把结果存起来,于是在存的地方下读取断点,还真找到了…… 进游戏居然又查一次……

0x401353 jnz short ef_fd_cn.00401359 这个是比较InstallKeyCode和正确值,在这里可以直接抓到正确值,填进注册表就行了……

最后就能跑了……