【文章标题】: 英雄无敌3简中版免CD制作
【文章作者】: wxxw
【软件名称】: 英雄无敌3死亡阴影简体中文版
【保护方式】: 无
【编写语言】: Microsoft Visual C++ 5.0
【使用工具】: Olldbg1.10
【操作平台】: XP sp3
【软件介绍】: 经典游戏
【作者声明】: 只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!
--------------------------------------------------------------------------------
【详细过程】
英雄无敌3是我喜欢的一款游戏,虽然比较老了,但偶尔还玩一下,比较不爽的是我装的版本需要光盘才能玩,不放光盘会提示不能单机,只能加入别人建立的游戏云云,于是就琢磨怎么免CD,首先用函数参考,发现有GetDriverTypeA,在所有调用它的地方下断,F9运行来到这里
代码:
005BB230 /> 55 PUSH EBP 005BB231 |. 8BEC MOV EBP,ESP 005BB233 |. 83EC 40 SUB ESP,40 005BB236 |. 53 PUSH EBX 005BB237 |. 56 PUSH ESI 005BB238 |. 57 PUSH EDI 005BB239 |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] 005BB23C |. 83C0 41 ADD EAX,41 005BB23F |. A2 ACEF8000 MOV BYTE PTR DS:[80EFAC],AL 005BB244 |. 68 ACEF8000 PUSH Heroes3.0080EFAC ; /RootPathName = "D:\" 005BB249 |. FF15 90FB8300 CALL DWORD PTR DS:[<&KERNEL32.GetDriveTy>; \GetDriveTypeA 005BB24F |. 33C9 XOR ECX,ECX 005BB251 |. 83F8 05 CMP EAX,5 005BB254 |. 0F94C1 SETE CL 005BB257 |. 8BC1 MOV EAX,ECX 005BB259 |. 5F POP EDI 005BB25A |. 5E POP ESI 005BB25B |. 5B POP EBX 005BB25C |. 8BE5 MOV ESP,EBP 005BB25E |. 5D POP EBP 005BB25F \. C3 RETN
D:\,这是由注册表里[HKEY_LOCAL_MACHINE\SOFTWARE\New World Computing\Heroes of Might and Magic?III\1.0]
下有个"CDDrive"="D:"取来的,当失败后它会重复这段程序从C遍历到Z
GetDriveTypeA返回的EAX值为5是光驱,3是硬盘,现在好办了,将005BB251 |. 83F8 05 CMP EAX,5这句直接
改为cmp eax,3,那不是欺骗程序我所有的硬盘分区都是光驱了?然后将光盘上的文件夹heroes3全部拷贝到C:\下,
呵呵,测试居然成功了,不过又有点不爽,C盘空间比较小,把它放到D盘吧,可是意外出现了,游戏并没检测到光
盘,失败了,问题出在哪儿?
在上面的005BB25F \. C3 RETN返回后来到如下代码
代码:
005BB36E . 83C4 04 ADD ESP,4 005BB371 . 85C0 TEST EAX,EAX 005BB373 . 74 6F JE SHORT Heroes3.005BB3E4 005BB375 . 68 00800000 PUSH 8000 005BB37A . 8D85 A0FDFFFF LEA EAX,DWORD PTR SS:[EBP-260] 005BB380 . 50 PUSH EAX 005BB381 . E8 2075E4FF CALL Heroes3.004028A6 005BB386 . 83C4 04 ADD ESP,4 005BB389 . 8985 8CFDFFFF MOV DWORD PTR SS:[EBP-274],EAX 005BB38F . 8B8D 8CFDFFFF MOV ECX,DWORD PTR SS:[EBP-274] 005BB395 . 898D 88FDFFFF MOV DWORD PTR SS:[EBP-278],ECX 005BB39B . C745 FC 00000>MOV DWORD PTR SS:[EBP-4],0 005BB3A2 . 8B8D 88FDFFFF MOV ECX,DWORD PTR SS:[EBP-278] 005BB3A8 . E8 181EE5FF CALL Heroes3.0040D1C5 005BB3AD . 50 PUSH EAX ; |Arg1 005BB3AE . E8 4DCB1A00 CALL Heroes3.00767F00 ; \Heroes3.00767F00
; \Heroes3.00767F00出返回的结果不一样,C盘时是5,而D盘是-1,跟进去看看
这个call里又有另外一个call如下
代码:
00767F28 |. 51 PUSH ECX ; /Arg4 00767F29 |. 6A 40 PUSH 40 ; |Arg3 = 00000040 00767F2B |. 8B55 0C MOV EDX,DWORD PTR SS:[EBP+C] ; | 00767F2E |. 52 PUSH EDX ; |Arg2 00767F2F |. 8B45 08 MOV EAX,DWORD PTR SS:[EBP+8] ; | 00767F32 |. 50 PUSH EAX ; |Arg1 = 015DBFD1 ASCII "D:heroes3\data\heroes3.vid" 00767F33 |. E8 08000000 CALL Heroes3.00767F40 ; \Heroes3.00767F40
代码:
00768205 |> \6A 00 PUSH 0 ; /hTemplateFile = NULL 00768207 |. 8B45 D8 MOV EAX,DWORD PTR SS:[EBP-28] ; | 0076820A |. 50 PUSH EAX ; |Attributes 0076820B |. 8B4D E8 MOV ECX,DWORD PTR SS:[EBP-18] ; | 0076820E |. 51 PUSH ECX ; |Mode 0076820F |. 8D55 DC LEA EDX,DWORD PTR SS:[EBP-24] ; | 00768212 |. 52 PUSH EDX ; |pSecurity 00768213 |. 8B45 F8 MOV EAX,DWORD PTR SS:[EBP-8] ; | 00768216 |. 50 PUSH EAX ; |ShareMode 00768217 |. 8B4D CC MOV ECX,DWORD PTR SS:[EBP-34] ; | 0076821A |. 51 PUSH ECX ; |Access 0076821B |. 8B55 08 MOV EDX,DWORD PTR SS:[EBP+8] ; | 0076821E |. 52 PUSH EDX ; |FileName = "D:heroes3\data\heroes3.vid" 0076821F |. FF15 78FB8300 CALL DWORD PTR DS:[<&KERNEL32.CreateFile>; \CreateFileA 00768225 |. 8945 FC MOV DWORD PTR SS:[EBP-4],EAX 00768228 |. 837D FC FF CMP DWORD PTR SS:[EBP-4],-1 0076822C |. 75 23 JNZ SHORT Heroes3.00768251 0076822E |. FF15 84FB8300 CALL DWORD PTR DS:[<&KERNEL32.GetLastErr>; [GetLastError
70,而D盘是-1,可能大家也注意到了,在上面的文件路径里”:“后好像都少了个“\",而在调用GetLastError后返回的
值为3,查资料error 3为 The system cannot find the path specified. ERROR_PATH_NOT_FOUND,奇怪了为什么C
盘可以,D盘不行,这个问题我到现在还不明白,只有C盘和光驱可以用x:dirctory的方式被CreateFileA打开,其他硬
盘分区都不行,希望有高人能指点一下
问题既然找到了,我们就想办法改一下路径就可以了,回过头去仔细跟踪下发现这个路径就在上面的005BB381 .
E8 2075E4FF CALL Heroes3.004028A6里形成的,跟进去来到如下代码
代码:
0068FF34 . 6A 01 PUSH 1 0068FF36 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF39 . E8 37D2D7FF CALL Heroes3.0040D175 0068FF3E . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX 0068FF41 . 8B55 D8 MOV EDX,DWORD PTR SS:[EBP-28] 0068FF44 . 8A02 MOV AL,BYTE PTR DS:[EDX] 0068FF46 . 34 D9 XOR AL,0D9 0068FF48 . 8B4D D8 MOV ECX,DWORD PTR SS:[EBP-28] 0068FF4B . 8801 MOV BYTE PTR DS:[ECX],AL al里为“:” 0068FF4D . 6A 02 PUSH 2 0068FF4F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF52 . E8 1ED2D7FF CALL Heroes3.0040D175 0068FF57 . 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX 0068FF5A . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] 0068FF5D . 8A02 MOV AL,BYTE PTR DS:[EDX] 0068FF5F . 34 C5 XOR AL,0C5 0068FF61 . 8B4D D4 MOV ECX,DWORD PTR SS:[EBP-2C] 0068FF64 . 8801 MOV BYTE PTR DS:[ECX],AL al里为“h" .......... 00690195 . 6A 19 PUSH 19 00690197 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0069019A . E8 D6CFD7FF CALL Heroes3.0040D175 0069019F . 8985 78FFFFFF MOV DWORD PTR SS:[EBP-88],EAX 006901A5 . 8B95 78FFFFFF MOV EDX,DWORD PTR SS:[EBP-88] 006901AB . 8A02 MOV AL,BYTE PTR DS:[EDX] 006901AD . 34 D9 XOR AL,0D9 006901AF . 8B8D 78FFFFFF MOV ECX,DWORD PTR SS:[EBP-88] 006901B5 . 8801 MOV BYTE PTR DS:[ECX],AL al里为”d"
找所有参考文本字串"功能,结果没找到相应的字符串,所以才慢慢跟踪到这里
地方找到了,怎么办?后来想了个笨办法,把D盘下heroes3文件夹改为eroes3,再将上面的
代码:
0068FF4D . 6A 02 PUSH 2 0068FF4F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF52 . E8 1ED2D7FF CALL Heroes3.0040D175 0068FF57 . 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX 0068FF5A . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] 0068FF5D . 8A02 MOV AL,BYTE PTR DS:[EDX] 0068FF5F . 34 C5 XOR AL,0C5 0068FF61 . 8B4D D4 MOV ECX,DWORD PTR SS:[EBP-2C] 0068FF64 . 8801 MOV BYTE PTR DS:[ECX],AL al里为“h"
代码:
0068FF4D . 6A 02 PUSH 2 0068FF4F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF52 . E8 1ED2D7FF CALL Heroes3.0040D175 0068FF57 . 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX 0068FF5A . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] 0068FF5D B0 5C MOV AL,5C al里为"\" 0068FF5F 90 NOP 0068FF60 90 NOP 0068FF61 . 8B4D D4 MOV ECX,DWORD PTR SS:[EBP-2C] 0068FF64 . 8801 MOV BYTE PTR DS:[ECX],AL
代码:
0068FF34 . 6A 01 PUSH 1 0068FF36 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF39 . E8 37D2D7FF CALL Heroes33.0040D175 0068FF3E . 8945 D8 MOV DWORD PTR SS:[EBP-28],EAX 0068FF41 . 8B55 D8 MOV EDX,DWORD PTR SS:[EBP-28] 0068FF44 . B0 61 MOV AL,61 0068FF46 . 90 NOP 0068FF47 . 90 NOP 0068FF48 . 8B4D D8 MOV ECX,DWORD PTR SS:[EBP-28] 0068FF4B . 8801 MOV BYTE PTR DS:[ECX],AL 0068FF4D . 6A 02 PUSH 2 0068FF4F . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF52 . E8 1ED2D7FF CALL Heroes33.0040D175 0068FF57 . 8945 D4 MOV DWORD PTR SS:[EBP-2C],EAX 0068FF5A . 8B55 D4 MOV EDX,DWORD PTR SS:[EBP-2C] 0068FF5D . B0 74 MOV AL,74 0068FF5F . 90 NOP 0068FF60 . 90 NOP 0068FF61 . 8B4D D4 MOV ECX,DWORD PTR SS:[EBP-2C] 0068FF64 . 8801 MOV BYTE PTR DS:[ECX],AL 0068FF66 . 6A 03 PUSH 3 0068FF68 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF6B . E8 05D2D7FF CALL Heroes33.0040D175 0068FF70 . 8945 D0 MOV DWORD PTR SS:[EBP-30],EAX 0068FF73 . 8B55 D0 MOV EDX,DWORD PTR SS:[EBP-30] 0068FF76 . B0 61 MOV AL,61 0068FF78 . 90 NOP 0068FF79 . 90 NOP 0068FF7A . 8B4D D0 MOV ECX,DWORD PTR SS:[EBP-30] 0068FF7D . 8801 MOV BYTE PTR DS:[ECX],AL 0068FF7F . 6A 04 PUSH 4 0068FF81 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF84 . E8 ECD1D7FF CALL Heroes33.0040D175 0068FF89 . 8945 CC MOV DWORD PTR SS:[EBP-34],EAX 0068FF8C . 8B55 CC MOV EDX,DWORD PTR SS:[EBP-34] 0068FF8F . B0 5C MOV AL,5C 0068FF91 . 90 NOP 0068FF92 . 90 NOP 0068FF93 . 8B4D CC MOV ECX,DWORD PTR SS:[EBP-34] 0068FF96 . 8801 MOV BYTE PTR DS:[ECX],AL 0068FF98 . 6A 05 PUSH 5 0068FF9A . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FF9D . E8 D3D1D7FF CALL Heroes33.0040D175 0068FFA2 . 8945 C8 MOV DWORD PTR SS:[EBP-38],EAX 0068FFA5 . 8B55 C8 MOV EDX,DWORD PTR SS:[EBP-38] 0068FFA8 . B0 68 MOV AL,68 0068FFAA . 90 NOP 0068FFAB . 90 NOP 0068FFAC . 8B4D C8 MOV ECX,DWORD PTR SS:[EBP-38] 0068FFAF . 8801 MOV BYTE PTR DS:[ECX],AL 0068FFB1 . 6A 06 PUSH 6 0068FFB3 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FFB6 . E8 BAD1D7FF CALL Heroes33.0040D175 0068FFBB . 8945 C4 MOV DWORD PTR SS:[EBP-3C],EAX 0068FFBE . 8B55 C4 MOV EDX,DWORD PTR SS:[EBP-3C] 0068FFC1 . B0 65 MOV AL,65 0068FFC3 . 90 NOP 0068FFC4 . 90 NOP 0068FFC5 . 8B4D C4 MOV ECX,DWORD PTR SS:[EBP-3C] 0068FFC8 . 8801 MOV BYTE PTR DS:[ECX],AL 0068FFCA . 6A 07 PUSH 7 0068FFCC . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FFCF . E8 A1D1D7FF CALL Heroes33.0040D175 0068FFD4 . 8945 C0 MOV DWORD PTR SS:[EBP-40],EAX 0068FFD7 . 8B55 C0 MOV EDX,DWORD PTR SS:[EBP-40] 0068FFDA . B0 72 MOV AL,72 0068FFDC . 90 NOP 0068FFDD . 90 NOP 0068FFDE . 8B4D C0 MOV ECX,DWORD PTR SS:[EBP-40] 0068FFE1 . 8801 MOV BYTE PTR DS:[ECX],AL 0068FFE3 . 6A 08 PUSH 8 0068FFE5 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0068FFE8 . E8 88D1D7FF CALL Heroes33.0040D175 0068FFED . 8945 BC MOV DWORD PTR SS:[EBP-44],EAX 0068FFF0 . 8B55 BC MOV EDX,DWORD PTR SS:[EBP-44] 0068FFF3 . B0 6F MOV AL,6F 0068FFF5 . 90 NOP 0068FFF6 . 90 NOP 0068FFF7 . 8B4D BC MOV ECX,DWORD PTR SS:[EBP-44] 0068FFFA . 8801 MOV BYTE PTR DS:[ECX],AL 0068FFFC . 6A 09 PUSH 9 0068FFFE . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 00690001 . E8 6FD1D7FF CALL Heroes33.0040D175 00690006 . 8945 B8 MOV DWORD PTR SS:[EBP-48],EAX 00690009 . 8B55 B8 MOV EDX,DWORD PTR SS:[EBP-48] 0069000C . B0 65 MOV AL,65 0069000E . 90 NOP 0069000F . 90 NOP 00690010 . 8B4D B8 MOV ECX,DWORD PTR SS:[EBP-48] 00690013 . 8801 MOV BYTE PTR DS:[ECX],AL 00690015 . 6A 0A PUSH 0A 00690017 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0069001A . E8 56D1D7FF CALL Heroes33.0040D175 0069001F . 8945 B4 MOV DWORD PTR SS:[EBP-4C],EAX 00690022 . 8B55 B4 MOV EDX,DWORD PTR SS:[EBP-4C] 00690025 . B0 73 MOV AL,73 00690027 . 90 NOP 00690028 . 90 NOP 00690029 . 8B4D B4 MOV ECX,DWORD PTR SS:[EBP-4C] 0069002C . 8801 MOV BYTE PTR DS:[ECX],AL 0069002E . 6A 0B PUSH 0B 00690030 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 00690033 . E8 3DD1D7FF CALL Heroes33.0040D175 00690038 . 8945 B0 MOV DWORD PTR SS:[EBP-50],EAX 0069003B . 8B55 B0 MOV EDX,DWORD PTR SS:[EBP-50] 0069003E . B0 33 MOV AL,33 00690040 . 90 NOP 00690041 . 90 NOP 00690042 . 8B4D B0 MOV ECX,DWORD PTR SS:[EBP-50] 00690045 . 8801 MOV BYTE PTR DS:[ECX],AL 00690047 . 6A 0C PUSH 0C 00690049 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0069004C . E8 24D1D7FF CALL Heroes33.0040D175 00690051 . 8945 AC MOV DWORD PTR SS:[EBP-54],EAX 00690054 . 8B55 AC MOV EDX,DWORD PTR SS:[EBP-54] 00690057 . B0 2E MOV AL,2E 00690059 . 90 NOP 0069005A . 90 NOP 0069005B . 8B4D AC MOV ECX,DWORD PTR SS:[EBP-54] 0069005E . 8801 MOV BYTE PTR DS:[ECX],AL 00690060 . 6A 0D PUSH 0D 00690062 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 00690065 . E8 0BD1D7FF CALL Heroes33.0040D175 0069006A . 8945 A8 MOV DWORD PTR SS:[EBP-58],EAX 0069006D . 8B55 A8 MOV EDX,DWORD PTR SS:[EBP-58] 00690070 . B0 76 MOV AL,76 00690072 . 90 NOP 00690073 . 90 NOP 00690074 . 8B4D A8 MOV ECX,DWORD PTR SS:[EBP-58] 00690077 . 8801 MOV BYTE PTR DS:[ECX],AL 00690079 . 6A 0E PUSH 0E 0069007B . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 0069007E . E8 F2D0D7FF CALL Heroes33.0040D175 00690083 . 8945 A4 MOV DWORD PTR SS:[EBP-5C],EAX 00690086 . 8B55 A4 MOV EDX,DWORD PTR SS:[EBP-5C] 00690089 . B0 69 MOV AL,69 0069008B . 90 NOP 0069008C . 90 NOP 0069008D . 8B4D A4 MOV ECX,DWORD PTR SS:[EBP-5C] 00690090 . 8801 MOV BYTE PTR DS:[ECX],AL 00690092 . 6A 0F PUSH 0F 00690094 . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 00690097 . E8 D9D0D7FF CALL Heroes33.0040D175 0069009C . 8945 A0 MOV DWORD PTR SS:[EBP-60],EAX 0069009F . 8B55 A0 MOV EDX,DWORD PTR SS:[EBP-60] 006900A2 . B0 64 MOV AL,64 006900A4 . 90 NOP 006900A5 . 90 NOP 006900A6 . 8B4D A0 MOV ECX,DWORD PTR SS:[EBP-60] 006900A9 . 8801 MOV BYTE PTR DS:[ECX],AL 006900AB . 6A 10 PUSH 10 006900AD . 8D4D E4 LEA ECX,DWORD PTR SS:[EBP-1C] 006900B0 . E8 C0D0D7FF CALL Heroes33.0040D175 006900B5 . 8945 9C MOV DWORD PTR SS:[EBP-64],EAX 006900B8 . 8B55 9C MOV EDX,DWORD PTR SS:[EBP-64] 006900BB . B0 00 MOV AL,0 006900BD . 90 NOP 006900BE . 90 NOP 006900BF . 8B4D 9C MOV ECX,DWORD PTR SS:[EBP-64] 006900C2 . 8801 MOV BYTE PTR DS:[ECX],AL
--------------------------------------------------------------------------------
【版权声明】: 看雪论坛首发,转载请注明作者并保持文章的完整, 谢谢!