捷徑點點通 2.00註冊演算法分析!
[作 者]:LILITH[CNCG]
[時 間]:2001-12-15
[軟 件]:捷徑點點通2.00
[軟體簡介]:大多數人都喜歡走“捷徑”,本軟體就是為此目的而設計的。當您在地圖上選擇了“出發地”(起始座標點)和“目的地”(終止座標點),然後再點選一下“開始計算最短路徑”,接著等待幾秒鐘,本軟體就會自動為您指出“出發地”和“目的地”之間的最短路徑,讓您輕鬆找到“捷徑”。
[下 載]:http://www.csdn.net/soft/openfile.asp?kind=1&id=13091
[保護方式]:註冊碼
[破解工具]:trw2000
這是我的第一個演算法分析,首先感謝PaulYoung大俠的指點,令我這等菜鳥嚐到了註冊演算法的甜頭,如有不對的地方還請各路英雄指正,呵呵……GO!
還是老辦法,用TRW2000下斷點bpx hmemcpy,中斷後7下F12,來到……
0177:004736BA LEA EDX,[EBP-10] \\游標停在這裡……
0177:004736BD MOV EAX,[EBP-04]
0177:004736C0 MOV EAX,[EAX+03A0]
0177:004736C6 CALL 004379CC
0177:004736CB MOV EAX,[EBP-0C]
0177:004736CE CALL 00404C1C
0177:004736D3 MOV [EBP-20],EAX
0177:004736D6 LEA EAX,[EBP-08]
0177:004736D9 CALL 00404964
0177:004736DE MOV EDI,[EBP-20]
0177:004736E1 TEST EDI,EDI \\驗證輸入註冊名的位數
0177:004736E3 JNG 0047371D \\為零則跳
0177:004736E5 MOV ESI,01
\\ESI初始值為1
0177:004736EA MOV EAX,[EBP-0C]
0177:004736ED XOR EBX,EBX
\\EBX始值為零
0177:004736EF MOV BL,[EAX+ESI-01]
\\取註冊名第一位字母的十六進位制值
0177:004736F3 IMUL EAX,[EBP-20],BYTE +6B \\用註冊名位數與6B相乘,結果儲存入EAX
0177:004736F7 ADD EAX,EBX
\\將得出的數與字母的十六進位制數相加
0177:004736F9 CDQ
0177:004736FA IDIV ESI \\將計算結果除以ESI的值,即除1,結果仍儲存到EAX
0177:004736FC MOV EBX,EAX \\將結果存入EBX
0177:004736FE LEA EDX,[EBP+FFFFFE10]
0177:00473704 MOV EAX,EBX
0177:00473706 CALL 00408C2C
0177:0047370B MOV EDX,[EBP+FFFFFE10]
0177:00473711 LEA EAX,[EBP-08]
0177:00473714 CALL 00404C24
0177:00473719 INC ESI \\ESI遞增
0177:0047371A DEC EDI \\EDI遞減
0177:0047371B JNZ 004736EA \\繼續往上跳,迴圈取註冊名的第二,三位,直至取完
0177:0047371D CMP DWORD [EBP-08],BYTE +00
0177:00473721 JZ NEAR 004738A1
0177:00473727 MOV EAX,[EBP-08]
0177:0047372A MOV EDX,[EBP-10]
0177:0047372D CALL 00404D60 \\取完後到這裡形成註冊碼,下D
EDX可看到真的註冊碼。
0177:00473732 JNZ NEAR 004738A1 \\完成驗證,跳轉。
總結:此程式透過註冊名的長度來計註冊碼,就是說,註冊名越長,註冊碼也就越長。輸入註冊名後,程式按位取註冊名的字母來計算註冊碼。先用6B(DEC=107)乘上註冊名的位數,如我用CNCG,所以為4,得出的數加上依次取得的每位字元的十六進位制值,再除以ESI的值(ESI初始值為1),就得出註冊碼,例如我的註冊名為CNCG,則計算方法是:
C=6b(107)*4+67/1=495 (4為註冊名長度;67是C的十六進位制值,1是ESI的值,ESI遞增1)
N=6b(107)*4+78/2=253
C=6b(107)*4+67/3=165
G=6b(107)*4+71/4=124
將4個數串依次起來就是495253165124,這就是註冊碼了,呵呵……
至此,軟體已經成功註冊,我的廢話也到此結束了,最後,再次感謝PaulYoung大俠的教導!BYE……