Windows系統切換工具
《Windows系統切換工具》包含了簡體中文/繁體中文/英語三種語言包,並且在啟動的過程中會自適應系統語言。相對來說《Windows系統切換工具》的操作非常簡單,使用者可以透過操作嚮導很容易完成系統切換任務。啟動《Windows系統切換工具》,在“常規設定”中已經列出了程式已經檢測出的安裝的系統名稱、目錄、系統型別等等資訊,使用者可以透過右側的按鈕來進行新增(把安裝了但沒有檢測到的系統新增到系統列表中去,注意只能新增Win9x/98/Me系統)、修改、預設等操作。“NT/2000/Xp啟動選單欄”這個主要是管理NT/2000/Xp啟動選單欄的,它可以用來管理NT/2000/Xp啟動選單的預設系統和選單停留時間。除此之外,《Windows系統切換工具》還有設定系統和恢復IE設定的功能。
《Windows系統切換工具》未註冊版本在功能和時間上沒有任何限制,只是在啟動時會顯示一個評估版本的對話方塊。
軟體性質:
[免費版]
作業系統: WIN 9X/WIN NT/2000/XP
語言介面: 簡體中文
檔案大小:1176KB
原始檔用ASPack v2.11加殼,脫殼後,由原來的50k變成136k。
破解工具:TRW2000 v1.22
娃娃修正版
程式執行後,點“註冊”,要求輸入,使用者名稱、註冊名和註冊碼,使用者名稱和註冊名都至少大於3個字元。(破解後得知,使用者名稱並不參與運算,只是透過註冊名算出相應的註冊碼,典型的name/serial型)
輸入:
使用者名稱:xqlk
註冊名:ricemaster
註冊碼:1122334455
設斷點:bpx hmemcpy,程式一共斷下來3次,分別是在讀取上述3個資訊,3次後,來到:
:00407226
E847980000 Call 00410A72
:0040722B
8BCD mov
ecx, ebp
:0040722D E80E030000 call
00407540 ===》標準形式!!!!我喜歡!!!!!
:00407232 85C0
test eax, eax
:00407234 0F842B020000
je 00407465 ===》不能跳,跳就game
over了。
:0040723A 81EEB8040000 sub
esi, 000004B8 ===》註冊碼儲存到檔案前減了4B8,可能是出於安全方面的考慮吧,不然,註冊名及相應的註冊碼就直接暴露了。
:00407240
8D4C241C lea ecx, dword
ptr [esp+1C]
:00407244 56
push esi
F8進去:
:00407540 6AFF
push FFFFFFFF
:00407542 68581D4100
push 00411D58
:00407547 64A100000000
mov eax, dword ptr fs:[00000000]
:0040754D
50 push
eax
:0040754E 64892500000000 mov dword ptr
fs:[00000000], esp
:00407555 83EC10
sub esp, 00000010
:00407558 53
push ebx
:00407559 55
push ebp
:0040755A
56 push
esi
:0040755B 57
push edi
:0040755C 8BF9
mov edi, ecx
:0040755E 51
push ecx
:0040755F 8D442434
lea eax, dword ptr [esp+34]
:00407563
8BCC mov
ecx, esp
:00407565 8964241C
mov dword ptr [esp+1C], esp
:00407569 50
push eax
:0040756A C744243000000000
mov [esp+30], 00000000
*
Reference To: MFC42.Ordinal:0217, Ord:0217h
|
:00407572
E8FB940000 Call 00410A72
:00407577
8BCF mov
ecx, edi
:00407579 E822010000 call
004076A0 *****傳入的是使用者名稱ricemaster
:0040757E 8BF0
mov esi, eax
:00407580 85F6
test esi, esi
:00407582
0F84F0000000 je 00407678
:00407588
51 push
ecx
:00407589 8BCC
mov ecx, esp
:0040758B 8964241C
mov dword ptr [esp+1C], esp
*
Possible StringData Ref from Data Obj ->"EasunLee"
|
:0040758F 68F4A64100
push 0041A6F4
*
Reference To: MFC42.Ordinal:0219, Ord:0219h
|
:00407594
E8BF930000 Call 00410958
:00407599
8BCF mov
ecx, edi
:0040759B E800010000 call
004076A0 *****傳入的是EasunLee
:004075A0 51
push ecx
:004075A1 8BD8
mov ebx, eax
:004075A3
8BCC mov
ecx, esp
:004075A5 8964241C
mov dword ptr [esp+1C], esp
*
Possible StringData Ref from Data Obj ->"EasunLee"
|
:004075A9 68F4A64100
push 0041A6F4
*
Reference To: MFC42.Ordinal:0219, Ord:0219h
|
:004075AE
E8A5930000 Call 00410958
:004075B3
8BCF mov
ecx, edi
:004075B5 E8E6000000 call
004076A0 *****傳入的是EasunLee
:004075BA 51
push ecx
:004075BB 8BE8
mov ebp, eax
:004075BD
8BCC mov
ecx, esp
:004075BF 8964241C
mov dword ptr [esp+1C], esp
*
Possible StringData Ref from Data Obj ->"easunlee98meiosys"
|
:004075C3 68E0A64100
push 0041A6E0
*
Reference To: MFC42.Ordinal:0219, Ord:0219h
|
:004075C8
E88B930000 Call 00410958
:004075CD
8BCF mov
ecx, edi
:004075CF E8CC000000 call
004076A0 *****傳入的是easunlee98meiosys
:004075D4 51
push ecx
:004075D5 89442418
mov dword ptr [esp+18],
eax
:004075D9 8BCC
mov ecx, esp
:004075DB 8964241C
mov dword ptr [esp+1C], esp
*
Possible StringData Ref from Data Obj ->"Luyanghs&&Tsai&&bluebird"
|
:004075DF 68C4A64100
push 0041A6C4
*
Reference To: MFC42.Ordinal:0219, Ord:0219h
|
:004075E4
E86F930000 Call 00410958
:004075E9
8BCF mov
ecx, edi
:004075EB E8B0000000 call
004076A0 *****傳入的是
Luyanghs&&Tsai&&bluebird
:004075F0
51 push
ecx
:004075F1 89442414 mov
dword ptr [esp+14], eax
:004075F5 8BCC
mov ecx, esp
:004075F7 8964241C
mov dword ptr [esp+1C], esp
*
Possible StringData Ref from Data Obj ->"heshengwssu1091119"
|
:004075FB 68B0A64100
push 0041A6B0
*
Reference To: MFC42.Ordinal:0219, Ord:0219h
|
:00407600
E853930000 Call 00410958
:00407605
8BCF mov
ecx, edi
:00407607 E894000000 call
004076A0 *****傳入的是heshengwssu1091119
:0040760C 51
push ecx
:0040760D 8944241C
mov dword ptr [esp+1C],
eax
:00407611 8BCC
mov ecx, esp
:00407613 89642420
mov dword ptr [esp+20], esp
*
Possible StringData Ref from Data Obj ->"200970878"
|
:00407617 68A4A64100
push 0041A6A4
*
Reference To: MFC42.Ordinal:0219, Ord:0219h
|
:0040761C
E837930000 Call 00410958
:00407621
8BCF mov
ecx, edi
:00407623 E878000000 call
004076A0 *****傳入的是200970878
這個call還沒完,先插入講一下下面這個函式:
大家可以看到,上面的程式裡7次用到了call 004076A0這個函式,它的具體演算法是把傳入字串的每一位的ASCII值乘以2的(位置-1)次方, 再加到一起。比如:ricemaster,就是ASCII(r)*1+ASCII(i)*2+ASCII(c)*4+ASCII(e)*8+ASCII(m)*16 …………(我怎麼覺得說得這麼羅嗦啊,大家先湊合著看吧,後面有程式碼。)
:004076A0
64A100000000 mov eax, dword ptr fs:[00000000]
:004076A6
6AFF push
FFFFFFFF
:004076A8 68781D4100 push
00411D78
:004076AD 50
push eax
:004076AE 64892500000000
mov dword ptr fs:[00000000], esp
:004076B5 56
push esi
:004076B6 57
push
edi
:004076B7 8B7C2418 mov
edi, dword ptr [esp+18]
:004076BB 8B57F8
mov edx, dword ptr [edi-08]
:004076BE 83FA03
cmp edx, 00000003
===》所輸入的字串必須大
於3位
:004076C1
7D26 jge
004076E9 ===》所以如果輸入正確的
話,這裡是肯定跳的
:004076C3 8D4C2418
lea ecx, dword ptr [esp+18]
:004076C7 C7442410FFFFFFFF
mov [esp+10], FFFFFFFF
*
Reference To: MFC42.Ordinal:0320, Ord:0320h
|
:004076CF
E836920000 Call 0041090A
:004076D4
33C0 xor
eax, eax
:004076D6 8B4C2408
mov ecx, dword ptr [esp+08]
:004076DA 64890D00000000
mov dword ptr fs:[00000000], ecx
:004076E1 5F
pop edi
:004076E2 5E
pop
esi
:004076E3 83C40C
add esp, 0000000C
:004076E6 C20400
ret 0004
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004076C1(C)
|
:004076E9
33F6 xor
esi, esi
:004076EB 33C9
xor ecx, ecx
:004076ED 85D2
test edx, edx
:004076EF 7E0D
jle 004076FE
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004076FC(C)
===》 這個call的核心運算部分!!!
|
:004076F1 0FBE0439
movsx eax, byte ptr [ecx+edi]
:004076F5
D3E0 shl
eax, cl
:004076F7 03F0
add esi, eax
:004076F9 41
inc ecx
:004076FA 3BCA
cmp ecx, edx
:004076FC 7CF3
jl 004076F1
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004076EF(C)
|
:004076FE
8D4C2418 lea ecx, dword
ptr [esp+18]
:00407702 C7442410FFFFFFFF mov [esp+10],
FFFFFFFF
* Reference
To: MFC42.Ordinal:0320, Ord:0320h
|
:0040770A
E8FB910000 Call 0041090A
:0040770F
8B4C2408 mov ecx, dword
ptr [esp+08]
:00407713 8BC6
mov eax, esi
:00407715 5F
pop edi
:00407716 64890D00000000
mov dword ptr fs:[00000000], ecx
:0040771D 5E
pop esi
:0040771E
83C40C add esp,
0000000C
:00407721 C20400
ret 0004
這個call的細微演算法我看明白了,可是從宏觀上講,是僅僅是計算,還是別的什麼意思,還請高手指點一下。
好,繼續剛才的call,希望大家還沒有被我說迷糊:P
此時,上述的7個字串(1個是使用者名稱,6個是程式自己的)都計算出了相應的值。
:00407628
81F678EE0220 xor esi, 2002EE78 ===》esi裡是根據使用者名稱算出
的值
:0040762E 8B7C2414
mov edi, dword ptr [esp+14]
:00407632 81EE21050E20
sub esi, 200E0521
:00407638 8B542418
mov edx, dword ptr [esp+18]
:0040763C
81F678563472 xor esi, 72345678
:00407642
81EE88F76877 sub esi, 7768F788
:00407648
33F3 xor
esi, ebx ===》ebx裡是根據Easunlee算
出的值
:0040764A 8B5C2410
mov ebx, dword ptr [esp+10]
:0040764E 03F5
add esi, ebp ===》ebp裡是根據
Easunlee算出的值
:00407650 33F3
xor esi,
ebx ===》ebx裡是根據
Luyanghs&&Tsai&&bluebird算出的值
:00407652
33F7 xor
esi, edi ===》edi裡是根據
easunlee98meiosys算出的值
:00407654
2BF2 sub
esi, edx ===》edx裡是根據
heshengwssu1091119算出的值
:00407656
03F0 add
esi, eax ===》eax裡是根據200970878算
出的值
:00407658 8B442434
mov eax, dword ptr [esp+34] ===》eax裡是註冊
碼的16進位制,把esi裡的值傳成
10進位制就是註冊碼了。
:0040765C 3BF0
cmp esi, eax
:0040765E 7518
jne 00407678
===》跳就over
:00407660 8D4C2430
lea ecx, dword ptr [esp+30]
:00407664 C7442428FFFFFFFF
mov [esp+28], FFFFFFFF
*
Reference To: MFC42.Ordinal:0320, Ord:0320h
|
:0040766C
E899920000 Call 0041090A
:00407671
B801000000 mov eax, 00000001
:00407676
EB13 jmp
0040768B
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:00407582(C), :0040765E(C)
|
:00407678
8D4C2430 lea ecx, dword
ptr [esp+30]
:0040767C C7442428FFFFFFFF mov [esp+28],
FFFFFFFF
* Reference
To: MFC42.Ordinal:0320, Ord:0320h
|
:00407684
E881920000 Call 0041090A
:00407689
33C0 xor
eax, eax ===》罪魁禍首!也是爆破的一種選擇,至於其他爆破的選擇,呵呵,顯而易見的吧,我也沒具體做。
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00407676(U)
|
:0040768B
8B4C2420 mov ecx, dword
ptr [esp+20]
:0040768F 5F
pop edi
:00407690 5E
pop esi
:00407691 5D
pop ebp
:00407692
64890D00000000 mov dword ptr fs:[00000000],
ecx
:00407699 5B
pop ebx
:0040769A 83C41C
add esp, 0000001C
:0040769D C20800
ret 0008
演算法到此結束,序號產生器也很容易寫,畢竟那6個串都是固定的。
註冊後程式會在其安裝目錄生成一個key.dll的檔案,可是隱藏屬性的哦,其內容如下:
[Easun]
UserName = xqlk
User
= ricemaster
code = 2109644410
這個程式總的說來挺簡單的,從安裝到成文一共花了3個小時吧,沒走什麼彎路,也沒遇到什麼陷阱,很適合我這種新手做練習用。不過裡面的MFC我可沒深入研究,看不懂:(
第一次寫crack的文章,不足之處還請眾位高手指教。
餓了,吃飯去了…………………………
相關文章
- windows怎麼切換回蘋果系統(電腦雙系統切換系統方法)2022-12-02Windows蘋果
- 切換Windows的系統語言2023-05-14Windows
- Windows系統切換工具
演算法分析+序號產生器2004-07-02Windows演算法
- windows8.1系統的輸入切換方法2016-10-18Windows
- Windows10系統怎麼切換虛擬桌面2019-10-17Windows
- Windows XP 系統使用者切換酷招(轉)2007-08-11Windows
- win10雙系統怎麼切換另一個_windows10雙系統快速切換操作方法2020-07-15Win10Windows
- Windows10系統如何切換使用者賬戶2022-03-19Windows
- mac電腦如何切換雙系統,雙系統該怎麼切換2020-06-20Mac
- Mac上一鍵切換系統各項功能的工具2020-04-24Mac
- windows10系統無法切換雙顯示卡怎麼解決2019-07-27Windows
- windows10系統下微軟五筆全形半形如何切換2018-09-17Windows微軟
- IP地址切換工具2018-07-04
- Windows10系統無法切換輸入法的解決方法2015-08-24Windows
- win10系統按alt+tab無法切換到桌面_windows10系統alt+tab不能快速切換桌面如何解決2019-12-31Win10Windows
- Windows 98 系統工具(轉)2007-08-12Windows
- Linux系統中使用者切換2017-05-05Linux
- 切換系統中多個python版本2024-03-29Python
- One Switch for Mac 快速切換工具2021-08-24Mac
- nvm for windows切換node版本無效2018-03-15Windows
- Linux系統中如何切換使用者?2024-01-16Linux
- 時間系統、程式的排程與切換2013-09-16
- Android 切換系統語言原始碼分析2016-03-05Android原始碼
- win10系統雙顯示卡怎麼切換?Win10系統雙顯示卡切換AMD和英特爾的方法2021-04-14Win10
- 樂1s三種系統桌面怎麼切換 樂視超級手機1s系統桌面切換教程2017-01-03
- FAA 切換空中交通管制系統到 Linux2007-08-25Linux
- 記錄windows11系統,按shift鍵中英文切換未生效解決辦法2022-06-22Windows
- One Switch for Mac(快速切換工具)1.232021-12-10Mac
- 在windows下切換node版本,很簡單!2019-02-16Windows
- JDK Windows 安裝配置以及多版本切換2021-12-07JDKWindows
- win10系統amd顯示卡如何切換到獨顯2019-07-26Win10
- Only Switch,一鍵切換系統各項功能的神器2022-01-06
- 系統呼叫時為什麼發生任務切換?2020-09-23
- win10系統下怎麼切換微軟賬戶2022-03-17Win10微軟
- 美國軍方無人機系統從Solaris切換到Linux2014-05-07無人機Linux
- Windows系統增強最佳化工具2022-12-22Windows
- windows10怎麼切換使用者_win10切換使用者的方法2019-11-28WindowsWin10
- win10如何快速切換軟體 windows10怎麼切換軟體視窗2020-11-27Win10Windows