InstallShield 的命令行 ISCmdBld.exe 跟踪简记
翠竹心情 的破解挺好用的,只是命令行程序 ISCmdBld.exe 没有破解,这样就不能批处理打包了。
趁周末稍微研究了下,但是最后结论还没得出来,先简要记一笔,以后再补充。
ISCmdBld.exe
00419860 /$ 6A FF push -1 ; main 入口
004198EB |. E8 D079FEFF call 004012C0
00401376 . E8 A54E0100 call 00416220 ; 疑似加载 ISWiBuild.dll
004013C3 . E8 981B0000 call 00402F60 ; 这句执行后便会输出 build start at 字样
004013E9 . FF92 88000000 call dword ptr [edx+88] ; IsWiBuil.6ADE75D0
6ADE7637 E8 845C0000 call 6ADED2C0 ;
6ADED366 8D4C24 10 lea ecx, dword ptr [esp+10] ; esp+10 处等下会存有输出参数
6ADED36A 66:C74424 10 00>mov word ptr [esp+10], 0
6ADED371 8B06 mov eax, dword ptr [esi]
6ADED373 8B90 DC000000 mov edx, dword ptr [eax+DC]
6ADED379 51 push ecx
6ADED37A 56 push esi
6ADED37B FFD2 call edx ; 这里会进行一番验证
6ADED37D 894424 14 mov dword ptr [esp+14], eax
6ADED381 8D4424 14 lea eax, dword ptr [esp+14]
6ADED385 50 push eax
6ADED386 E8 15DFFDFF call 6ADCB2A0
6ADED38B 66:837C24 10 00 cmp word ptr [esp+10], 0 ; 这里检查刚才的验证结果
6ADED391 75 48 jnz short 6ADED3DB ; 关键跳转
6ADED393 8DB424 84010000 lea esi, dword ptr [esp+184] ; 这里下去就会抛异常了
刚才的
6ADED37B FFD2 call edx ; 这里会进行一番验证
在实际运行中会跳到 ISAppServices.67F109F0:
67F109F0 8B4424 04 mov eax, dword ptr [esp+4]
...
67F10A22 68 187F1968 push 68197F18 ; ASCII "IsProductLicenseValid"
67F10A27 50 push eax
67F10A28 FF15 B4711868 call dword ptr [<&KERNEL32.GetProcAdd>; kernel32.GetProcAddress
67F10A2E 85C0 test eax, eax
67F10A30 74 1E je short 67F10A50
67F10A32 FFD0 call eax
之后便找 ISUIServices.IsProducetLicenseValid
翠竹心情破解的主要文件就是 ISUIServices.dll
后来发现一点,把 ISUIServices.dll 换成原版,命令行编译能顺利进行,换成破解版的,就提示许可证过期啥啥。
一个暂时的解决办法是,把上面
6ADED391 75 48 jnz short 6ADED3DB ; 关键跳转
改成
6ADED391 EB 48 jmp short 6ADED3DB ; 关键跳转
就可以用了
文件中地址是 0002D390 (75 -> EB)
但是,后来的编译过程中,发现它又有几次调用了 ISUIServices.IsProducetLicenseValid,所以这个办法可不可靠还是未知数。
暂记,以后有空验证。
(原发表于 CSDN:https://blog.csdn.net/cnStreamlet/article/details/4125834)