一个密码学算法的crackme的分析_第1页
一个密码学算法的crackme的分析_第2页
一个密码学算法的crackme的分析_第3页
一个密码学算法的crackme的分析_第4页
一个密码学算法的crackme的分析_第5页
免费预览已结束,剩余7页可下载查看

下载本文档

版权说明:本文档由用户提供并上传,收益归属内容提供方,若内容存在侵权,请进行举报或认领

文档简介

1、百度文库-让每个人平等地提升自我一个密码学算法的crackme的分析文/KYO这次写一篇关于软件运用了经典密码学算法的分析的文章。希望能给初学者带来进步。首先这个程序是happytown的第14个crackme,在看雪已经有人写了注册机,不过分析过程没有写,可能对初学者来说不太好看懂,我这里就做一次详细的分析吧。首先运行下这个程序,随便填写一个用户名(kyo327)和密码(1234567)点击注册,-I -HkD :v Iin3 2 a 5 ncraclhiap匚 rack in e_OO 1 4llfrl |Cafn|prA-Gv| K 口仃口口40口 1 门口4町也门口1由Y助9 numb

2、er> :;. RJQ口口g ;: QggjQt没有任何提示。接着用PEID加载,文件:D14'b _nr 14 112人口点lOOOCHOD空今偏拔:UUUJ,iOD 迷魂屈版本KF 就,t4it营于节:|55. EBl EC. 6A子店薪:而蔬7近一£nport.»CloseC-aiKL'CiiEiJ W uiypw s(他 口门0Wicrcreoft Vizual C+ 6 C去文件扫描卬)I 蹒井堤可|选项 |关于如| |_君出|7总在接前F鹏信息|从抓图可以看到该程序没有加壳,编程语言采用的是VC+,用PEID的插件KANAL分析出它所采用的

3、密码算法有SHA1和RSA,这样我们心里至少先有个底。*这里插播个广告,黑友们请无视,只是为朋友的网站能被搜索引擎收录, 多加点流量。返利J网,淘宝返利,淘宝返现购物。*准备工作做完后,用 OD加载,用万能断点下断,程序断在这里。地址施工数据西匚褊注释004011C1 OD4011C8 00 4011CA 00如11CC 004011D2 004011D58BB424 6C05Ci(,F3 AB,60: ABBE1II CX0400(.83c4 08.AAMOV ESI,IffORD PTR SS: KSP+56CRIP STOS mBD PTR ES, EDI S70S WORD TTE E

4、S: EBIMOV EEX, DTORE FTR DS: 10USER3Z.AID ESP, 8HOE ETTE TIE ES- EDIUSEE32 G+mLgIt甘mT«c th004011D6 00401IDA 004011DF C04011E0 004011E5004011E68D4424 10,6S C9000000,50.BB E8C30000,50FFD3LIA EM, DffORE FTR. S3: EESF+10HJSM 0C9PUSH EAXPUSH 3E8PUSH ESICJkLL EBXrCount = 09 (201.)1 BufferICrmtroHD =

5、3E9 (1000 ) httrdUeDlgIttnT*x|口口401小8|,3DTC24 10LEA EDI. DWORD PTR SS; ESP+10I出004011EC 004011HFD04011F1004011F3004011P5,FF 33co,F2: AE,F7D1,49OCR ECI, FFFPFFFFMJR EN, E色MFlffi SCAS MTE PTR ES: ED工KOT ECXMC ECX用户名不能为口 h004011F6.7 0F34 EAJOIOOCIIJI CratkN .004013E6004011FC6D8C24 DOOOCKLEA ECX, DTORE

6、FTR SS : ESF+DS00401203004012080DW12D9 0040120E UO 401 EOF,BG C9000000 ,51,6B E903000D,56,FFD3PTSH 0C9PTSH ECXP1EM 3E9PUSH ESIOLL EBXfC 口皿ire Qoi)BufferControllI = 3E9(1001 ) hindJjelDlglteinTextA004012113A3424 B0OOO(MOV AL; BYTE FTR SS, ESPtD3密码卷目为Cih00401218 0040121A 0040:?tC 00401223S4D0 74 44 ,8

7、DB424 D8DOOI > 833D 6CTF40UITEST AL, ALJE SHORT Cr*ckfli_. 00401260L2A ESI, HORD FTR SS; ESPWfHP DWORD PTR 口S :料皿跖匚L 1寄吗送到日004012ZA0040122C U040122F 00401234 00401235TE 13,0FBE16,6B 8000000052E0 225EOOOOJLE SHORT CrackMe_.0040123F MtWSK EDIV BYTE PTK IE: ESI TUSH 8C TUSH EDXCALL Cr00407050F8走一遍,发

8、现一直走到这里,先粗略的用004010f4Q04D10S7.83C4 0405CO 5EAID Eifp 1 TESr E汉 EXHPOP KI0D4D1OFAwr0FR4 RMIOOOOCJT00401111104D10W6A 40PUEH ICcio4Mme.睛 CirCKOM)PIER如00401057E B4IO10WPUSH 入 w间 j.M 巾X0M004510SC6A oaTUEH 0004M 0包JF15 CCC04O3(CilL DYOM FT1 IS: USEM之.群目血L004010A433C0ZOR EAJi, IAK咚 W二二-l«_OK |iB_ICOIW

9、kSTEEISK HE JkFPUJODXl Title -7angra.tulatiorisrjutj m ut! *二 i0”.ur = HI IT 1.I1 电到了 0040108a处,跳转实现了,跳向了失败,这说明只要上面的 eax不等于0就能注册成功。再看这里uuqui/史 00401X1 004013C7 0O4CI13CE 004013CF 00401300,阳 UUUHLIUUU.3184汉 30O3«.8T8424 58025(.52.50.FflE era4gLALL Uriclfla JJU4U3LEA EB£ IHOBD PT1 SS: ESF+33

10、0LEA EAK. W口RD FTR 5S:TSP+263PUSH EDIPUSH EAXCALL EW0R1 FTR 05: OIERirEL32. Im.pArStrinrg21 Sti'ingl LlstrcmpA0C4D13D& M4013E8 0O4LI13E9 0D4LI13EK 004013DC 0O4313DB ooaai3DE M4U13EF 0O4CH3E5004013E& 0C4D13ET.F7D8.5f.5E1BC0,51.40.51.S1C4 5005005(.C3) 5f.5fRDKEG E楸POP EIJIPOP ESISBB EM, EA

11、KPOP ebf'IUC EVPOP EfKiDD BSP, 550JEDTPOP EllPOP ESIFTP EFP程序是走到004013e5经过了 RETN后才到了 00401087 test eax,eax的。上面有个字符串比较函数,我们知道如果两个字符串相等,返回值 eax=0,否则返回非 0值。在经过了neg eax, sbb eax,eax inc eax后,只有当eax=0才能通过验证。因此只要上面两个字符串相等就可以注册成功,现在看来就只有这一处验证。当然如果把0040108a处的Je 0040111d改为jne 0040111d就可以暴了它了。不过我们还是分析算法为主

12、。现在回到开始,一步步 F8来到这里0040121C 004012230040oooizsc 00401 空 F 00401234 0401235 OO4O1Z3A00401Z3D 0040123F 00401242 00401248 Q040124B 040125000401K2 00401250 CMJ40125B 0040125C 040125E 004012608DB424 1)8000( S33D 6CBF400I 7E 13 0FBE16 6日 SOOOCOOO 盟 E8 225EOOOO 跳4 QB IB 11 OF现06 如OD ODCD40a CAJDl 25 6000000

13、0 SECOCFS4 BEC1OOM 6MB 01 46 叫CQ T5 C3SDS424 F803M 鸵山-ESl- DWO EL- PT k SSESP+ DS JrCTF DIORD FTK DS: 40DF6C, L JLE SHORT Crickfla . 0040123F M3V5X EM, BYTE FTR U5: ESI PUSH 60fUSX EDXCALL Cr«k*_ 00407050ADD ESP, 8JMF SHORT CracMIe , 00401250 IM3VSX EAX, BYTE Hi K: ESI NOV ECK,EWORB FIR DS,40DD

14、0O MW AL, BYTE FTR DS: ECX+EAX*21 AND EhX, 30 TEST EAX, EAX'll CrackNa_. 004013E5ITV AL, BYTE FTR DS: ESI+1INC ESITEST: AL, ALJNZ SHORT Crachfle . 00401223 LEA EDX, DtfOiM PTE SSlESP+3FB PVEH E1X基码送到“循环取密码第每一位Ci acLM 匕.0040MOk密码必须为Q-9 a f kF之间的字符可以看到从0040121c到00401260之间,是用输入的密码的长度做一个循环,来验证密码必须为0

15、-9,a-f,A-F之间的字符,否则会跳向失败。我最开始输入的1234567算是混过去了,呵呵。接着看:地址HEX数据友汇编OO403DDOM 8ES424 (NOV EDr,DOm FTR SS : EEP+4口口如3皿4,STFUSE EDI00403EBS0040:: DM,E9 50000000,33C0NOV ECI, 50 如R EM, I AIrin,n-pTir,6D7A 23LEA. IDI? DWORD PTR X: EDX+2Srmn-miFFS-AJ的 5105 LVOBD FTK E5;EmrmnrDEi,8942 04HQV BWOBJ PTR DS EDU&quo

16、t;,EMrmo/DE4,8902riOV DHO灯 PTB US: EDX1 EAI0040:; DESCT42 060123,MOV DWORD PTR DS:ED+B367452301I:I040;EEDC742 0CS9kB(NOV DWORD FTR DS: EDX+C EFCDAEE9包尔门C742 1JEUC1m C40ED FTR DS; EDK+LO ”郸ADLFEUU4U.;LFBC742 147的4:NOV DWORD PTR DS: |【囿狂皿也£476IJU4U.:ELIJ IJ0403ELIU l.U*U.DJk 00403EMC74? 18.C3 90r

17、oEiHOV DWORD FTR US: EDX+L6,CjD2ELfOFOP IDIEETHHOP紧接着下面有一个 call,右键点跟随,发现代码是这样的这里面有5个常数的赋值,分别是h, EFCDAB89h,SHA1标志,这里估计是98BADCFEh, h, C3D2E1F0h.这个是SHA1的初始化。先不管f8过去。一直走到这里地址c29町10。o力F o o o o o o _nJOQOOOOnc o o- o - o o o AAQOO如 Eoooooonnaww加加mmm5E00C000 000 000门00Q00000 0000 nnooooooon E o o o o- o o

18、 n N Ewooooaoocrri5 o Q o- o o o nF Q Q Q 口 Q 口00 如 0000 0000nn咫 00Q00 0000 nn帆0Q00000000 nnLA寥ooooooocoollrl Asoo-ooon 2- 6 V o o o o E D o D o o o n I z o n BDQOO-oon D 5 o o o o o ,n二1QQ1ZFT4G 0Q12FT5C QQ12TT6G ai2F77C aiSFTBC012F7QC 口。12FTM migFTRn 命参:经过了 call 00404060后,dd esp+1a0可以看到一串字符,根据上面代码

19、我们知道这是对用户名kyo327做了 shal的加密。我现在通过 zobox这个工具验证一下看看是否正确。可 以 看 到 kyo327 通 过SHA1 加 密 后 是D81E2A1A72F5A4F570B0F05BAAA0CFFC5D2D6820,刚好和上面的字符串一样。那么可以肯定我们的猜想是正确的。00401Z94.04COTEST AL kL00401296出 75 E4L.TNZ SHORT Ckfk_.。口和 127c00401293> BDW4 A0010(LEA EDU DWORD FTR S5£SF+1AOOD4O129F8D&124 F8K30(LEA

20、 EAU DTORB PTR SS;ESP+3F8QMULZAS.5ZFKH EEK0040UA7.50FKH EAKQ0401ZASE3 B3?DOOQi3C/LL Cracfcfle. U04040&0004012AE目 3tq 05ADD ESF 304012E0|33FF|XOR EDI EDI004012B2.8Di4Z4 690201LEA ESI, DID地 FTE S3; |:ESr+26q004012£9> 33COflOR E盛 M004012BB.0A843C AOOlOltAW AL BYTE FTR SS: ESP+EMf 10004012C2

21、.8BC3HCIH ECU 猛I004012C4.B3E1 F0JkND ECK. fFFFFfFO004012C7.91F9 90000001CMP EC£ 90040LZCETE 11JLE SHOKT Crtckf . 004012E0004012CF.C1E3 04SHR E此 4004012B2.63CO 37ADD EAX,37004012D5,5。TUSK EMnni4012B&E3 B55C0100CALL Crteldfle. 00405F9D004012DB.83C4 04ADD ESP 4EDI=OOt2F5C3ASCII*这里插播个广告,黑友们请无视,

22、 1只是为朋友的网站能被搜索引擎收录, 多加点流量。返利J网,淘宝返利,淘宝返现购物。*接下来继续F8走来到这里,看下面这堆代码04012 AT 004012BOB3C4 OS.33FFAID ESP, 8J!OR EM, EM0040LZB2.i0DE424 69020( LEA ESI, DTOM FTK SS ESP+269004DL2BQ> 33COrlOR FAX, EAX0D4O1ZEEBA&I3c AO口15no/ AL, BITE TIE SS: CE5F+EDL+1AD004012C2.8BCS0V EC先 IU004012C4 D040UC733E1 JO.s

23、ira wqoqcqcMD EC£ FFFFFFFDCMF EC£ 现04O12CBTH 11JLE SHPRT(7rackfJe_, Q04D12ECQ0WL2CF.C1£S M5 冏4004012B2:83CO 37ADQ Wr37004012E5.50TUSH EAX0040L2B6.EQ BS5COOOCCALL Cradle . 004口匕/口004012DE.B3C4 04面口 ESP. 4004012BE一” EB 06JUP SHORT CratHU_. D04O12E£OO4D12EO> C1E9 04SHK 眄 4004012E

24、3.:83CO 30ADO EAI, 30004012E6> 8345 FFHW BYTE PTE DSJESI-11 AL004012EQBAB43C ADOIO(NO/ AL, BYTE PTR SS: CESF+IDL+1ADoo4ouro.SAIDM07 叫 AL004012F2EDE2 OFAND UL,叮CMP 叫 900401,5.SOVA 09004012FBT6 11JBE SHORT CfwHI j 0040130B0 4012 FAB3E0 OFMD EAK,OFa4OL2FB.:S3C0 37ADD 1 Alt, 37004O13OO.50TUSH E位00401

25、301.ES 白盾cm。CALL CracUle . 0C4O&P9O00401306.63C4 04ADU 西E 400401309“EE 06JUP SHORT.0040131L00401SOB> 03EO OfANH EAI,OF0040130ES3C0 30ADft E题冥一00401311> :书808MW BYTE FIR DS ESI, ALDO4013131.47工即即工00401314.83C5 02ADU ESI, 2QQ4QL31T.33IF 140T EDI, H门。4 口葡r TC QDIjL 5加KT CrtcMle 0040129口口叫31匚

26、kwr.Tir.,8整4%V cm UK SS;r cn-mimi i, r从004012b2到0040131c这段代码作用是把上面用SHA1加密的字符数转换为16进制。送到esi,也就是ss:esp+268处。然后下面一句mov byte ptr ss:esp+278,0 ,这句代码用0刚好把转换成16进制的密文从中间截断了。 那么此时ss:esp+268对应的字符串就变成 了 D81E2A1A72F5A4F5,对应的 16 进制就是:44 38 31 45 32 41 31 41 37 32 46 35 41 34 46 35。也就是取了加密后的前8位字符。至此SHA1的加密已经结束。现在

27、看下面的代码。下面是 RSA的加密。对于 RSA ,我 先在这里说点基础知识,磨刀不误砍柴功嘛。RSA的整个算法可以描述如下:选取两个大素数p和q(保密);/(2)计算 n=p*q(公开),r=(p-1(q-1)(保密);随机选取整数e(公开,加密密钥工使得gcd(e,r)=1;(4)计算d(保密,私人密钥,使得ed=1(mod r),即d=eA-1(mod r);/(5)力口密:c=mAe mod n;(6)解密:m=cAd mod n.用RSA因为要用到大数的计算,所以它必须要引用miracl库的函数。而针对RSA需要用到这几个函数mirvar(iv) , cinstr(x,s) , po

28、wmod(x,y,z,w)、big_to_bytes(max,x,ptr,justify) , mirkill(x)mirvar(iv)的作用是初始化一个变量。它只有一个参数。例:x= mirvar(0);这样就创建了 一个变量x=0。cinstr(x,s)的作用是字符串s所对应的整数赋值给大整数x。有两个参数。powmod(x,y,z,w)作用是 w=xAy mod z 。big_to_bytes(max,x,ptr,justify)将一个大整数转 x换成一个字节串(ptr指向那个字节串)。mirkill(x)的作用是消灭一个大整数并清空内存现在这几个函数作用都已经清楚了。可是在分析反汇编的

29、代码时如何定位这些函数呢?当然ida是可以的,不过有些时候也定位不出来。有一个高人给出了手工定位的方法。我现在拿出来给大家分享。废话我不多说了,只讲主要的:/“无论你用何种选项编译、MIRACL , mov dword ptresi+eax*4+20h,xxh ,这句代码都会出现在反编译的程序里。而我们就可以根据xxh ,再来查表来定位 MIRACL函数了。“现在我给出上面这 4个函数的xxh: mirvar equ 17h, / cinstr equ 4Eh , powmod equ 12h , big_to_bytes equ 8Dh。现在准备工作做完了,继续分析代码吧。往下看发现,cal

30、l 00401890连续用了 4次,并且只有一个参数,参数值每次也都是0,这样我们就不得不怀疑是mirvar(iv)函数,不过还是跟随进去看看。ULl4LlcJU UJ4O1B95 0Q4C189& Q4C189C040189E$ Al DCCE4iaa MOV EM, mom PTR ES: 410EDC.5&PU5M ESI.8B88 2C02000( MOVPTR 加:EAX+电匚.05CgTEST ECI,ECKv74 04JE SKIRT,0D4Q18A40U4O13AD nf)4013A2 ng引13 OCi4C 13A.4 4O1EA.7 004018A5 114

31、018AE QM18Z0 0CI4O18E3 004018B6 004018BS OOW13CO awiacs 00401RCB rariecDO4O10D4 moi an 9 0CI4O1SDF UJ4C18E1.3JC0XQKE闻部.5EPOPESIC3BEUSB70ICMOVESI.ITOKDPTR DS: EAI4K45INCESI.S470ICMDV加加 mDS: EAI+ICJ.ESI.Al DCO54inO MOVEAX,DWORDFTE EE:410EDC.喇8ICMOVECXfJttOM)PTR DS:EkX+lC.S3F918CMPECX,18.V 7D £1.T

32、证 5H0KT,以/一 一.CT448S 20 删删加 UTT位HimC+加工.ai rco54ioo VMl B!: L41KMJBBSS 1OO2aaO( MOV ECX,BWaKD FIR 口S:出旦+240.B5C9TEST ECI, ECKV 74 0AJE SHORT CccMh .004口18加. 即 ACFDFFFF CALL CrtckMt , QM016的Al JCa541OO MOV EAXhEfflOKD PTR ES; 410EDC> 8B83 3caoooa( MOV EDI, DVT口KD FTR ES : EmSC.弱gTEST ECI, EClt75 1

33、nJH7 SHORT CraczkMe,.004019TD.6K 12PUSH L2004C18E5.ES 2SFBFFFFCAI1 3正回在.00401410004013£A0ri4C18EF O4O13F2 03401375n。4n用咫LbLta d Gdl LhlFI FF 1.Al BC054100.83C4 04.6E48 IC.5E.43 r-bri-ta d aFh LMOV EAXfBffQIU) fTE DS: 4105DCADD ESP,4MOY ECX.IfflOKD FTB ES : EmiCPOP ESIDEC ECX IWTtal r TbHUr-b Th

34、Tb TtaflHTb Ttafl Fn 1 IT 1 . r , TTimr果然,代码中有一句,mov dword ptr ds:eax+ecx*4+20,17h 。这样就可以对上号了,也可以确定是mirvar函数了。那么下面几句代码作用就是初始化四个变量,并都赋值为0。四个变量分别是esi,ebp,edi,ebx.然后看下面00401352总IB4M tEOOOtLEt EAJI DvrlD F7H ££打00401359L 50?USH EAX0C4C135A5T皿OC40135B,E8 5鸵叩000CALL CricHe . Q04®AIOcin.'

35、;str 5)UU4U1J6U.DCUU4UUUyttn CrAtjjfle . UU4UU01CASCII先bE七型匚肥00401305一 so-E5i004013BS, E8 4527OCOOCALL CracJrfle-. 00403AI0cinstr Ijtj 3)004013BBGS DW04COO?UEH CrarTUfi_ 0nnn:0T4fcsni "icorn00401370.S5PUSH EBf00401371.E8 3X270000CALL CriciMi .00403X10ciMtr be., s)0Q401376.56HEH ESI0040137?.ST?间

36、 EDI00401373E8 ISllOOOCCALL CracHle . 004027t0OQ40137D.03.:4 30WB ESP. gOQ4013BO. 83?e FPCMI EO -L0Q4013B3“ 75 6tTN7 SHTBT CrarkM 0r4C13Sfi004013BS,S3FU5H EBI0Q401366.56?U£H ESIU0101387.55riEH EB?00401303.5TrUEH EDI00401309EQ F220OCOOCALL CrackHe . 004(J34CO口d. iR y, Zj, v)OQ40138E,8DSC24 4g3mL

37、EA BCK 口归ED FTR ES00401395Ek 00push n0Q4D139T.51强H BCI0040139353PUSH EBI00401399.6k 00?USH 0004039Ba Ed 991EOCOOCALL CricjsHeOOWSZjU5酩Kf ptr, justify)004013AO50-TUUH ESIOC4013MES BhJDEOCOOCALL. 004022EDmirkill 0)004013?U*H IB?004013WE9 刖snoociCALL0M02250mirkill G)0Q4013M;5T皿004013M).E8 AEOEOCOOCALL

38、CracH1« . QO4(J22EOmirkill 6r)004013B2.53FltH EBI004013B3一 E6 AjaozorooCALL Cr 助欧旭_.口。«12既。mirkill U)00*01300. 83C4 30KD1 ESP, 30004013BBE8 COOEOCOOCAIL 匚¥。利中.004022EDO04D12Cnlan 1424 3msAEEl EDU DVOBD PTR 旧-1区P+的01通过上面的方法,可以依次定位出,call 00403ab0为cinstr函数,call 00403480为powmod 函数,call 00

39、403230 为 big_to_bytes 函数,call 00402260 为 mirkill 函数。首先第一个0040135b处的cinstr函数把输入的密码 1234567 (字符串)转化为一个大整 数送到edi里面。注意这里查看返回结果应该是dd edi+c。因为这是存放了一个大数的原因,其中edi,edi+4,edi+8可能是三个参数。我猜测字符串有 8位则edi=1,符串有16位则 edi=2依次类推,而edi+4代表指向指针。Edi+8可能是保留参数。接下来把字符串 58D504EBC98DF20A2F170CD1=n 和10001=e转化为大整数。下面 call 00402790,这个 call的作用是必须使我输入的密码 1234567 小于 58D504EBC98D

温馨提示

  • 1. 本站所有资源如无特殊说明,都需要本地电脑安装OFFICE2007和PDF阅读器。图纸软件为CAD,CAXA,PROE,UG,SolidWorks等.压缩文件请下载最新的WinRAR软件解压。
  • 2. 本站的文档不包含任何第三方提供的附件图纸等,如果需要附件,请联系上传者。文件的所有权益归上传用户所有。
  • 3. 本站RAR压缩包中若带图纸,网页内容里面会有图纸预览,若没有图纸预览就没有图纸。
  • 4. 未经权益所有人同意不得将文件中的内容挪作商业或盈利用途。
  • 5. 人人文库网仅提供信息存储空间,仅对用户上传内容的表现方式做保护处理,对用户上传分享的文档内容本身不做任何修改或编辑,并不能对任何下载内容负责。
  • 6. 下载文件中如有侵权或不适当内容,请与我们联系,我们立即纠正。
  • 7. 本站不保证下载资源的准确性、安全性和完整性, 同时也不承担用户因使用这些下载资源对自己和他人造成任何形式的伤害或损失。

评论

0/150

提交评论