2009年6月11日星期四

FLEXlm9.2的破解教学三

FLEXlm9.2的破解教学三
信息来源:看雪学院技术论坛
翻译者: newsearch


翻译第三篇 On Software Reverse Engineering - 3
Reverse Engineering, FLEXlm, IMSL

揭示加密钥和加密种子

从实际的观点出发我们现在可以止步不前了,因为有了许可的拷贝我们可以自由的使用目标程序了。但是,软件破解的最终目的是反向(逆向)工程的所有相关算法并重新创建它们,那就好像我们是原始作者一样。在我们的实例中,最低限度的要求是揭示VNI的5个vendor密钥和3个随机种子。不用说,这要求我们更仔细的阅读FLEXLM SDK源代码,因此我们简单的回顾一下它是怎样组织的。下面的列表显示了包含最关键文件的文件夹。

src lmgr.lib或lmgr9a.dll的源文件
app lmgras.lib的源文件
server lmgrs.lib的源文件
master lmgrd.exe的源文件
utils 实用工具的源文件
machind 机器独立文件(源 & 头)
i86_n3 对于x86 平台的最终的二进制文件
h 头文件
certicom 来自Certicom公司的库和头文件
ulite FLEXLM的ultralite版本

此外,文件和函数根据其角色被指定了不同的前缀。例如,目录app, server和master以ls_开始,而在utils中是以lm为前缀。

l_ 许可证, 用于内部函数
lc_ 许可证客户端, 用于客户端API
ls_ 许可证服务器, 用于服务器API
lm_ 许可证管理器, 用于实用工具和一般的程序(原为材料)

现在,我们回到文献[2]和[3]中关于Vendor怎样实用FLEXLM SDK的指导中。基本地,Vendor需要将许多FLEXLM二进制与其自己的产品结合并创建若干实用工具-一些作为内部使用,一些用于最终用户发布。在这些Vendor-所产生的文件之间有很亲密的联系,下面是其关系表:

文件 由...产生 #include
lmrand1.exe lmrand1.c + lmgr.lib
lmcode.c, lsrvend.c lmrand1.exe + lsvendor.c lm_code.h
lmappfil.c, lmkeyfil.c lmrand1.exe
lmnewgen.exe lmnewgen.c + lmcode.c + lmgr.lib lm_code.h
lm_new.c lmnewgen.exe seeds & pubkey
lmseeds.h lmnewgen.exe
lmprikey.h, lmpubkey.h lmnewgen.exe
lmcrypt.exe lmcrypt.c + lmgr.lib lm_code.h,
lmseeds.h,
lmprikey.h
makekey.exe makekey.c + lmgr.lib lm_code.h,
lmseeds.h,
lmprikey.h
vendor application vendor code + lm_new.obj + lmgr.lib + seeds & pubkey

libsb.lib + libcrvs.lib
vendor daemon lsvendor.obj + lm_new.obj + lmgr.lib + lm_code.h,
lsserver.h,
lmgras.lib + lmgrs.lib + libsb.lib + seeds & pubkey
libcrvs.lib

注意,并非上述的所有文件都对我们是重要的。lmappfil.c和lmkeyfil.c是Vendor确定的滤波器,它们是附加的安全测试但通常未用。类似的,lmprikey.h 和lmpubkey.h仅用于CRO密钥,在我们的例子中可以忽略。通过编辑lsrvend.c 或lsvendor.c,Vendor可定制后台程序,但很少有人那样做。
有一件值得讨论的事情是Certicom产品,也即libsb.lib和libcrvs.lib 。它们几乎涵盖了从SHA到DSA的整个加密领域,而且FLEXLM采用的API几乎为ECC(椭圆曲线加密技术)和RGN(随机数字产生)。ECC用于在CRO中的公开/专用密钥对,但在我们的目标程序中关闭了;而RGN用于Vendor种子的转换,我们不可忽略。
正如先前声明的,Vendor选择了3个随机种子(LM_SEED1, LM_SEED2, LM_SEED3),但并不直接使用它们。实际上,基于前3个,lmnewgen.c!main()

没有评论: