Nok2phone的註冊演算法與網路校驗解除---VB程式關鍵處的快速定位
這個軟體是一個網友在DFCG論壇要求破解的,他的原貼如:這是一款可以把MID轉換為手機編輯
鍵譜的工具,我自己試著破解過但終不得法,所以還沒能這個能力破解,希望有哪位好人幫我得到註冊碼,並教我如何破解,小弟在這裡先謝過了!
下載地址是:
http://www.hkpcug.org/personal/leoto/n2p_setup/Setup.EXE
破解作者: yzez[DFCG]
破解工具: peid0.8漢化版、UPXUnpack、OLLYDBG1.09B
破解目的: 本不為破解而破解,只因為技術而破解!
破解過程:
1、用peid0.8檢查是UPX的殼,用UPXUnpack輕鬆脫殼,脫殼後的程式可以正常執行,不需要修復輸入表,是VB
程式,用OLLYDBG1.09B載入程式,用:vbastrcomp設定斷點,按F9讓程式執行,這個過程中要按幾次F9,才會出
現註冊視窗,出現註冊視窗後輸入註冊資訊,使用者名稱:yzez[DFCG],註冊碼:12345678,下面的重點是VB程式的關
鍵處的快速定位,這不是一個萬能方法,破無常法,這裡僅供參考,具體過程往下看:
66024722 > CMP DWORD PTR SS:[ESP+4], 2****用vbastrcomp設定斷點,中斷與此,按F9執行!
66024727 JE MSVBVM60.660470E0
6602472D PUSH 30001
66024732 PUSH DWORD PTR SS:[ESP+8]
66024736 PUSH DWORD PTR SS:[ESP+10]
6602473A PUSH DWORD PTR SS:[ESP+18]
6602473E CALL DWORD PTR DS:[6610FE74]****追進此CALL,可以快速到達註冊演算法的核心處,按F7跟進!
66024744 TEST EAX, EAX
66024746 JL MSVBVM60.660470E7
6602474C DEC EAX
6602474D RETN 0C
===================================================================================================
6602473E CALL DWORD PTR DS:[6610FE74]此CALL追進後來到這裡,這是一個過渡,不是重點,直接按F8
快速透過:
7716C0CF > PUSH EBP
7716C0D0 MOV EBP, ESP
7716C0D2 SUB ESP, 18
7716C0D5 MOV EAX, DWORD PTR SS:[EBP+8]
7716C0D8 PUSH EAX
7716C0D9 CALL OLEAUT32.77168DE7
7716C0DE ADD ESP, 4
7716C0E1 MOV DWORD PTR SS:[EBP-8], EAX
7716C0E4 MOV ECX, DWORD PTR SS:[EBP+C]
7716C0E7 PUSH ECX
7716C0E8 CALL OLEAUT32.77168DE7
7716C0ED ADD ESP, 4
這個CALL結束後會跳回到:66024722 > CMP DWORD PTR SS:[ESP+4]這個比較的上面一行,按一次F8就可以
直接來到關鍵處。
************************以下是關鍵程式碼!*****************************************************************
004B82AD . TEST EAX, EAX*********************進入關鍵處後停在這裡!
004B82AF . JE yzez.004B87D3****************下面有很長一段,搞什麼飛機?網路校驗你懂不懂?
004B82B5 . MOV EAX, DWORD PTR SS:[EBP-28]
004B82B8 . TEST EAX, EAX
004B82BA . JE yzez.004B87D3
004B82C0 . PUSH yzez.004124D8**** "http://members.hknet.com/~leoto/nok2phone/n2p_reg/"(這是註冊的主頁)
004B82C5 . MOV ECX, DWORD PTR SS:[EBP-24]
004B82C8 . PUSH ECX
004B82C9 . CALL EBX
004B82CB . MOV EDX, EAX*******把“http://members.hknet.com/~leoto/nok2phone/n2p_reg/yzez[DFCG]"你的注
*****************冊使用者名稱移入EDX,準備網路校驗!
004B82CD . LEA ECX, DWORD PTR SS:[EBP-2C]
004B82D0 . CALL EDI
004B82D2 . PUSH EAX
004B82D3 . PUSH yzez.00412544 ; UNICODE ".txt"
004B82D8 . CALL EBX ; MSVBVM60.__vbaStrCat
004B82DA . MOV DWORD PTR SS:[EBP-78], EAX** "http://members.hknet.com/~leoto/nok2phone/n2p_reg/yzez[DFCG].txt"
*************這是你在對方主機上的註冊資訊的存放處,你有交註冊費嗎?
004B82DD . MOV ECX, 8
004B82E2 . MOV DWORD PTR SS:[EBP-80], ECX
004B82E5 . MOV DWORD PTR SS:[EBP-108], 0
004B82EF . MOV DWORD PTR SS:[EBP-110], 3
004B82F9 . SUB ESP, 10
004B82FC . MOV EDX, ESP
*************省略若干程式碼!********************************************************************************************
004B8347 . PUSH EAX
004B8348 . LEA EDX, DWORD PTR SS:[EBP-68]
004B834B . PUSH EDX
004B834C . CALL DWORD PTR DS:[<&MSVBVM60.__vbaOb>; MSVBVM60.__vbaObjSet
004B8352 . PUSH EAX
004B8353 . LEA EAX, DWORD PTR SS:[EBP-90]
004B8359 . PUSH EAX
004B835A . CALL DWORD PTR DS:[<&MSVBVM60.__vbaLa>******此CALL進行一次網路校驗,如果你交了註冊費用,對方主機上
*************就會有你的資訊,有你的資訊,這裡返回EAX的值為0,否則EAX的值為1
004B8360 . ADD ESP, 30
004B8363 . PUSH EAX
004B8364 . CALL DWORD PTR DS:[<&MSVBVM60.__vbaSt>; MSVBVM60.__vbaStrVarMove
004B836A . MOV EDX, EAX
004B836C . LEA ECX, DWORD PTR SS:[EBP-20]
004B836F . CALL EDI ; MSVBVM60.__vbaStrMove
004B8371 . LEA ECX, DWORD PTR SS:[EBP-2C]
*************再次省略若干程式碼!VB的程式真是又長又臭呀!**********************************************************
004B83C1 . CALL DWORD PTR DS:[<&MSVBVM60.__vbaFr>
004B83C7 . MOV EAX, DWORD PTR SS:[EBP+8]
004B83CA . MOV EDX, DWORD PTR DS:[EAX]
004B83CC . LEA ECX, DWORD PTR SS:[EBP-144]
004B83D2 . PUSH ECX
004B83D3 . MOV ECX, DWORD PTR SS:[EBP-24]
004B83D6 . PUSH ECX
004B83D7 . PUSH EAX
004B83D8 . CALL DWORD PTR DS:[EDX+73C]****你一定會來到這裡,到這裡停!演算法CALL,一定要按F7追進!
004B83DE . MOV EDX, DWORD PTR SS:[EBP-20]
004B83E1 . PUSH EDX
004B83E2 . PUSH yzez.00411B8C ; UNICODE "Nok2Phone"
004B83E7 . CALL DWORD PTR DS:[<&MSVBVM60.__vbaSt>; MSVBVM60.__vbaStrCmp*****再一次比較校驗!
004B83ED . NEG EAX
004B83EF . SBB EAX, EAX
004B83F1 . NEG EAX
004B83F3 . XOR ECX, ECX
004B83F5 . MOV EDX, DWORD PTR SS:[EBP-28]********輸入的試驗碼的十六進值入EDX,這裡是:BC614E(12345678)
004B83F8 . CMP EDX, DWORD PTR SS:[EBP-144]*******比較兩者是否相等或者是否為0,SS:[EBP-144]存放的數值是:
******************2ACEED6B,就是上述對使用者名稱計算後的值。
004B83FE . SETNE CL********************************不相等置CL的值為1,相等置CL的值為0
004B8401 . OR EAX, ECX**************************EAX與ECX相或,EAX的值是多少,就是網路校驗返回的值,
**************************如果透過網路校驗返回值是0,否則EAX的值是1,這裡當然是1,因為你沒有交錢!
004B8403 . JNZ yzez.004B8921********************不相等就跳,這裡一定不能跳,要解除它的網路驗證,就在
*****************這裡動手吧!把JNZ改成JE!把”0F85“改成”0F84“。修改後即使有網路驗證,你也會註冊成功!
004B8409 . MOV EAX, DWORD PTR DS:[4CD91C]********不跳就往下。
004B840E . TEST EAX, EAX
004B8410 . JNZ SHORT yzez.004B8422
004B8412 . PUSH yzez.004CD91C
****************省略一部分無關程式碼!************************************************************************
004B86C4 . PUSH EAX
004B86C5 . LEA EAX, DWORD PTR SS:[EBP-110]
004B86CB . PUSH EAX
004B86CC . LEA ECX, DWORD PTR SS:[EBP-A0]
004B86D2 . PUSH ECX
004B86D3 . CALL ESI
004B86D5 . PUSH EAX
004B86D6 . LEA EDX, DWORD PTR SS:[EBP-B0]
004B86DC . PUSH EDX
004B86DD . LEA EAX, DWORD PTR SS:[EBP-C0]
004B86E3 . PUSH EAX
004B86E4 . CALL ESI
004B86E6 . PUSH EAX
004B86E7 . CALL DWORD PTR DS:[<&MSVBVM60.#595>]***********你能來到這裡你就可以大笑了!因為你的錢不用往外拿
****************************************************************了!註冊成功!
*****************省略若干程式碼!******************************************************************************
004B891A . CALL EDI ; MSVBVM60.__vbaStrMove
004B891C . JMP yzez.004B8A54
004B8921 > MOV EAX, DWORD PTR DS:[4CD91C]********上面如果不相等就跳到這裡!往下走!
004B8926 . TEST EAX, EAX
********************再次省略一大段程式碼!**********************************************************************
004B8AC4 . PUSH ECX
004B8AC5 . PUSH 10
004B8AC7 . LEA EDX, DWORD PTR SS:[EBP-80]
004B8ACA . PUSH EDX
004B8ACB . CALL DWORD PTR DS:[<&MSVBVM60.#595>]*******到了這裡兄弟留下買路錢吧!註冊失敗!
004B8AD1 . LEA EAX, DWORD PTR SS:[EBP-50]
******************又是省略!*********************************************************************************
004B8BDF . C3 RETN
=============================================================================================================
演算法CALL:004B83D8 CALL DWORD PTR DS:[EDX+73C],追進後我們來到這裡:
00444DC0 PUSH EBP
00444DC1 MOV EBP, ESP
00444DC3 SUB ESP, 14
00444DC6 PUSH <JMP.&MSVBVM60.__vbaExceptHandle>
00444DCB MOV EAX, DWORD PTR FS:[0]
00444DD1 PUSH EAX
00444DD2 MOV DWORD PTR FS:[0], ESP
00444DD9 SUB ESP, 44
00444DDC PUSH EBX
00444DDD PUSH ESI
00444DDE PUSH EDI
00444DDF MOV DWORD PTR SS:[EBP-14], ESP
00444DE2 MOV DWORD PTR SS:[EBP-10], yzez.0040>
00444DE9 XOR EDI, EDI
00444DEB MOV DWORD PTR SS:[EBP-C], EDI
00444DEE MOV DWORD PTR SS:[EBP-8], EDI
00444DF1 MOV DWORD PTR SS:[EBP-28], EDI
00444DF4 MOV DWORD PTR SS:[EBP-30], EDI
00444DF7 MOV DWORD PTR SS:[EBP-40], EDI
00444DFA MOV EDX, DWORD PTR SS:[EBP+C]************使用者名稱移入EDX中
00444DFD LEA ECX, DWORD PTR SS:[EBP-28]
00444E00 CALL DWORD PTR DS:[<&MSVBVM60.__vbaSt>
00444E06 PUSH 1
00444E08 CALL DWORD PTR DS:[<&MSVBVM60.__vbaOn>
00444E0E MOV ESI, 1******************************把1移入ESI,ESI做計數器!
00444E13 MOV EAX, DWORD PTR SS:[EBP-28]**********使用者名稱移入EAX中
00444E16 PUSH EAX*********************************EAX入棧,即使用者名稱入棧!
00444E17 PUSH EDI*********************************EDI入棧,EDI的初始值是:0
00444E18 CALL DWORD PTR DS:[<&MSVBVM60.__vbaSt>***此CALL又跳回到中斷處,不管,按F8就行!又一次校驗!
00444E1E TEST EAX, EAX****************************返回EAX的值為1,因為你沒有交錢!
00444E20 JE yzez.00444EC1
00444E26 MOV EBX, DWORD PTR DS:[<&MSVBVM60.#5>
00444E2C MOV DWORD PTR SS:[EBP-38], 1
00444E33 MOV DWORD PTR SS:[EBP-40], 2
00444E3A LEA ECX, DWORD PTR SS:[EBP-40]
00444E3D PUSH ECX
00444E3E MOVSX EDX, SI
00444E41 PUSH EDX
00444E42 MOV EAX, DWORD PTR SS:[EBP-28]
00444E45 PUSH EAX
00444E46 CALL DWORD PTR DS:[<&MSVBVM60.#631>]
00444E4C MOV EDX, EAX
00444E4E LEA ECX, DWORD PTR SS:[EBP-30]
00444E51 CALL DWORD PTR DS:[<&MSVBVM60.__vbaSt>
00444E57 PUSH EAX
00444E58 CALL EBX
00444E5A MOVSX ECX, AX*****************************取使用者名稱的第一位的ASCII碼值,第一位使用者名稱是:y
****************************ASCII碼值是:79,79送入ECX中!
00444E5D ADD ECX, EDI****************************ECX=ECX+EDI=79+0=79
00444E5F JO yzez.00444F0F***********************溢位轉移!
00444E65 MOV EDI, ECX****************************ECX的值:79移入EDI中
00444E67 LEA ECX, DWORD PTR SS:[EBP-30]
00444E6A CALL DWORD PTR DS:[<&MSVBVM60.__vbaFr>
00444E70 LEA ECX, DWORD PTR SS:[EBP-40]
00444E73 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFr>
00444E79 ADD SI, 1******************************SI=SI+1=1+1=2,小學數學!
00444E7D JO yzez.00444F0F**********************溢位轉移!
00444E83 MOV EDX, DWORD PTR SS:[EBP-28]
00444E86 PUSH EDX
00444E87 CALL DWORD PTR DS:[<&MSVBVM60.__vbaLe>
00444E8D MOVSX ECX, SI
00444E90 CMP ECX, EAX***************************比較ECX與EAX的值,EAX的值是使用者名稱的位數,這裡是
*****************************10位,故EAX的值是:0A
00444E92 ^ JLE SHORT yzez.00444E2C****************小於等於就跳回,形成迴圈,迴圈次數取決於輸入的用
***************戶名的位數,這個迴圈的作用是取使用者名稱的每一位ASCII碼值,然後把它們相加,我輸入的使用者名稱
***************計算後的最終結果是:39E!,這個結果被儲存在EDI中!
00444E94 ADD EDI, 0AD****************************EDI=EDI+0AD=39E+0AD=0000044B
00444E9A JO SHORT yzez.00444F0F**********************溢位轉移!
00444E9C IMUL EDI, EDI, 7*************************EDI=EDI*7=44B*7=00001E0D
00444E9F JO SHORT yzez.00444F0F**********************溢位轉移!
00444EA1 SUB EDI, 180****************************EDI=EDI-180=1E0D-180=00001C8D
00444EA7 JO SHORT yzez.00444F0F**********************溢位轉移!
00444EA9 IMUL EDI, EDI, 17FD7*************************EDI=EDI*17FD7=1C8D*17FD7=2ACEED6B
00444EAF JO SHORT yzez.00444F0F**********************溢位轉移!
00444EB1 MOV DWORD PTR SS:[EBP-24], EDI***************把上述計算的值儲存到:SS:[EBP-24]
00444EB4 CALL DWORD PTR DS:[<&MSVBVM60.__vbaEx>
00444EBA PUSH yzez.00444EF2
00444EBF JMP SHORT yzez.00444EE8
00444EC1 MOV DWORD PTR SS:[EBP-24], 3B9AC9FF
00444EC8 CALL DWORD PTR DS:[<&MSVBVM60.__vbaEx>
00444ECE PUSH yzez.00444EF2
00444ED3 JMP SHORT yzez.00444EE8
00444ED5 LEA ECX, DWORD PTR SS:[EBP-30]
00444ED8 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFr>
00444EDE LEA ECX, DWORD PTR SS:[EBP-40]
00444EE1 CALL DWORD PTR DS:[<&MSVBVM60.__vbaFr>
00444EE7 RETN******************************************返回!這個子程式結束!
2、演算法小結:
設使用者名稱的每一位的ASCII碼相加的值是X,則註冊碼SN是:
SN=[(x+0AD)*7-180]*17FD7的結果的十進位制值。
3、驗證演算法:使用者名稱:yzez[DFCG]
X=79+7A+65+7A+5B+44+46+43+47+5D=39E
SN=[(39E+0AD)*7-180]*17FD7=2ACEED6B,十進位制值為:718204267,這就是我們要的註冊碼。
一個可用的註冊碼:使用者名稱:yzez[DFCG],註冊碼:718204267
4、解除網路驗證,因為這個程式有幾處涉及到網路驗證,所以直接修改跳過驗證,並不太現實,所以我們可以在:
004B8403 . JNZ yzez.004B8921處直接修改,改後即使有網路驗證,也會註冊成功!
相關文章
- SpeedFlash註冊演算法分析(VB)2015-11-15演算法
- 用ollyDbg尋找VB程式的註冊核心的一點思路2003-06-20
- 網路校驗――王牌超級工具組合箱 V3.4 (VB)2015-11-15
- 迷你網路電視5.1註冊演算法2003-07-04演算法
- 用mvp模式實現登入註冊的統一校驗2016-11-21MVP模式
- 關於網路傳輸MD5 校驗實驗2010-04-01
- 原始碼分析 — Activity的清單註冊校驗及動態注入2018-03-20原始碼
- SIFT定位演算法關鍵步驟的說明2014-10-20演算法
- 關於鎖的快速定位2008-05-23
- 網路故障排除工具 | 快速定位網路故障2020-10-27
- VB控制元件21Hex DockIt註冊演算法分析2015-11-15控制元件演算法
- 高德網路定位演算法的演進2019-12-25演算法
- 網路精確時鐘 2.25註冊演算法分析2003-07-30演算法
- Henry的VB.NET之旅(十四)—動態關聯事件與處理程式2004-02-05事件
- 5G核心網之UE初始註冊關鍵流程分析2024-11-02
- js登入與註冊驗證2020-04-05JS
- 中文內碼轉換巨匠1.2【VB簡單】註冊演算法2004-09-22演算法
- win10如何解除dll註冊_win10取消註冊dll的方法2020-02-06Win10
- 東晨庫管網路版 6.5註冊演算法分析2003-08-14演算法
- 解決網路協議伺服器問題的關鍵:定位能力與抓包技術2023-12-25協議伺服器
- 關於UltraEdit32 v8.1的註冊校驗(PJ手記).高手免看! (14千字)2002-02-01
- banq,關於你那註冊程式的問題2002-11-02
- 調酒師 CollegeBar V8.1 註冊演算法分析 - VB62003-07-17演算法
- 完美解除安裝6.0註冊演算法分析 (2千字)2002-02-27演算法
- 註冊和解除安裝window service2014-05-19
- 利用VB的函式快速破解VB程式! (2千字)2001-11-03函式
- 快速搭建TC、易語言、按鍵註冊碼系統2015-12-31
- “網際網路+”的五個關鍵詞2015-12-04
- 引數校驗註解2024-08-16
- listener的靜態註冊與動態註冊詳述2009-03-30
- Oracle監聽的動態註冊與靜態註冊2011-09-01Oracle
- 求助:EXCEL,VB,實現 CRC16 校驗2020-12-01Excel
- 淺談網路靶場的關鍵能力與應用方向2020-09-24
- 校園網-真實的校園網路社群2019-05-11
- 知名網際網路公司校招中常見的演算法題2018-04-12演算法
- 《奧數2000》註冊碼的計算(VB5程式)
(6千字)2015-11-15
- Windows熱鍵註冊原理2014-05-05Windows
- jQuery實現的表單註冊驗證程式碼例項2017-02-24jQuery