非明碼軟體的入門教學--現給演算法的入門者(高手末入) (6千字)
非明碼軟體的入門教學
破解軟體:CalcVoice計算器
破解人:PowerBoy
下載地址:電力系統網,“軟體下載樂園”
軟體介紹:該軟體是一個語音計算器,可以進行二進位制、十進位制、八進位制、十六進位制的轉換和三角函式的
計算,註冊保護為軟體自生成一個序列號,然後根據序列號算出註冊碼。(每臺機器序列號都不相同)
並且有30次限制所以有2種選擇:一種是暴力破解,另外一種是分析出演算法寫成序號產生器。
*************************************************************************************************************************
1.爆破
首先用language偵測發現是用aspack加的殼。選擇用CASPR脫殼(效果好)。
執行軟體彈出要求註冊的對話方塊隨便輸入註冊碼彈出:
"對不起!您的註冊碼不正確,請與作者聯絡! "
接下來用w32dsam反彙編查詢“串式參考”
發現此句,用左鍵雙擊來到程式中。
向上查詢發現是由00476AE0(C)跳轉來得(用右鍵雙擊)
檢視程式發現如果00476AE0不跳轉就可以來到:
"恭喜您,註冊成功!謝謝您支援本軟體,請儲存好序列?
因此將3BC2757OB201改為
××7470×× je或
××9090×× nop 成功!!!!!!!!!!!!!!!
*************************************************************************************************************************
2.演算法分析
因為該軟體是非明碼比較,這就要求破解者要有一定的演算法破解基礎了。廢話不說了開始!
下斷點:BPX HMEMCPY
按F12共N次來到下面...........
這時就要用F10了,並且要求要成用D和?命令檢視個暫存器的數值,(要有寧可錯殺一千不放過一個的態度才行啊!)
:00476AA3 55
push ebp
:00476AA4 687D6B4700
push 00476B7D
:00476AA9 64FF30
push dword ptr fs:[eax]
:00476AAC 648920
mov dword ptr fs:[eax],
esp
:00476AAF 8D55FC
lea edx, dword ptr [ebp-04]
:00476AB2 8B8634040000
mov eax, dword ptr [esi+00000434]
:00476AB8 E87FFFFBFF
call 00436A3C
:00476ABD 8B45FC
mov eax, dword ptr [ebp-04]
:00476AC0 83CAFF
or edx, FFFFFFFF
:00476AC3 E8C41CF9FF
call 0040878C-------------------->經過此CALL後,我們輸入的SN變成十六進位制,並儲存倒EAX中;
:00476AC8 35630AB302 xor eax,
02B30A63---------------->EAX=EAX XOR 0x2B30A63
:00476ACD 35C5AC3703
xor eax, 0337ACC5---------------->EAX=EAX
XOR 0x337ACC5
:00476AD2 8B15489D4700
mov edx, dword ptr [00479D48]---->EDX=0x13215B=1253723
:00476AD8 81F2630AB302
xor edx, 02B30A63---------------->EDX=EDX XOR
0x2B30A63//這時EDX的值就是機器碼MN;
:00476ADE 3BC2
cmp eax, edx--------------------->比較EAX和EDX
:00476AE0 7570
jne 00476B52*********************關鍵跳轉,不相等則跳,跳則死
:00476AE2 B201
mov dl, 01
:00476AE4 A174CC4600 mov eax,
dword ptr [0046CC74]
:00476AE9 E88662FFFF
call 0046CD74
:00476AEE 8BD8
mov ebx, eax
:00476AF0 BA02000080
mov edx, 80000002
:00476AF5 8BC3
mov eax, ebx
:00476AF7 E81863FFFF call 0046CE14
:00476AFC 33C9
xor ecx, ecx
* Possible StringData Ref from Code Obj ->"\Software\Microsoft\Active
Setup\Installed "
->"Components"
|
:00476AFE BA946B4700
mov edx, 00476B94
:00476B03 8BC3
mov eax, ebx
:00476B05 E86E63FFFF call 0046CE78
* Possible StringData Ref from Code Obj ->"1.0"
|
:00476B0A B9D46B4700
mov ecx, 00476BD4
* Possible StringData Ref from Code Obj ->"Version"
|
:00476B0F BAE06B4700
mov edx, 00476BE0
:00476B14 8BC3
mov eax, ebx
:00476B16 E8F964FFFF call 0046D014
:00476B1B 8BC3
mov eax, ebx
:00476B1D E836CAF8FF
call 00403558
:00476B22 6A00
push 00000000
:00476B24 668B0DE86B4700
mov cx, word ptr [00476BE8]
:00476B2B B202
mov dl, 02
* Possible StringData Ref from Code Obj ->"恭喜您,註冊成功!謝謝您支援本軟體,請儲存好序列?
->"龐胱⒉崧?便於作者為您提供服務! "
->" 聯絡郵箱:JRYCL@163.COM"
|
:00476B2D B8F46B4700
mov eax, 00476BF4
:00476B32 E85999FBFF
call 00430490
:00476B37 33D2
xor edx, edx
:00476B39 8B8618040000 mov eax, dword
ptr [esi+00000418]
:00476B3F E818FEFBFF
call 0043695C
:00476B44 A18C9C4700
mov eax, dword ptr [00479C8C]
:00476B49 C6802D02000001
mov byte ptr [eax+0000022D], 01
:00476B50 EB15
jmp 00476B67
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00476AE0(C)
|
:00476B52 6A00
push 00000000
:00476B54 668B0DE86B4700
mov cx, word ptr [00476BE8]
:00476B5B B201
mov dl, 01
* Possible StringData Ref from Code Obj ->"對不起!您的註冊碼不正確,請與作者聯絡! "
->"聯絡郵箱:JRYCL@163.COM"
|
:00476B5D B8646C4700
mov eax, 00476C64
:00476B62 E82999FBFF
call 00430490
*******************************************************************************************************************
演算法整理:
這是典型的非明碼比較的註冊碼形式;
1.:00476ADE處比較EAX和EDX.如果相等就註冊成功,不相等則註冊失敗;
我們來看:EAX中儲存著我們輸入的假SN變成十六進位制形式在經過與常數XOR計算所得的數值,而EDX中儲存著MN的十六進位制形式;
如果想註冊成功就要使EAX等於EDX;
2.好既然這樣我們就令:EAX=EDX;然後,逆推;
(這裡我們要知道一些必要的知識即:A
XOR B = C 等價於 A XOR C = B 或 B XOR C = A);
如果知道這些就簡單了啊!
用MN先與常數0x2B30A63異或,在與常數0x337ACC5異或;
最後,將所得的數變成十進位制就是正確的註冊碼了啊!
例如:
MN=44051256
44051256=0x2A02B38
0x2A02B38 XOR 0x2B30A63 = 0x13215B
0x13215B XOR 0x337ACC5 = 0x3248D9E
0x3248D9E=52727198
SN=52727198
輸入52727198顯示成功!!!!!!!!
*********************************************************************************************************************
另外這個軟體有個缺陷
如果在[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Active Setup\Installed
Components]
建立主鍵"Version"="1.0"
那麼就不用註冊就可以成功了啊!
*********************************************************************************************************************
相關文章
- 中介軟體、MetaQ入門學習2014-09-14
- Hacktoberfest 之入門教學2017-10-19
- 杜教篩入門2024-07-18
- redux 中介軟體入門2018-02-01Redux
- 軟體架構入門2016-09-03架構
- 密碼學入門2022-04-28密碼學
- 第1章 1.1Deluxe APP快速入門——剪輯入門教學2022-09-19UXAPP
- Python入門_給小白的學習指南2020-02-06Python
- 元、明、清--中國史學入門2006-06-30
- 寫給小白的pySpark入門2021-09-09Spark
- 如何入CTF的“門”?——所謂入門就是入門2020-12-21
- 何入CTF的“門”?——所謂入門就是入門2020-11-04
- Node.js入門教學之一2018-06-15Node.js
- Pymongo Tutorial & Pymongo入門教2015-05-24Go
- 轉:軟體架構入門2017-01-03架構
- 軟體測試入門---(二)2024-07-04
- 給深度學習入門者的Python快速教程 - 基礎篇2017-03-13深度學習Python
- 給學習 OpenStack 架構的新手入門指南2016-08-25架構
- 入門入門入門 MySQL命名行2020-12-15MySql
- 寫給新手的MySQL入門指南2018-11-12MySql
- 寫給mybatis小白的入門指南2018-02-27MyBatis
- 寫給自學者的入門指南2017-08-14
- 簡明 MongoDB 入門教程2017-08-08MongoDB
- 五個給機器學習和資料科學入門者的學習建議2019-09-17機器學習資料科學
- Angular6入門2019-03-22Angular
- ES6入門2017-05-12
- AngularJS 入門教學視訊【完結】2016-06-21AngularJS
- Windows Azure入門教學系列 全面更新啦!2011-01-19Windows
- 新人如何入門和學習軟體測試?2018-11-15
- 有趣的機器學習:最簡明入門指南2014-08-16機器學習
- LINGO軟體入門2017-07-21Go
- 密碼學入門知識2013-04-22密碼學
- TNN iOS非影像模型入門2021-08-28iOS模型
- 入門指南 | 寫給打算進入IT行業的新人們!2018-12-06行業
- 給 DevOps 初學者的入門指南2016-09-27dev
- Linux軟體包管理的基本操作入門2016-03-25Linux
- ES6-Proxy Reflect 入門學習2019-08-02
- PHP 並非好的入門程式語言2019-08-16PHP