Lc3&Lc4 註冊演算法分析及序號產生器的製作
破解加序號產生器編寫篇
作者: KernelKiller
使用工具: W32Dasm DebuggerKiller1.1(內部測試版) vc++6.0
系統平臺: Windows 2000 Server
軟體名字: 世界著名破解WINNT密碼工具 Lc3/Lc4 (從來都是它去破解別人..而今天卻要被我給破了)
日期 : 2004-06-17
破解宣告: 作者只是教大家破解和從複雜的反彙編裡面找註冊演算法並做出自己的序號產生器。注:破別人收費軟體總是不太好(最好不要破中國人的).
個人宣告: Lc3/Lc4此軟體已經是作者N年前破好,N年前寫好的序號產生器了. 為什麼還要翻老帳重寫教程?當年是用世界著名的核心偵錯程式Softice,可現在作者用的是自己設計的核心偵錯程式DebuggerKiller1.1(內部測試版)爆破軟體。 感覺就是不一樣!!!! 爽!!
內容:
哎~!Lc3/Lc4雖然是幾年前的東西了,但現在依然是最強的破NT密碼工具(速度一流)。可惜軟體限制只能用15次,好東西只能用15次太少了,就讓這個限制見鬼去吧!!! 作者我將帶領你們一步一步從反彙編程式碼裡找到爆破地方,和註冊演算法。 現在Lc5已經出來了,大家看了這篇文章就自己做個Lc5序號產生器吧。作者祝福你們!!
破解動態分析:Lc3
他的註冊方法是,程式給出序列號,使用者輸入開鎖碼。。現在我們輸入一串假開鎖碼"KernelKiller",選擇OK, 程式彈出錯誤對話方塊"You have entered an invalid code,Please try again " 註冊失敗。 好。大概註冊過程分析就這樣
載入核心除錯DebuggerKiller1.1(Ctrl + Y)
用命令 addr 程式名 載入到程式空間 ,為了讓大家習慣採用和Softice一樣命令。
設定斷點 bpx GetWindowTextA
輸入一串假開鎖碼"KernelKiller",選擇OK
好我的核心偵錯程式截獲斷點。現在我們來到GetWindowTextA 首地址,因為現在是在系統的GetWindowTextA函式里,所以我們要跳出這個函式進入Lc3程式碼,可惜我沒有設計像Softice那樣的F11跳出CALL
只好找到RET 在這裡設定斷,按F5跳來到這個斷點RET,單步跟蹤,來到Lc3程式碼,併到了下面類似程式碼,我們就退出偵錯程式,X 進行靜態分析
破解靜態分析:Lc3
現在進行靜態分析,開啟W32Dasm載入Lc3進行反彙編分析來到
:004201E7 8D8D00FFFFFF LEA ECX, DWORD PTR [EBP+FFFFFF00] ~~~~~~~~~~~~~~~~~~~~~~~~~~
:004201ED 53 PUSH EBX |
:004201EE E853E90300 CALL 0045EB46 |
:004201F3 8D8DA4FEFFFF LEA ECX, DWORD PTR [EBP+FFFFFEA4] |
:004201F9 8B85A4FEFFFF MOV EAX, DWORD PTR [EBP+FFFFFEA4] |
:004201FF 8B80B8000000 MOV EAX, DWORD PTR [EAX+000000B8] |
:00420205 FFD0 CALL EAX | 不需要關心
:00420207 83F801 CMP EAX, 00000001 |
:0042020A 0F859E000000 JNE 004202AE |
:00420210 8D8504FFFFFF LEA EAX, DWORD PTR [EBP+FFFFFF04] |
:00420216 50 PUSH EAX |
:00420217 8B4DE0 MOV ECX, DWORD PTR [EBP-20] |
:0042021A E827E90300 CALL 0045EB46 |
:0042021F 8B45E4 MOV EAX, DWORD PTR [EBP-1C] ~~~~~~~~~~~~~~~~~~~~~~~~~
:00420222 8B880C010000 MOV ECX, DWORD PTR [EAX+0000010C];獲得程式的序列號
:00420228 8D55C8 LEA EDX, DWORD PTR [EBP-38] ;一個緩衝區 相當於 char cpBuf[BUF_MAX];用來儲存真實的開鎖碼
:0042022B 52 PUSH EDX ;作為引數壓棧 ;緩衝區
:0042022C 51 PUSH ECX ;作為引數壓棧 ;序列號
:0042022D E8DED9FEFF CALL 0040DC10 ;呼叫這個函式功能計算真實的開鎖碼。待會我才解釋 GetUnLockCode
:00420232 83C408 ADD ESP, 00000008 ;堆疊平衡
:00420235 8B45E4 MOV EAX, DWORD PTR [EBP-1C]
:00420238 8B8810010000 MOV ECX, DWORD PTR [EAX+00000110] ;獲得我輸入的開鎖碼
:0042023E 8D55C8 LEA EDX, DWORD PTR [EBP-38] ;獲得程式真實的開鎖碼
:00420241 52 PUSH EDX ;作為引數壓棧 //我輸入的開鎖碼
:00420242 51 PUSH ECX ;作為引數壓棧 //程式真實的開鎖碼
:00420243 E884700200 CALL 004472CC ;呼叫這個函式功能比較2個引數是不是相等 相當於strcmp
:00420248 83C408 ADD ESP, 00000008 ;堆疊平衡
:0042024B 85C0 TEST EAX, EAX ;比較返回值 1失敗,0成功
:0042024D 7533 JNE 00420282 ;1失敗就跳 否則執行下面進入程式提示註冊成功
:0042024F 8B4DE4 MOV ECX, DWORD PTR [EBP-1C] ~~~~~~~~~~~~~~~~~~~~~~~~~~~
:00420252 C7811401000000000000 MOV DWORD PTR [EBX+00000114], 00000000 |
;[EBX+00000114] 地址是1代表要註冊,清0代表註冊成功
:0042025C 8B8110010000 MOV EAX, DWORD PTR [ECX+00000110] |
;[ECX+00000110] 地址是使用者輸入的開鎖碼
:00420262 50 PUSH EAX |
:00420263 6820486D00 PUSH 006D4820 |
:00420268 6800486D00 PUSH 006D4800 | 不需要關心
:0042026D E8C0D80400 CALL 0046DB32 ;寫登錄檔 |
:00420272 33C0 XOR EAX, EAX ;清0 作為對話方塊風格引數 |
:00420274 50 PUSH EAX ;對話方塊風格引數 |
:00420275 50 PUSH EAX ;對話方塊風格引數 |
:00420276 68C0496D00 PUSH 006D49C0 ;要顯示的字串 |
:0042027B E8009B0400 CALL 00469D80 ;彈出對話方塊 |
:00420280 EB0E JMP 00420290 ~~~~~~~~~~~~~~~~~~~~~~~~~~~
省略 ...............................
|:0042024D(C) ;是錯誤跳轉到這裡
|
:00420282 33C0 XOR EAX, EAX
:00420284 50 PUSH EAX ;對話方塊風格引數
:00420285 50 PUSH EAX ;對話方塊風格引數
:00420286 68004A6D00 PUSH 006D4A00 ;要顯示的字串
:0042028B E8F09A0400 CALL 00469D80 ;呼叫這個函式抬出對話方塊 提示註冊失敗。
(Ctrl + Y),設定Ring3斷點 Bpx 0042024B
來到斷點把EAX改成0註冊成功
//好。到這裡你應該知道怎麼硬破解了。我就不多說啦。 下面我來研究註冊演算法,做自己的序號產生器
註冊演算法分析:Lc3
call 0040DC10 呼叫這個函式是獲得真實的開鎖碼
GetUnlockCode(char *cpSerial,char *cpUnlockCode) 返回真實的開鎖碼到cpUnlockCode裡
:0040DC10 55 PUSH EBP
:0040DC11 8BEC MOV EBP, ESP
:0040DC13 83EC10 SUB ESP, 00000010
:0040DC16 83C4F0 ADD ESP, FFFFFFF0
:0040DC19 8D45F0 LEA EAX, DWORD PTR [EBP-10]
:0040DC1C 890424 MOV DWORD PTR [ESP], EAX
:0040DC1F 8B4508 MOV EAX, DWORD PTR [EBP+08]
:0040DC22 40 INC EAX
:0040DC23 89442404 MOV DWORD PTR [ESP+04], EAX
:0040DC27 C744240808000000 MOV [ESP+08], 00000008
:0040DC2F E8AC7F0300 CALL 00445BE0
:0040DC34 32C0 XOR AL, AL
:0040DC36 8845F8 MOV BYTE PTR [EBP-08], AL
:0040DC39 8D45F0 LEA EAX, DWORD PTR [EBP-10]
:0040DC3C 890424 MOV DWORD PTR [ESP], EAX
:0040DC3F C7442404C8FC6C00 MOV [ESP+04], 006CFCC8
:0040DC47 8D45FC LEA EAX, DWORD PTR [EBP-04]
:0040DC4A 89442408 MOV DWORD PTR [ESP+08], EAX
:0040DC4E E8D7840300 CALL 0044612A
:0040DC53 8B45FC MOV EAX, DWORD PTR [EBP-04]
:0040DC56 35C1985A71 XOR EAX, 715A98C1
:0040DC5B 8945FC MOV DWORD PTR [EBP-04], EAX
:0040DC5E 8B45FC MOV EAX, DWORD PTR [EBP-04]
:0040DC61 C1E805 SHR EAX, 05
:0040DC64 8B55FC MOV EDX, DWORD PTR [EBP-04]
:0040DC67 C1E21B SHL EDX, 1B
:0040DC6A 03C2 ADD EAX, EDX
:0040DC6C 8945FC MOV DWORD PTR [EBP-04], EAX
:0040DC6F 8B450C MOV EAX, DWORD PTR [EBP+0C]
:0040DC72 890424 MOV DWORD PTR [ESP], EAX
:0040DC75 C7442404C0FC6C00 MOV [ESP+04], 006CFCC0
:0040DC7D 8B45FC MOV EAX, DWORD PTR [EBP-04]
:0040DC80 89442408 MOV DWORD PTR [ESP+08], EAX
:0040DC84 E8D5840300 CALL 0044615E
:0040DC89 83C410 ADD ESP, 00000010
:0040DC8C 33C0 XOR EAX, EAX
:0040DC8E C9 LEAVE
:0040DC8F C3 RET
現在是用VC++6.0 寫個自己的Lc3序號產生器。哎 N年東西了,程式碼有點亂。保持原來的程式碼風格
m_Edit1 EDIT控制元件,m_Edit1代表輸入程式的序列號
m_Edit2 EDIT控制元件,m_Edit2代表輸出的開鎖碼
void CLc3_4KeyDlg::OnChangeEdit1()
{
int HighSerial;
char Serial[20];
char buf[20];
char UnlockCode[20];
DWORD dwSwitchSerial;
DWORD dwBakSwitchSerial;
UpdateData(TRUE);
memset(Serial,0,20);
memset(UnlockCode,0,20);
memset(buf,0,20);
m_Edit2="";
UpdateData(FALSE);
sprintf(buf,"%s",m_Edit1);
strncpy(Serial,buf+1,8);
sscanf(Serial,"%08x",&dwSwitchSerial);
dwSwitchSerial = dwSwitchSerial ^ 0x715A98C1;
dwBakSwitchSerial = dwSwitchSerial;
_asm{
pushad
mov eax,dwSwitchSerial
mov ecx,dwBakSwitchSerial
shl ecx,1Bh
shr eax, 5
add ecx, eax
mov dwSwitchSerial,ecx
popad
}
_snprintf(UnlockCode,4,"%04x",dwSwitchSerial);
HighSerial = dwSwitchSerial << 16;
_snprintf(UnlockCode+4,4,"%04x",HighSerial);
m_Edit2=UnlockCode;
UpdateData(FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
破解分析:Lc4
和Lc3差不多.
註冊演算法分析:Lc4
call 00403EB0 呼叫這個函式是獲得真實的開鎖碼
GetUnlockCode(char *cpSerial,char *cpUnlockCode) 返回真實的開鎖碼到cpUnlockCode裡
GetUnlockCode:
:00403EB0 83EC0C SUB ESP, 0000000C
:00403EB3 8B442410 MOV EAX, DWORD PTR [ESP+10]
:00403EB7 6A08 PUSH 00000008
:00403EB9 40 INC EAX
:00403EBA 50 PUSH EAX
:00403EBB 8D4C2408 LEA ECX, DWORD PTR [ESP+08]
:00403EBF 51 PUSH ECX
:00403EC0 E8AB1E0200 CALL 00425D70
:00403EC5 8D54241C LEA EDX, DWORD PTR [ESP+1C]
:00403EC9 52 PUSH EDX
:00403ECA 8D442410 LEA EAX, DWORD PTR [ESP+10]
:00403ECE 6888FA4600 PUSH 0046FA88
:00403ED3 50 PUSH EAX
:00403ED4 C644242000 MOV [ESP+20], 00
:00403ED9 E865240200 CALL 00426343
:00403EDE 8B442428 MOV EAX, DWORD PTR [ESP+28]
:00403EE2 3552AE376F XOR EAX, 6F37AE52
:00403EE7 8BC8 MOV ECX, EAX
:00403EE9 C1E11B SHL ECX, 1B
:00403EEC C1E805 SHR EAX, 05
:00403EEF 03C8 ADD ECX, EAX
:00403EF1 51 PUSH ECX
:00403EF2 894C242C MOV DWORD PTR [ESP+2C], ECX
:00403EF6 8B4C2430 MOV ECX, DWORD PTR [ESP+30]
:00403EFA 6880FA4600 PUSH 0046FA80
:00403EFF 51 PUSH ECX
:00403F00 E8EC230200 CALL 004262F1
:00403F05 33C0 XOR EAX, EAX
:00403F07 83C430 ADD ESP, 00000030
:00403F0A C3 RET
現在是用VC++6.0 寫個自己的Lc4序號產生器。哎 N年東西了,程式碼有點亂 保持原來的程式碼風格
m_Edit3 EDIT控制元件,m_Edit3代表輸入程式的序列號
m_Edit4 EDIT控制元件,m_Edit4代表輸出的開鎖碼
void CLc3_4KeyDlg::OnChangeEdit3()
{
int HighSerial;
char Serial[20];
char buf[20];
char UnlockCode[20];
DWORD dwSwitchSerial;
DWORD dwBakSwitchSerial;
UpdateData(TRUE);
memset(Serial,0,20);
memset(UnlockCode,0,20);
memset(buf,0,20);
m_Edit4="";
UpdateData(FALSE);
sprintf(buf,"%s",m_Edit3);
strncpy(Serial,buf+1,8);
sscanf(Serial,"%08x",&dwSwitchSerial);
dwSwitchSerial = dwSwitchSerial ^ 0x6F37AE52;
dwBakSwitchSerial = dwSwitchSerial;
_asm{
pushad
mov eax,dwSwitchSerial
mov ecx,dwBakSwitchSerial
shl ecx,1Bh
shr eax, 5
add ecx, eax
mov dwSwitchSerial,ecx
popad
}
_snprintf(UnlockCode,4,"%04x",dwSwitchSerial);
HighSerial = dwSwitchSerial << 16;
_snprintf(UnlockCode+4,4,"%04x",HighSerial);
m_Edit4=UnlockCode;
UpdateData(FALSE);
}
/////////////////////////////////////////////////////////////////////////////////////////////////////
相關文章
- 進位專家註冊演算法分析及序號產生器C原始碼2004-08-19演算法原始碼
- 蒼鷹象棋1.0
註冊演算法分析和序號產生器2004-05-16演算法
- ePublisher Gold v1.3 的註冊碼及序號產生器2000-12-03Go
- 守財奴1.9註冊分析+序號產生器原始碼2015-11-15原始碼
- AddRemove 4GOOD 註冊演算法+序號產生器2003-07-25REMGo演算法
- 印表機監控王
V3.08註冊演算法分析及序號產生器原始碼2015-11-15演算法原始碼
- mIRC v5.81版註冊碼演算法分析和序號產生器編寫2000-12-11演算法
- 《淺談利用RSA演算法防止非法序號產生器的製作》2004-05-20演算法
- Audio compositor註冊碼及序號產生器 (5千字)2002-04-06
- Universe 1.63註冊碼生成分析及序號產生器原碼(上) (2千字)2001-11-12
- Quickness 3.1
註冊演算法分析 + 序號產生器原始碼(tc2) (15千字)2003-04-13UI演算法原始碼
- NetTerm 4.2.c註冊過程分析及序號產生器制作SBS (6千字)2015-11-15
- eBook Edit Pro 3.21 演算法分析及序號產生器原始碼2003-03-13演算法原始碼
- Flash Cam 1.79註冊演算法分析與序號產生器制作以及爆破方法
(7千字)2015-11-15演算法
- MP3 explorer 破解和序號產生器的製作2015-11-15
- 【原創】FileRecoveryAngel 演算法分析+序號產生器2015-11-15演算法
- Beyond Compare 1.9f註冊演算法&序號產生器 (8千字)2002-04-28演算法
- 製作mIRC6.02序號產生器(給別人寫的初學者序號產生器教材) (14千字)2015-11-15
- AntiSpy PRO 1.02
註冊演算法分析 + 序號產生器原始碼(tc2) (12千字)2003-04-11演算法原始碼
- 《中華壓縮 6.01》註冊碼破解及序號產生器 (14千字)2001-08-19
- CMailServer V3.2 註冊碼演算法及CrackCode
2000 的序號產生器 (4千字)2001-08-18AIServer演算法
- 製作自己的記憶體序號產生器--------檔案隱藏精靈註冊碼獲取 (4千字)2015-11-15記憶體
- 鬥地主4.0註冊演算法,序號產生器在OCG論壇
(22千字)2015-11-15演算法
- 美萍安全衛士V8.45序號產生器制作分析過程,及序號產生器! (11千字)2001-10-28
- 音樂處理acoustica2.0註冊碼破解及序號產生器 (8千字)2002-04-06
- 【原創】手把手系列之二―Axman
3.12r的註冊演算法詳解及序號產生器2004-12-15演算法
- Uninstall
Manager V4.20簡單註冊演算法+加密演算法分析+序號產生器C++原始碼:-)2004-10-30演算法加密C++原始碼
- 序號產生器合集2024-03-17
- 全國電話通1.18
演算法分析+序號產生器2004-04-26演算法
- Windows系統切換工具
演算法分析+序號產生器2004-07-02Windows演算法
- QuickCD V1.0.4演算法分析+序號產生器原始碼2015-11-15UI演算法原始碼
- 一個CrackMe的破解以及序號產生器的製作
(4千字)2001-08-16
- EditPlus 2.01b 序號產生器的製作 (22千字)2001-09-10
- 序號產生器制分析: (1千字)2001-11-19
- 如何製作VB程式記憶體序號產生器--國內某軟體的序號產生器(隱去軟體資訊)
(14千字)2002-08-04記憶體
- 時間到了 v1.5 簡單註冊演算法分析
+ 序號產生器原始碼(tc2) (9千字)2003-04-12演算法原始碼
- MobileSearch(手機號碼歸屬地查詢) v2.0註冊演算法,附序號產生器~~~~~~
(30千字)2002-03-29演算法
- 【原創】控制元件註冊
3dlink 1.6 sp2 的演算法詳解及序號產生器(手把手系列)2015-11-15控制元件3D演算法