已阅读5页,还剩12页未读, 继续免费阅读
版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领
文档简介
标 题: 【原创】制作Flexlm license总结!作 者: laoqian时 间: 2005-12-15,17:45:50链 接: /showthread.php?t=19435作者: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的源码等破解目的:制作无限制使用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一般是通用兼容的的,比如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,点击“Browse”查找你的Flexlm加密的程序主exe或dll,然后“findversion”,在下面就会显示你的Flexlm版本,用v7.1版甚至可以看到8.3版以后,是通用的。有个别程序可能此法不行!方法三:在反汇编以后,搜索“87654321”,在前面设断点在FlexlmSDK里lm_code.h文件里你可以看到一下几句:代码:*Vendorsprivateseeds,-replacewith32-bitnumbersthat*youmakeup.*/#defineENCRYPTION_SEED10x87654321#defineENCRYPTION_SEED20x12345678/*FLEXlmvendorkeys-enterasreceivedfromGlobetrotter.*ChangingthesekeyshasNOimpactonlicensefiles(unlike*theENCRYPTION_SEEDs).*/*-*Generatethesekeyswith:lmvkey-vdemo-d(+3months)-pALL-cDEMO*(Useadateapprox3monthsout)*/这说明demo的SEED10x87654321,SEED20x12345678对应Zendenc里是:代码:0043391DE8184B0400call0043392283C40Caddesp,0C004339258D8D40FFFFFFleaecx,dwordptrss:ebp-C0;我们可以在这里设断点!0043392B51pushecx0043392C8B9530FFFFFFmovedx,dwordptrss:ebp-D0;ebp-D0地址是以后要用的!0043393281C24C010000addedx,14C;计算得到VENDOR地址0043393852pushedx;VENDOR入栈!(ASCIIzend)004339398B8530FFFFFFmoveax,dwordptrss:ebp-D00043393F50pusheax00433940E895560000callzendenc.00438FDA;这个call就是著名的所谓7648B98E标志call!后面要进去的!0043394583C40Caddesp,0C0043394881BD44FFFFFF214cmpdwordptrss:ebp-BC,87654321;此处比较是否是demo的seed1,当然在此seed1已被加密!00433952740Cjeshortzendenc.00433960;此处比较是否是demo的seed2,当然在此seed2已被加密!0043395481BD48FFFFFF785cmpdwordptrss:ebp-B8,123456780043395E755Djnzshortzendenc.004339BD004339608B8D30FFFFFFmovecx,dwordptrss:ebp-D00043396683791400cmpdwordptrds:ecx+14,00043396A7417jeshortzendenc.00433983我们在断点停下debp-c0代码:0012D40400000004.0012D408E0AAA4A0_?此seed1已被加密0012D40CC0121579y此seed2已被加密!0012D4103F9F6A79yj?此VENDOR_KEY1已被加密!0012D41425DC750Eu?此VENDOR_KEY2已被加密!0012D418B8B046C5牌案0012D41C0B2EAC4EN?.向下拉看0012D4A800000000.0012D4AC00010007.0012D4B037300064d.07此处显示7.1d0012D4B40000312E.1.7.10012D4B800000000.这之后,等我们第一次走过著名的所谓7648B98E标志call,“00433940callzendenc.00438FDA”以后,会发现被加密seed又改变了,其实就是简单的xor,可是这个xor我们不得而知!我们得到BEHAVIORVersionV7.1dbtw:87654321此处,在6.x版时,可以得到真seed,参考文章“AnsoftSerenadev8.5-Tutorial”/crackz/Tutorials/Serenade.htm代码:Ialsorememberedthatthechecksforthedefaultseedcodes(shippedwiththeSDK)wasagoodplacetofishthecorrectseeds,asimpledisassemblysearchfor87654321findsthiscode:-:00429C4CCMPD,EBP-34,87654321-Checkforencryption_seed1.:00429C53JZ00429C5E-JumptoError.:00429C55CMPD,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可以确定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=0x72346B53seedval=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_sgmeanssignaturevendor_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_OPTFLAG_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_432CC4+C7Cp.text:00438FDA;sub_437621+B9p.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:0043900Bjzshortloc_439027.text:0043900Dmoveax,ebp+arg_8.text:00439010pusheax.text:00439011movecx,ebp+arg_4.text:00439014pushecx.text:00439015movedx,ebp+arg_0.text:00439018pushedx.text:00439019calldword_49E5EC=在这个地方下断,F8之后就是我们要的!.text:0043901Faddesp,0Ch.text:00439022jmploc_43913A.text:00439027;-.text:00439027loc_439027:;CODEXREF:sub_438FDA+28j.text:00439027;sub_438FDA+31j.text:00439027push4.text:00439029leaeax,ebp+var_28.text:0043902Cpusheax.text:0043902Dmovecx,ebp+arg_8.text:00439030addecx,0Ch.text:00439033pushecx.text:00439034movedx,ebp+arg_4.text:00439037pushedx.text:00439038callsub_451F26*别急,先做一下准备工作:*前面我们在00433938处可以得到VENDOR为zend,而0043392C处的ebp-D0是初始化VENDORkey的地方!代码:0043391DE8184B0400call0043392283C40Caddesp,0C004339258D8D40FFFFFFleaecx,dwordptrss:ebp-C0;我们可以在这里设断点!0043392B51pushecx0043392C8B9530FFFFFFmovedx,dwordptrss:ebp-D0;ebp-D0地址是以后要用的!0043393281C24C010000addedx,14C;计算得到VENDOR地址0043393852pushedx;VENDOR入栈!(ASCIIzend)004339398B8530FFFFFFmoveax,dwordptrss:ebp-D00043393F50pusheax00433940E895560000callzendenc.00438FDA;这个call就是著名的所谓7648B98E标志call!后面要进去的!0043394583C40Caddesp,0C0043394881BD44FFFFFF214cmpdwordptrss:ebp-BC,87654321;此处比较是否是demo的seed1,当然在此seed1已被加密!00433952740Cjeshortzendenc.00433960;此处比较是否是demo的seed2,当然在此seed2已被加密!0043395481BD48FFFFFF785cmpdwordptrss:ebp-B8,123456780043395E755Djnzshortzendenc.004339BD004339608B8D30FFFFFFmovecx,dwordptrss:ebp-D00043396683791400cmpdwordptrds:ecx+14,00043396A7417jeshortzendenc.00433983但是问题又来了,我们并没有license.dat,这就要我们做一个假的,否则第二次不会来到text:00438FDA,那就前功尽弃了!license.dat格式我不说了看雪的书上以及很多资料说得很清楚了。我们根据我们上面得到的正版license.dat内容,做一个假的license.dat,放在zendenc目录里下:*FEATUREZend_Encoderzend1.0permanentuncountedVENDOR_STRING=www.FCGHOSTID=ANYSIGN=787878787878(怎么又是78!?)*因为断开网络,所以运行zendenc.exe会找不到license,我们把它指向我们的假的license.dat,当然是出错退出!经过仔细跟踪还会发现license文件名必须是Zend_Encoder.dat!好,工作开始:下面我启动ollydbg1.10调入zendenc.exe,在入口停下,直接下bp00438FDA,bp00439019F9执行,中断在00438FDA。这时第一次来到00439002jzshortloc_439027时它是要跳过去的,注意要跳就让他跳吧。若开始第一次时强制不跳,倒是能来到00439019,结果跟出了错误的seed1和seed2,而且多少次结果还都一样。再次F9,我们又回来中断在00438FDA,F8单步执行,这次不跳了,直到过了00439019,暂停!我们在命令栏下如下命令,可以看到:(可以纪录了多次的调试结果)代码:输入desp+4在内存窗口看到,【长型ASCII转存】*003983AC646E657Azend输入desp+8在内存窗口看到,【长型ASCII转存】*1*0012CF9800000004.0012CF9CB68ACAC8仁?data00012CFA096327B112data10012CFA4534D01FB?MS0012CFA82D607B98?-0012CFACB069483D=Hi0012CFB067FCD8B6敦?0012CFB400000000.*1*输入desp【长型ASCII转存】*2*0039826000000066f.0039826400F400E6?00398268B9DEDAA8薰job+080039826CEB6E4C333Lnjob+0c00398270BEF9AA16?job+10*2*这些数据就是我们计算seed1和seed2的关键!4.计算ENCRYPTION_SEED使用工具calcseed.exe,输入data0,data1,job+08,job+0c,job+10,VENDORname为zend上述信息,计算ENCRYPTION_SEED10xfa5410deENCRYPTION_SEED20xdaeca107多次结果是一样的,注意是第二次自然来到时!至此,分析已经基本完成,可以使用SDK写license.dat第三部分:制作license.dat方法一:我们得到数据如下:代码:FeathureZend_EncoderFeathureVersion1.0ENCRYPTION_SEED10xfa5410deENCRYPTION_SEED20xdaeca107VENDORZendBEHAVIORVersionV7.1d使用lmkg.exe,选择version7.0,在vendor_id输入Zend得到:代码:/*Version7keys*/#defineVENDOR_KEY10xdb5c129b#defineVENDOR_KEY20x7c9d919a#defineVENDOR_KEY30x1ee3b786#defineVENDOR_KEY40x01745090#defineVENDOR_KEY50x2c2dd7f7#defineCRO_KEY10xdf7c1093#defineCRO_KEY20x3abff31c#defineVENDOR_NAMEZend按照上面的信息,编辑flexlmv7.2machindlm_code.h代码:*#ifndefLM_CODE_H#defineLM_CODE_H#includelm_cro.h/*PickanLM_STRENGTH.*IfyourenotusingCROpublic-key,thenleavethisas*LM_STRENGTH_DEFAULT.*Ifyoureupgradingfrompre-v7.1,andwantnochanges,*setthistoLM_STRENGTH_LICENSE_KEY.*/#defineLM_STRENGTHLM_STRENGTH_DEFAULT/*注意12位的SIGN要这个参数*/*LM_STRENGTHOptionsare*LM_STRENGTH_DEFAULTPublickeyprotectionunused*UseSIGN=attribute*signlength=12*Publickey:*LM_STRENGTH_113BIT,LOWsignlength=58chars*LM_STRENGTH_163BIT,MEDIUMsignlength=84chars*LM_STRENGTH_239BIT,HIGHsignlength=120chars*Usepre-v7.1,non-CRO*LM_STRENGTH_LICENSE_KEYUsepre-v7.1license-keys.*DoesntuseSIGN=attribute.*/*Vendorsprivateseeds,-replacewith32-bitnumbersthat*youmakeup.*/#defineENCRYPTION_SEED10xfa5410de/*我们找到的SEED1*/#defineENCRYPTION_SEED20xdaeca107/*我们找到的SEED2*/#defineENCRYPTION_SEED30x22222222/*没用,不变*/#defineENCRYPTION_SEED40x32323232/*没用,不变*/*FLEXlmvendorkeys-enterasreceivedfromGlobetrotter.*ChangingthesekeyshasNOimpactonlicensefiles(unlike*theENCRYPTION_SEEDs).*/*-*Generatethesekeyswith:lmvkey-vdemo-d(+3months)-pALL-cDEMO*(Useadateapprox3monthsout)*/#defineVENDOR_KEY10xdb5c12db/*我们算出的*/#defineVENDOR_KEY20x7c9d91ba#defineVENDOR_KEY30x1ee3b7c6#defineVENDOR_KEY40x017450b0#defineVENDOR_KEY50x0c2dd7f7/*我们算出的*/#defineCRO_KEY10xdf7c10d3/*UsedtoenableCRO-turnedoffbydefault*/#defineCRO_KEY20x3abff33c/*BesuretoresetLM_STRENGTHaboveifCRO_KEYisnon-zero*/*FLEXlmvendorname.LeaveasdemoifevaluatingFLEXlm.Otherwise*settoyourvendordaemonname.*/#defineVENDOR_NAMEZend/*我们找到的VENDOR*/*Oldercustomerswithnewerversionsmaywanttoset*behaviordefaultstopreviousversion,thoughthisisusually*discouraged.Behaviorscanbechangedindividuallyusing*LM_A_xxxintheflexibleAPI.Newcustomersshouldusethe*currentdefault,assetbelow*Validsettingsinclude:*LM_BEHAVIOR_V2,_V3,_V4,_V5,_V5_1,_V6,_V7,_V7_1*/#defineLM_VER_BEHAVIORLM_BEHAVIOR_V7_1#endif/*LM_CODE_H*/*编辑好了,存盘,OK打开flexlmv7.2i86_n3genlic.exe开始我们的制作吧看附图:basic窗口内填好Feathure,选择permanent打勾,选择runanywhere进入advance窗口,version内填FEATURE的Version1就是.000,Vendorinfo填上CrackedbylaoqianFCG其余不改了,回到basic窗口,点击makelicense,然后save你的license.dat文件大功告成!你可以制作各种限制条件的license.dat,随你便了,我做的是无限制!本方法二:用lmcryptgui可以制作成功以上的license!我们得到数据如下:代码:FeathureZend_EncoderFeathureVersion1.0ENCRYPTION_SEED10xfa5410deENCRYPTION_SEED20xdaeca107VENDORZendBEHAVIORVersionV7.1d1.手动找到vendor,seed1,seed2,FEATURE和版本7.1,7.2.,8.x等2.填写vendor,seed1,seed2,和BEHAVIORVersion7等,注意没有0x3.执行,生成一个exe文件.4.制作一个假的license.dat文件,格式参考其他资料了,一定要正确的格式,只有sign=是随便写一个!5.把这个假的license.dat文件往那个生成的exe文件上一拖放,及自动生成正确的license.dat文件,sign已经是正确的了,前提是你前面得到的vendor,seed1,seed2,FEATURE和版本等都是正确的!附license.dat的写法:FEATURExxxxxVENDORxxx1.000permanentuncountedVE
温馨提示
- 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
- 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
- 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
- 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
- 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
- 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
- 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。
最新文档
- 2025年特种作业操作证核心考题题库及答案
- 2025年前台接待招聘面试题库及参考答案
- 2025年符合性审查专员招聘面试参考题库及答案
- 铁路集团笔试题库及答案
- 2025年基础护理师招聘面试参考题库及答案
- 盘锦招聘教师考试题库及答案
- 中药医院考试题库及答案
- 2025年营销策略专员招聘面试题库及参考答案
- 2025年新媒体运营经理招聘面试参考题库及答案
- 2025年零售区域经理招聘面试题库及参考答案
- 2025年乡镇畜牧站防疫员招聘面试备考指南及模拟题答案详解
- 低温烤肠多样化口味创新创业项目商业计划书
- 预备党员转正后支部书记谈话记录范文
- 特种文献检索课件
- 大学生创新创业基础课件 第10章 创业核心内容三:市场营销
- 四川省土地开发项目预算定额标准
- 会计凭证填制规范及案例解析
- 新教材2025人教版七年级上册全部单词默写版
- 肺癌术后治疗用药指导
- 学校送医管理办法
- 玉环清港台山100MW沿海滩涂渔光互补项目环评报告
评论
0/150
提交评论