邪恶八进制信息安全团队技术讨论组's Archiver

sunwear 2005-11-19 15:07

[转载]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()

页: [1]
© 1999-2008 EvilOctal Security Team