我的第一篇破文,獻給看學學院的!^_^高手免進! (10千字)
標 題:我的第一篇破文,獻給看學學院的!^_^高手免進! (10千字)
發信人:bbbsl
時 間:2002-6-20 15:56:04
詳細資訊:
Lemmy v4.4 註冊碼分析
作者:bbbsl
軟體介紹:這是一款在windows下模擬unix|linux下vi的一個工具,我們系沒有用unix|linux做實驗的條件,所以讓我們
用這玩意體驗一下,超級噁心!!!沒發現用它有什麼有意義的地方,但居然還有時間限制,所以,就拿它做個crackme吧!
平臺:
windows 2000 advanced server
所用工具:softice for nt 4.05,calc(window自帶計算器)
//執行lemmyreg後下斷點bpx getwindowtexta後,按F10一直走到這一段程式碼(當然,前提是你得先輸入了你的ID和SN^_^):
:0040178F 8B17
mov edx, dword ptr [edi]
:00401791 50
push eax
//你輸入的假註冊碼
:00401792 52
push edx
//你的ID
:00401793 8D4E68
lea ecx, dword ptr [esi+68] //我一直不明白這個數是怎麼來的,程式中用它加14得到一個地址,用這個地址的數做運算,高手給指點指點吧
:00401796 E865020000 call
00401A00 //關鍵!!!
:0040179B 85C0
test eax, eax //正確否?
:0040179D 7457
je 004017F6 //正確則跳過!
:0040179F 6A00
push 00000000
:004017A1 6A30
push 00000030
* Possible StringData Ref from Data
Obj ->"Check the values supplied"
|
:004017A3 68B0E04200 push
0042E0B0
:004017A8 E8FFD60100
call 0041EEAC
//下面是401A00的程式碼:
:00401A00 53
push ebx
:00401A01
55
push ebp
:00401A02 56
push esi
:00401A03 57
push edi
:00401A04 8BF9
mov edi, ecx
:00401A06
6A08 push
00000008
:00401A08 83CDFF
or ebp, FFFFFFFF
:00401A0B E816650100
call 00417F26
:00401A10 8B74241C
mov esi, dword ptr [esp+1C]
:00401A14
83C404 add esp,
00000004
:00401A17 8BD8
mov ebx, eax
:00401A19 33D2
xor edx, edx
* Referenced by a (U)nconditional
or (C)onditional Jump at Address:
|:00401A71(C)
|
:00401A1B 0FBE06
movsx eax, byte ptr [esi]
//esi中是你是輸入的假註冊碼
:00401A1E 0FBE4E01
movsx ecx, byte ptr [esi+01]
//兩位兩位處理
:00401A22 83F830
cmp eax, 00000030
//是數字否?
:00401A25 7C0A
jl 00401A31
//如果小於‘0’則非數字..
:00401A27
83F839 cmp eax,
00000039
:00401A2A
7F05 jg 00401A31
//如果大於‘9’則非數字..
:00401A2C 83E830
sub eax, 00000030 //轉成16進位制中相應數字
:00401A2F EB11
jmp 00401A42
//下一位判斷
* Referenced by a (U)nconditional or (C)onditional
Jump at Addresses:
|:00401A25(C), :00401A2A(C)
|
:00401A31 83F841
cmp eax, 00000041
//不是數字,那是不是大寫字母A-F中的一個呢?
:00401A34 7C0A
jl 00401A40 //小則清eax
:00401A36 83F846
cmp eax, 00000046 //大也清eax
:00401A39 7F05
jg 00401A40
:00401A3B 83E837
sub eax, 00000037 //如果是則轉成16進位制中相應字元
:00401A3E EB02
jmp 00401A42
* Referenced by a (U)nconditional or (C)onditional
Jump at Addresses:
|:00401A34(C), :00401A39(C)
|
:00401A40 33C0
xor eax, eax
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00401A2F(U),
:00401A3E(U)
|
:00401A42 83F930
cmp ecx, 00000030
//第二位判斷,以下均同第一位
:00401A45 7C0A
jl 00401A51
:00401A47 83F939
cmp ecx, 00000039
:00401A4A
7F05 jg 00401A51
:00401A4C 83E930
sub ecx, 00000030
:00401A4F EB11
jmp 00401A62
* Referenced by a (U)nconditional
or (C)onditional Jump at Addresses:
|:00401A45(C), :00401A4A(C)
|
:00401A51 83F941
cmp ecx, 00000041
:00401A54 7C0A
jl 00401A60
:00401A56 83F946
cmp ecx, 00000046
:00401A59 7F05
jg 00401A60
:00401A5B 83E937
sub ecx, 00000037
:00401A5E EB02
jmp 00401A62
* Referenced by a (U)nconditional
or (C)onditional Jump at Addresses:
|:00401A54(C), :00401A59(C)
|
:00401A60 33C9
xor ecx, ecx
* Referenced by a (U)nconditional or (C)onditional Jump
at Addresses:
|:00401A4F(U), :00401A5E(U)
|
:00401A62 C0E004
shl al, 04
//合併剛剛處理過的兩位假註冊碼
:00401A65
02C1 add
al, cl //即你輸入的東西,假設為‘77’則變為16進位制數77放入al中
:00401A67 83C602
add esi, 00000002
:00401A6A 880413
mov byte ptr [ebx+edx], al //存入ebx所指向空間中
:00401A6D 42
inc edx
//edx為計數器
:00401A6E 83FA08
cmp edx, 00000008
//迴圈是否結束
:00401A71 7CA8
jl 00401A1B
//不結束繼續。。
:00401A73 53
push ebx
//儲存轉換過的東東所在地
:00401A74
8BCF mov
ecx, edi //就是剛才那個數
:00401A76 E8E5F5FFFF call
00401060 //進一步處理,關鍵!!!
:00401A7B 8B542414
mov edx, dword ptr [esp+14]
:00401A7F 83C9FF
or ecx, FFFFFFFF
//再往下是判斷你的ID和用註冊碼算出來的ID是否一致的一個CALL
:00401A82 8BFA
mov edi, edx
:00401A84
33C0 xor
eax, eax
:00401A86 F2
repnz
:00401A87 AE
scasb
:00401A88 F7D1
not ecx
:00401A8A
49
dec ecx
:00401A8B 83F908
cmp ecx, 00000008 //判斷名字的位數是否大於8
:00401A8E 7607
jbe 00401A97
//是就繼續不是截斷
:00401A90 B908000000
mov ecx, 00000008
:00401A95 EB0C
jmp 00401AA3
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
|:00401A8E(C)
|
:00401A97 8BFA
mov edi, edx
:00401A99 83C9FF
or ecx, FFFFFFFF
:00401A9C 33C0
xor eax, eax
:00401A9E F2
repnz
:00401A9F AE
scasb
:00401AA0 F7D1
not ecx
:00401AA2 49
dec ecx
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:00401A95(U)
|
:00401AA3 85C9
test ecx, ecx //位數是否為零
:00401AA5 7E11
jle 00401AB8
:00401AA7 51
push ecx
//這是位數
:00401AA8 53
push ebx
//這是用註冊碼推出來的ID
:00401AA9
52
push edx //這是你輸入的ID
:00401AAA E8515F0000 call
00407A00 //是否相同?
:00401AAF 83C40C
add esp, 0000000C
:00401AB2 85C0
test eax, eax
:00401AB4 7502
jne 00401AB8
//如相同清ebp不然則相反,從而導致最後返回的eax值不同
:00401AB6 33ED
xor ebp, ebp
* Referenced
by a (U)nconditional or (C)onditional Jump at Addresses:
|:00401AA5(C), :00401AB4(C)
|
:00401AB8 53
push ebx
:00401AB9 E8A4640100
call 00417F62
:00401ABE 83C404
add esp, 00000004
:00401AC1 8BC5
mov eax, ebp
//eax<==ebp
:00401AC3 5F
pop edi
:00401AC4 5E
pop esi
:00401AC5 5D
pop ebp
:00401AC6
5B
pop ebx
:00401AC7 C20800
ret 0008
//下面是註冊碼的判斷過程:
:00401060 83EC08
sub esp, 00000008
:00401063 8B54240C mov
edx, dword ptr [esp+0C]
:00401067 53
push ebx
:00401068 56
push esi
:00401069
57
push edi
:0040106A 8A4204
mov al, byte ptr [edx+04]
//edx中是剛才處理過的假註冊碼
:0040106D 8BF9
mov edi, ecx
//同樣兩位兩位處理
:0040106F 8A4A02
mov cl, byte ptr [edx+02]
:00401072 8844240C
mov byte ptr [esp+0C], al
//第五位放入第0位
:00401076 8A4207
mov al, byte ptr [edx+07]
:00401079 884C240D
mov byte ptr [esp+0D], cl
//第三位放入第1位
:0040107D 8A0A
mov cl, byte ptr
[edx]
:0040107F
8844240E mov byte ptr [esp+0E],
al //第八位放入第2位
:00401083
8A4206 mov al, byte
ptr [edx+06]
:00401086
884C240F mov byte ptr [esp+0F],
cl //第零位放入第3位
:0040108A
8A4A03 mov cl, byte
ptr [edx+03]
:0040108D
88442410 mov byte ptr [esp+10],
al //第七位放入第4位
:00401091
8A4205 mov al, byte
ptr [edx+05]
:00401094
884C2411 mov byte ptr [esp+11],
cl //第四位放入第5位
:00401098
8A4A01 mov cl, byte
ptr [edx+01]
:0040109B
88442412 mov byte ptr [esp+12],
al //第六位放入第6位
:0040109F
8D74240C lea esi, dword
ptr [esp+0C] //傳地址給esi
:004010A3 33C0
xor eax, eax
:004010A5 884C2413
mov byte ptr [esp+13], cl
//第二位放入第7位
:004010A9 2BF2
sub esi, edx
//用edx作計數器
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004010BB(C)
|
:004010AB 8A4C3814
mov cl, byte ptr [eax+edi+14]
//開始將換過位的假註冊碼和edi+14中的數逐個異或
:004010AF 8A1C16
mov bl, byte ptr [esi+edx]
//edi+14中的數為312ACF04C76BF4DA
:004010B2 32CB
xor cl, bl
:004010B4 40
inc eax
:004010B5 880A
mov byte ptr [edx], cl
//異或出來的東東儲存
:004010B7 42
inc edx
:004010B8 83F808
cmp eax, 00000008
//是否已結束
:004010BB 7CEE
jl 004010AB
//否則繼續
:004010BD 5F
pop edi
:004010BE 5E
pop esi
:004010BF
5B
pop ebx
:004010C0 83C408
add esp, 00000008
:004010C3 C20400
ret 0004
分析:
其實已經很明顯了,這是一個用註冊碼推ID的軟體。它將我們輸入的註冊碼轉成16進位制數的形式,然後進行換位,這一步得到的東東再和
16進位制數31 2A CF 04 C7 6B F4 DA逐位異或,然後這個東東和你的ID比較,相同說明是正確的,否則就讓你檢查。
我們可以用計算器來推一個你自己的註冊碼,例如:我的ID為bbbsl,16進製為62
62 62 73 6c,假設註冊碼為陣列a[8],則經它折騰之後實際上陣列變為b[8]={
a[5],a[3],a[8],a[0],a[7],a[4],a[6],a[2]},若要讓推出來的ID前五位同bbbsl相同,就必須是陣列b前五位和31
2a cf 04 c7相異或後得到的東東==62 62 62
73 6c,so拿起計算器算算吧,62^31=53,62^2a=48,62^cf=AD,73^04=77,6c^c7=AB,即a[5]=53,a[3]=48,a[8]=AD,a[0]=77,a[7]=AB,其餘各位隨意,所以我的註冊碼為
id: bbbsl
sn: 770048005300ABAD
相關文章
- 我的第一篇破文,獻給看學學院! 高手免進! (2千字)2002-06-29
- 我的第一篇破文easyoffice 2001 高手莫入!! (1千字)2001-11-04
- 我的第2篇破文 高手莫入!! (3千字)2001-11-11
- 兩種破解 花貓時間精靈 v1.0 功能限制的方法,本人獻給破解初學者的第一篇破文!高手請匆入內~~
(24千字)2001-10-26
- 破traceboy2.0 高手勿看! (9千字)2001-01-29
- 面向文獻的學習2024-05-02
- 學演算法的看過來 》》》演算法分析:
<獻給初學者> 之五 (5千字)2002-06-07演算法
- 破文三,高手莫入,非常簡單 (2千字)2001-08-01
- 我的第3篇破文 cr--CJSFormater 高手請指導、指導!! (4千字)2001-11-24JSORM
- 獻給初學者(高手也點評點評!!)KoolMoves V1.33的破解!!
(10千字)2000-09-16
- 獻給初學者(高手也看看) 破解 Cpukiller 2.0 (1千字)2000-09-17
- 僅以此程式碼獻給我所有朋友或愛好VFP的朋友。 (10千字)2002-09-08
- 我的第一篇增加PE檔案功能的文章,獻醜了。 (4千字)2015-11-15
- 華為雲學院給大學生的獻禮:輕鬆玩轉微認證2018-11-19
- 高手 高手 高手 給我一個答案2005-04-26
- 奇怪的現象,高手進!!!!非高手勿看!2005-11-16
- 異想天開的打狗記錄(高手免進) (12千字)2002-07-17
- 小小助手V2.01的破解過程-----算是我留給初學者的一偏破文
(7千字)2015-11-15
- 史上最牛的演講(獻給那些死也不肯學習的同學)2007-06-23
- 破文一篇:易經八卦占卜程式7.0的破解(高手莫入) (8千字)2001-08-31
- 關於S-SPLINE的問題,哪位高手給我一個完美的爆破方案? (10千字)2001-05-31
- Guitar Pro v3.0 的破文 (11千字)2001-09-08GUI
- 英語會話精靈 2.0 --謹以此文獻給初學破解的愛好者
(7千字)2015-11-15會話
- 識別殼的簡單程式,高手免進。2004-12-14
- 看雪學院《註冊協議》2016-11-28協議
- 加入FCG的見面破文,初學者可以看 小球 peterchen 偽裝者等等不許看!! (4千字)2001-06-22
- 我的第二篇破文------wordcard
3.10的破解明細2004-08-30
- 我學Java看過的一些書2018-01-29Java
- 英語文學的免費網路資源2007-08-07
- 關於UltraEdit32 v8.1的註冊校驗(PJ手記).高手免看! (14千字)2002-02-01
- 非明碼軟體的入門教學--現給演算法的入門者(高手末入) (6千字)2002-07-24演算法
- 上海文華學院 Java老師2008-02-18Java
- JAVA EE 學習路線 Kenan獻給努力自學的孩紙薦2012-05-29JavaNaN
- NeurIPS提前看 | 四篇論文,一窺元學習的最新研究進展2019-12-09
- 《文獻管理與資訊分析》慕課學習心得2020-12-27
- Tmaster6.0 破解(我的第一篇灌水) (4千字)2001-10-04AST
- 學習程式設計是如何幫我致富的(第一篇)2014-06-04程式設計
- 官宣:華為雲學院帶你看AI2018-10-16AI