1、制作Flexlm license总结标 题: 【原创】制作Flexlm license总结!作 者: laoqian时 间: 2005-12-15,17:45:50链 接: 作者:laoqianFCG时间:2005-12-15软件名称:Zendenc(FLEXlm7.1d)软件类别:NolanBlender提供的经典例子软件介绍:FLEXlm7.1d加密破解工具:ollydbg1.10(FLY修改),w32Dasm_2002828_pll621,UltraEdit10.0,Flexlm7.2SDK,calcseed,lmkg7,lmcryptgui,flexlm9.2sdk的源码等破解目的:制
2、作无限制使用license文件通过这篇文章我们将向你介绍如何制作FlexLm的license,并总结经验第一部分:废话Zendenc这个软件是NolanBlender提供的经典例题,crackZ或网上有下载和分析文章。玩了几个Flexlm,想总结一下,就拿它来开刀方便!本文是关于7.x的,但有部分适用于8.x和9.x,甚至10.x。第二部分:转入正题破解FlexLm最主要的是找到4样东西.1.确定版本号2.找vendor3.计算ENCRYPTION_SEED4.找FEATURE有了这几个,就可以使用FlexLmSDK(如果你有)或工具做出注册机了.btw:FlexLmSDK一般是通用兼容的的,
3、比如7.2就可以制作7.1的,甚至有时7.1也可以制作7.2的,关键是参数设置。1.确定FlexLm版本号BEHAVIORVersion方法一:*用二进制编辑器,推荐使用HexWorkshop(我用UltraEdit10.0,呵呵),它的查找功能很强,特别是FindAllInstances更是我最最常用的.在查找对话框Type中选择类型TextString,Value中输入(#)FLEXlmv,查找,(#)FLEXlmv后面的就是版本号.【以上是tulipfanCCG大虾说的】方法二:用FlexlmSDK里的lmtools(在flexlmv7.1i86_n3目录里),运行进入Utilities
4、,点击“Browse”查找你的Flexlm加密的程序主exe或dll,然后“findversion”,在下面就会显示你的Flexlm版本,用v7.1版甚至可以看到8.3版以后,是通用的。有个别程序可能此法不行!方法三:在反汇编以后,搜索“87654321”,在前面设断点在FlexlmSDK里lm_code.h文件里你可以看到一下几句:代码:*Vendorsprivateseeds,-replacewith32-bitnumbersthat*youmakeup.*/#defineENCRYPTION_SEED10x87654321#defineENCRYPTION_SEED20x12345678
5、/*FLEXlmvendorkeys-enterasreceivedfromGlobetrotter.*ChangingthesekeyshasNOimpactonlicensefiles(unlike*theENCRYPTION_SEEDs).*/*-*Generatethesekeyswith:lmvkey-vdemo-d(+3months)-pALL-cDEMO*(Useadateapprox3monthsout)*/这说明demo的SEED10x87654321,SEED20x12345678对应Zendenc里是:代码:0043391DE8184B0400call0043392283
6、C40Caddesp,0C004339258D8D40FFFFFFleaecx,dwordptrss:ebp-C0;我们可以在这里设断点!0043392B51pushecx0043392C8B9530FFFFFFmovedx,dwordptrss:ebp-D0;ebp-D0地址是以后要用的!0043393281C24C010000addedx,14C;计算得到VENDOR地址0043393852pushedx;VENDOR入栈!(ASCIIzend)004339398B8530FFFFFFmoveax,dwordptrss:ebp-D00043393F50pusheax00433940E895
7、560000callzendenc.00438FDA;这个call就是著名的所谓7648B98E标志call!后面要进去的!0043394583C40Caddesp,0C0043394881BD44FFFFFF214cmpdwordptrss:ebp-BC,87654321;此处比较是否是demo的seed1,当然在此seed1已被加密!00433952740Cjeshortzendenc.00433960;此处比较是否是demo的seed2,当然在此seed2已被加密!0043395481BD48FFFFFF785cmpdwordptrss:ebp-B8,123456780043395E75
8、5Djnzshortzendenc.004339BD004339608B8D30FFFFFFmovecx,dwordptrss:ebp-D00043396683791400cmpdwordptrds:ecx+14,00043396A7417jeshortzendenc.00433983我们在断点停下debp-c0代码:0012D40400000004_.0012D408E0AAA4A0_?此seed1已被加密0012D40CC0121579y_此seed2已被加密!0012D4103F9F6A79yj?此VENDOR_KEY1已被加密!0012D41425DC750Eu?此VENDOR_KEY
9、2已被加密!0012D418B8B046C5牌案0012D41C0B2EAC4EN?.向下拉看0012D4A800000000.0012D4AC00010007_._.0012D4B037300064d.07此处显示7.1d0012D4B40000312E.1.7.10012D4B800000000.这之后,等我们第一次走过著名的所谓7648B98E标志call,“00433940callzendenc.00438FDA”以后,会发现被加密seed又改变了,其实就是简单的xor,可是这个xor我们不得而知!我们得到BEHAVIORVersionV7.1dbtw:87654321此处,在6.x版
10、时,可以得到真seed,参考文章“AnsoftSerenadev8.5-Tutorial”代码:Ialsorememberedthatthechecksforthedefaultseedcodes(shippedwiththeSDK)wasagoodplacetofishthecorrectseeds,asimpledisassemblysearchfor87654321findsthiscode:-:00429C4CCMPD,EBP-34,87654321-Checkforencryption_seed1.:00429C53JZ00429C5E-JumptoError.:00429C55CM
11、PD,EBP-30,12345678-Checkforencryption_seed2.:00429C5CJNZ00429C85-Goodjump.:00429C5EMOVEDI,FFFFFFA5l_initb.l_init-l_sg(1)a.lc_checkout-l_checkoutb.l_checkout-lm_start_real(2)c.lm_start_real-l_good_lic_key(3)d.l_good_lic_key-l_sg(2)从上面可以看到它们的调用关系.我们可以通过l_sg确定vendor_id和ENCRYPTION_SEED,通过lc_checkout可以确定
12、FEATUREIDA通过FlexLm的sig文件可以确定上面的大部分函数,再通过他们的调用关系,很容易找到其他函数.制作FlexLm的批处理文件和工具包可去CrackZ去下载.最后定位到l_sg函数”*我们有9.2的source,我们看到lm_ckout.c中有下面一段,那几个数就是确定l_sg函数上很有用的,针对0x7648b98e;v7.x*/0x6f7330b8;/*-v8.x,9.x*/下面给出参考:V7glseed=0x788F71D2seedval=0x7648B98EV8glseed=0x3CDE3EBFseedval=0x6F73330B8V9glseed=0x72346B53
13、seedval=0x6F7330B8v10glseed=0x5332322Fseedval=0x6F7330B8关于这一段,zhanzixin有一点小小的补充。0x7648b98e这个数字,被称为seedval的,在版本4、5、6中是0xa8f38730在版本7.0-8.0c中是0x7648b98e在版本8.0d以后,一直没变,是0x6f7330b8。代码:/*-*Alsousedbyflexcrypt-notifyifAPIchanges.*/voidl_sg(LM_HANDLE*job,char*vendor_id,VENDORCODE*key)/*-l_sgmeanssignaturev
14、endor_key5*/unsignedlongkeys4;charsigSIGSIZE=0;/*-Ifyouchangethis,youmustchangeitalsoinutils/lmnewgen.c*/*-unsignedlongx=0xa8f38730;v3.1*/*-unsignedlongx=0x7648b98e;v7.0*/unsignedlongx=0x6f7330b8;/*-v8.x*/externvoid(*L_UNIQ_KEY5_FUNC)();unsignedlongd0=0,d1=0;inti=SIGSIZE-1;if(job-options-flags&LM_OP
15、TFLAG_CUSTOM_KEY5)&L_UNIQ_KEY5_FUNC)(*L_UNIQ_KEY5_FUNC)(job,vendor_id,key);return;废话少说,我们直接反汇编zendenc.exe,我们查找“7648B98E”,来到下面,好像就这么,处。前人的经验就是宝贵啊,我省了很多事!代码:.text:00438FDA;=SUBROUTINE?=.text:00438FDA.text:00438FDA;Attributes:bp-basedframe.text:00438FDA.text:00438FDAsub_438FDAprocnear;CODEXREF:sub_432C
16、C4+C7C_p.text:00438FDA;sub_437621+B9_p.text:00438FDA.text:00438FDApushebp=先在这个地方下断.text:00438FDBmovebp,esp.text:00438FDDsubesp,30h.text:00438FE0movebp+var_10,7648B98Eh=就是这个数在确定l_sg函数上很有用.text:00438FE7movebp+var_14,3.text:00438FEEmoveax,ebp+arg_0.text:00438FF1movecx,eax+6Ch.text:00438FF4movedx,ecx+1D4h.text:00438FFAandedx,8000h.text:00439000testedx,edx.text:00439002jzshortloc_439027=这个跳前面分析了,第一次肯定会跳的!第二次再来!.text:00439004cmpdword_49E5EC,0.text:0043900
copyright@ 2008-2022 冰豆网网站版权所有
经营许可证编号:鄂ICP备2022015515号-1