[原创]flexlm程序替换pubkey制作license的血泪史
多年前这个软件都是直接爆破的,程序在lc_checkout的时候会调用setjmp,直接修改这里跳转,让他返回0,实现了不要lic也可以直接运行程序。
if (setjmp(job->jobcatch))
return 0;
补丁的程序太多,setjmp在msvcrxx.dll中,直接修改msvcrxx.dll的setjmp3,在里面判断调用进程是不是需要补丁的程序,是就直接返回0,否还是继续执行setjmp3.用这个方法实现了不修改程序就破解了。
多年后的今天,翻看论坛前辈留下的宝贵资料,结合sdk源码,奋斗了多少个日日夜夜,终于重新对这个软件打了补丁,作出了注册机。
大概方法就是手动或用程序替换程序的pubkey,(当然你也可以直接修改l_pubkey_verify,直接返回0,只要lic格式跟原版一致,例如将一个试用lic的试用时间往后修改一下,程序就能运行。)找到ENCRYPTION_SEED1/2,修改sdk代码,生成lmcrypt就行了。
pubkey的手动替换,请仔细阅读[URL="http://bbs.pediy.com/showthread.php?t=192180"]ECC替换公钥实践[/URL],这个方法适用于任何版本,pubkey分布在lm_new.c中,里面夹杂了大量的垃圾代码,通过asm搜索,再F5,很容易找到这些pubkey,替换成你自己生成的pubkey,然后制作一个dif文件,自动替换,如:
This difference file has been created by IDA Pro
0039F0F8: 76 76
0039F6F4: 13 cf
0039F294: 42 27
0039F068: 26 bc
0039F630: 4D 05
0039F3F4: 99 3c
0039F518: 88 bb
pubkey的自动替换,可以使用[URL="http://bbs.pediy.com/showthread.php?t=199996"]关于Generic ECC pubkey replacer by tanker, v1.70[/URL],但是他不支持11.9.1,用这个工具只能将pubkey替换成特定的pubkey,当然可以替换这个工具中内置的pubkey成你自己的。如果用网上流传的命令行pubkey -d xxx -y xxxx.exe,制作的lic程序不认,他替换的内容太多了,我只替换Group0 PubKey239,采用命令行pubkey -s 2 -d xxx -y xxxx.exe即可。采用这个工具自带的pubkey,记得将他对应的PriKey239贴到sdk的lmprikey.h中。
pubkey的定位和查看:版本低的可以用[URL="http://bbs.pediy.com/showthread.php?p=1324685"]flexlm ECC pubkey 自动搜索工具 [/URL],太高的估计只能自己找了。如何定位可以参照[URL="http://bbs.pediy.com/showthread.php?t=192180"]ECC替换公钥实践[/URL]
很多帖子说查找LM_SEED1/2/3,有看到说LM_SEED-》ENCRYPTION_SEED是不可逆的,一般找到的都是ENCRYPTION_SEED1、2,所以找到的都是ENCRYPTION_SEED1/2,不要当成LM_SEED1、2贴到lm_code.h中,且这个ENCRYPTION_SEED1/2贴到lm_code.h作出的lic也不能用,必须贴到lmseeds.h中,网上很多说贴到lm_code.h,我是没成功过。ENCRYPTION_SEED3、4无关紧要,不用修改。
根据以上方法制作的lic,程序替换过pubkey后,正常运行,但是vendor.exe却运行不了,弹窗提示can't initialize错误,dos窗口提示
D:\>xxx 1 2 3
17:42:31 (xxx) FLEXnet Licensing version v11.6.0.0 build 60117 i86_n3
17:42:33 (xxx) EXITING DUE TO SIGNAL 43 Exit reason 20
(vendor.exe需要传入3个参数才能运行,且lic他从C:\flexlm\license.dat读取,所以先将lic复制成C:\flexlm\license.dat)
最后发现许可有问题,原来是
FEATURE V1 xxx 5.1 1-oct-2017 uncounted HOSTID=ANY \
SIGN="065C C004 8667
需要改成
SERVER My_PC 1010b1915316
VENDOR xxx
USE_SERVER
INCREMENT V1 xxx 5.1 1-oct-2017 uncounted HOSTID=ANY \
SIGN="065C C004 8667
再次运行xxx.exe,终于成功了。
可以参见以下几个文章:
[URL="http://bbs.pediy.com/showthread.php?t=181454"]关于Flexlm ECC pubkey 替换几个常见问题的说明 [/URL]
[URL="http://bbs.pediy.com/showthread.php?t=199996"]关于Generic ECC pubkey replacer by tanker, v1.70[/URL]
[URL="http://bbs.pediy.com/showthread.php?t=81843"]手工快速识别+破解 FLEXLM_ECC关键函数[/URL]
[URL="http://bbs.pediy.com/showthread.php?t=61770"]编译Flexlm 11.4 SDK的步骤 [/URL]
