貼一個教程,Ace FTP 1.30 ,菜鳥請進! (13千字)
AceFTP 1.31軟體是一個巨好的FTP工具,很多地方都有下載這個軟體的註冊方式非常具有典型性,很容易就可
以跟出註冊。對於我machoman這樣的菜鳥水平的小混混也能用它來實踐寫寫序號產生器的感覺。
結果:
註冊名:CCG (China Crack Group 中國人自己的破解組 ^_^)
註冊碼:6TYPY7-652A34-LMVJA7-YE4JYB
工具 :
soft ice 4.05
dasm32
步驟:
我先在註冊名處輸入'CCG'
然後輸入假註冊碼'31415926' (SunBird老大說的好記^_^,)
再用ice 中的bpx hmemcpy下斷點。再用F12進入程式空間。然後用
bd hmemcpy 遮蔽掉這個斷點
國外的軟體的註冊方式,溫柔的一般都是透過註冊名算出註冊碼的先看看我的註冊名在哪把
在ice下用 S 30:0 L ffffffff 'CCG' 命令查詢我的註冊碼的位置.
然後就可以看見在記憶體單元的一處找到你下的名字,在我的機器上是這樣的,不同機器上偏移位置可能不同
30:80607612 43 43 47 00 00 00 00 00-00 00 00 00 00 00
00 00 CCG.................
接下來要做的就是對這個記憶體位置下斷點
bpm 30: 80607612
在下面的位置可以看見以下程式碼。關於是如何
找到這個位置的,就需要有一點耐性,呵呵,我就是沒有,所以好多軟體都搞不定:_(,經常聽初學者說如何找
到關鍵的註冊碼比較的位置,我要說的就是要多在記憶體中下斷點,看看你的資訊在哪裡被讀取處理,這樣你就
會順藤摸瓜找對地方.註冊資訊一般都會在記憶體中搬動幾次的,我透過幾次的查詢在如下位置發現了關鍵的
地方,這裡就可以具體分析註冊碼了,看見4bd321處的 CCG了嗎?我就是根據它來找到註冊部分的^_^
****************************************************************************
第一段程式的功能是把使用者名稱形成密碼的一個輸入。
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD355(C)
|
:004BD31B 8D45E4
lea eax, dword ptr [ebp-1C]
:004BD31E 8B55F4
mov edx, dword ptr [ebp-0C]//大寫的 'CCG'
:004BD321 8A541AFF
mov dl, byte ptr [edx+ebx-01]//順序取其中的字元
:004BD325 E81E6CF4FF call
00403F48
:004BD32A 8B45E4
mov eax, dword ptr [ebp-1C]//分離的字元
:004BD32D 8B55EC
mov edx, dword ptr [ebp-14]//串"FJ7ESTYULPVBNMCRY567AA8234452734",這就是註冊碼的樣本字元
:004BD330 E8D76FF4FF call
0040430C//這個呼叫,求出根據使用者名稱選取的字元,這裡要跟進去看看分析
:004BD335 85C0
test eax, eax//這裡該不為0的字元選取.
:004BD337 7E1A
jle 004BD353//跳就是不需要的字元
:004BD339 8D45E0
lea eax, dword ptr [ebp-20]
:004BD33C 8B55F4
mov edx, dword ptr [ebp-0C]
:004BD33F 8A541AFF
mov dl, byte ptr [edx+ebx-01]
:004BD343 E8006CF4FF call
00403F48
:004BD348 8B55E0
mov edx, dword ptr [ebp-20]
:004BD34B 8D45F0
lea eax, dword ptr [ebp-10]
:004BD34E E8D56CF4FF call
00404028
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD337(C)
|
:004BD353 43
inc ebx
:004BD354 4E
dec esi//名字字元的長度減一
:004BD355 75C4
jne 004BD31B//迴圈取數
****************************************************************************
;註冊碼演算法是把根據使用者名稱字元形成的字串的順序每個字元在樣本字符集合中查詢偏移
;位置,再把偏移位置求平方加上上次的結果,再減去本身,把結果除以0x20取餘,把餘
;數加1,的結果在樣本字元的結果偏移地址的字元作為真正註冊碼的一個字元。
;用數學公式表示為:
;offset_character[i]=mahine[(distance*distance-distance-last_distance)%0x20+1]
;這個公式不包刮每6個字元間隔的一個'-'字元。
|:004BD314(C)
|
:004BD357 8D45F4
lea eax, dword ptr [ebp-0C]
:004BD35A 8B55F0
mov edx, dword ptr [ebp-10]
:004BD35D E8D66AF4FF call
00403E38
:004BD362 8B45F4
mov eax, dword ptr [ebp-0C];字元'CC'
:004BD365 E8B66CF4FF call
00404020 ;這個呼叫只是判斷字串的長度
:004BD36A 83F818
cmp eax, 00000018;根據註冊名選取的小於24個字元嗎?
:004BD36D 7D2E
jge 004BD39D
:004BD36F BE18000000 mov esi,
00000018
:004BD374 2BF0
sub esi, eax//在ESI暫存器中是要新增的字元個數,湊足24個字元
:004BD376 85F6
test esi, esi
:004BD378 7E23
jle 004BD39D
:004BD37A BB01000000 mov ebx,
00000001
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD39B(C)
|
:004BD37F 8D45DC
lea eax, dword ptr [ebp-24]
:004BD382 8B55EC
mov edx, dword ptr [ebp-14]
:004BD385 8A541AFF
mov dl, byte ptr [edx+ebx-01]
:004BD389 E8BA6BF4FF call
00403F48//序列新增字元的呼叫程式,把樣本字元中符合條件的新增到CC後面湊足24個字元
:004BD38E 8B55DC
mov edx, dword ptr [ebp-24]
:004BD391 8D45F4
lea eax, dword ptr [ebp-0C]
:004BD394 E88F6CF4FF call
00404028
:004BD399 43
inc ebx
:004BD39A 4E
dec esi //迴圈記數,直到湊足24個字元為止,這個新的字串就是用來生成註冊碼的輸入量
:004BD39B 75E2
jne 004BD37F
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004BD36D(C), :004BD378(C)
|
:004BD39D 8B45F4
mov eax, dword ptr [ebp-0C]
:004BD3A0 E87B6CF4FF call
00404020
:004BD3A5 83F818
cmp eax, 00000018
:004BD3A8 7E16
jle 004BD3C0;把字符集的資料新增到使用者名稱選
;取字元後,加24個字元。
:004BD3AA 8D45F4
lea eax, dword ptr [ebp-0C]
:004BD3AD 50
push eax
:004BD3AE B918000000 mov ecx,
00000018
:004BD3B3 BA01000000 mov edx,
00000001
:004BD3B8 8B45F4
mov eax, dword ptr [ebp-0C]
:004BD3BB E8686EF4FF call
00404228
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD3A8(C)
|
:004BD3C0 8D45F0
lea eax, dword ptr [ebp-10]
:004BD3C3 E8D869F4FF call
00403DA0
:004BD3C8 BB01000000 mov ebx,
00000001
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD44F(C)
|
:004BD3CD 8B45F4
mov eax, dword ptr [ebp-0C];生成的字串(使用者名稱+樣本字元選取)
:004BD3D0 8A4418FF
mov al, byte ptr [eax+ebx-01]
:004BD3D4 8845EB
mov byte ptr [ebp-15], al
:004BD3D7 8D45D8
lea eax, dword ptr [ebp-28]
:004BD3DA 8A55EB
mov dl, byte ptr [ebp-15]
:004BD3DD E8666BF4FF call
00403F48
:004BD3E2 8B45D8
mov eax, dword ptr [ebp-28];順序取出其中的每個字元。
:004BD3E5 8B55EC
mov edx, dword ptr [ebp-14];樣本字符集合地址
:004BD3E8 E81F6FF4FF call
0040430C;在樣本字符集合中查詢,該字元的位置
:004BD3ED 8BF0
mov esi, eax;ESI中為該字元在樣本字符集合中的偏移地址
:004BD3EF 8B45EC
mov eax, dword ptr [ebp-14];樣本集合地址
:004BD3F2 E8296CF4FF call
00404020;求樣本字符集合的長度
:004BD3F7 50
push eax;長度為0x20,32個,它將作為取模的模數
:004BD3F8 8BC6
mov eax, esi
:004BD3FA F7EE
imul esi;偏移位置求平方
:004BD3FC 2BC6
sub eax, esi;再把結果減去一個偏移地址
:004BD3FE 03C7
add eax, edi;edi中為上次的偏移位置,跟EAX求和。
:004BD400 5A
pop edx;樣本字符集合的長度,32個
:004BD401 8BCA
mov ecx, edx
:004BD403 99
cdq
:004BD404 F7F9
idiv ecx;把上一步的結果除以32,0X20
:004BD406 8BF2
mov esi, edx;把餘數放在esi中
:004BD408 46
inc esi;餘數再加1
:004BD409 8BFE
mov edi, esi
:004BD40B 8B45EC
mov eax, dword ptr [ebp-14];樣本字符集合地址
:004BD40E 8A4430FF
mov al, byte ptr [eax+esi-01];把集合中的該位置的字
;符取出,為註冊碼的一個字元。
:004BD412 8845EA
mov byte ptr [ebp-16], al
:004BD415 8D45D4
lea eax, dword ptr [ebp-2C]
:004BD418 8A55EA
mov dl, byte ptr [ebp-16]
:004BD41B E8286BF4FF call
00403F48
:004BD420 8B55D4
mov edx, dword ptr [ebp-2C]
:004BD423 8D45F0
lea eax, dword ptr [ebp-10]
:004BD426 E8FD6BF4FF call
00404028
:004BD42B 8BC3
mov eax, ebx
:004BD42D B906000000 mov ecx,
00000006;結果位置為6的倍數加'-'字元
:004BD432 99
cdq
:004BD433 F7F9
idiv ecx
:004BD435 85D2
test edx, edx
:004BD437 7512
jne 004BD44B
:004BD439 83FB18
cmp ebx, 00000018;
:004BD43C 7D0D
jge 004BD44B;
:004BD43E 8D45F0
lea eax, dword ptr [ebp-10]
:004BD441 BAD4D44B00 mov edx,
004BD4D4
:004BD446 E8DD6BF4FF call
00404028
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:004BD437(C), :004BD43C(C)
|
:004BD44B 43
inc ebx
:004BD44C 83FB19
cmp ebx, 00000019;比較註冊碼轉換完了嗎?
:004BD44F 0F8578FFFFFF jne 004BD3CD;沒完,跳到4BD3CD迴圈生成下一個註冊碼字元。
:004BD455 8B45F8
mov eax, dword ptr [ebp-08]
:004BD458 8B55F0
mov edx, dword ptr [ebp-10]
:004BD45B E89469F4FF call
00403DF4
:004BD460 33C0
xor eax, eax
:004BD462 5A
pop edx
:004BD463 59
pop ecx
:004BD464 59
pop ecx
:004BD465 648910
mov dword ptr fs:[eax], edx
* Possible StringData Ref from Code Obj ->"_^["
|
:004BD468 6897D44B00 push
004BD497
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD495(U)
|
:004BD46D 8D45D4
lea eax, dword ptr [ebp-2C]
:004BD470 BA05000000 mov edx,
00000005
:004BD475 E84A69F4FF call
00403DC4
:004BD47A 8D45EC
lea eax, dword ptr [ebp-14]
:004BD47D BA03000000 mov edx,
00000003
:004BD482 E83D69F4FF call
00403DC4
:004BD487 8D45FC
lea eax, dword ptr [ebp-04]
:004BD48A E81169F4FF call
00403DA0
:004BD48F C3
ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:004BD39B(C)
****************************************************************************
//以下的彙編程式段的作用是:把使用者輸入的使用者名稱序列化在樣本字符集合中進行查表,如
//使用者名稱字元在樣本字符集合中存在就把該字元記錄下來返回後儲存在陣列,若不在就返回
//EAX為零,不儲存。
:0040430C 85C0
test eax, eax//字元為0嗎?
:0040430E 7440
je 00404350
:00404310 85D2
test edx, edx//串存在嗎?
:00404312 7431
je 00404345
:00404314 53
push ebx
:00404315 56
push esi
:00404316 57
push edi
:00404317 89C6
mov esi, eax
:00404319 89D7
mov edi, edx
:0040431B 8B4FFC
mov ecx, dword ptr [edi-04]
:0040431E 57
push edi
:0040431F 8B56FC
mov edx, dword ptr [esi-04]
:00404322 4A
dec edx
:00404323 781B
js 00404340
:00404325 8A06
mov al, byte ptr [esi]
:00404327 46
inc esi
:00404328 29D1
sub ecx, edx
:0040432A 7E14
jle 00404340
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040433E(U)
|
:0040432C F2
repnz
:0040432D AE
scasb
:0040432E 7510
jne 00404340
:00404330 89CB
mov ebx, ecx
:00404332 56
push esi
:00404333 57
push edi
:00404334 89D1
mov ecx, edx
:00404336 F3
repz
:00404337 A6
cmpsb
:00404338 5F
pop edi
:00404339 5E
pop esi
:0040433A 740C
je 00404348//要記錄的字元。
:0040433C 89D9
mov ecx, ebx
:0040433E EBEC
jmp 0040432C
* Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00404323(C), :0040432A(C), :0040432E(C)
|
:00404340 5A
pop edx
:00404341 31C0
xor eax, eax
:00404343 EB08
jmp 0040434D
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404312(C)
|
:00404345 31C0
xor eax, eax
:00404347 C3
ret
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040433A(C)
|
:00404348 5A
pop edx
:00404349 89F8
mov eax, edi
:0040434B 29D0
sub eax, edx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00404343(U)
|
:0040434D 5F
pop edi
:0040434E 5E
pop esi
:0040434F 5B
pop ebx
* Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0040430E(C)
|
:00404350 C3
ret
後記:程式把使用者名稱和註冊號放在登錄檔中的
HKEY_CURRENT_USER\Software_Visicom Media\AceExpertFTP\Registration
序號產生器及原始碼附在後面
相關文章
- python菜鳥教程學習13:檔案操作2020-12-18Python
- 菜鳥教程python 學習進度2020-10-13Python
- 菜鳥不懂畫流程 功能圖請進2019-05-11
- python基礎教程|菜鳥教程2020-11-03Python
- Scala菜鳥進階之路一 基礎2021-09-09
- 【菜鳥教程筆記】Python字串2018-07-17筆記Python字串
- Linux“菜鳥”到“菜鳥的一些建議2020-10-15Linux
- 菜鳥教程 html測試一些問題2020-10-09HTML
- 菜鳥站長之家google賬號註冊申請圖文教程2020-11-01Go
- 一個菜鳥管理的學習和思考(一)2022-06-07
- c#入門教程(菜鳥級)2018-12-06C#
- 寫一個菜鳥裹裹小程式吧2018-11-30
- python菜鳥教程學習9:函式2020-11-26Python函式
- 一個菜鳥管理的學習和思考(二)2022-06-08
- ACE(01):Oracle ACE 申請2019-02-19Oracle
- 菜鳥求助!!!2019-12-03
- 遊戲菜鳥張一鳴2020-12-07遊戲
- C#、GIT詳細教程--菜鳥學院2019-02-20C#Git
- python菜鳥教程學習5: python運算子2020-11-23Python
- 【大神勿進菜鳥參考】Laravel6 passport API 一個使用者只有唯一 token2019-10-27LaravelPassportAPI
- 菜鳥市場2020-10-02
- python菜鳥教程學習3:基礎語法2020-11-17Python
- Vue.js編輯文字--菜鳥教程例項2020-11-18Vue.js
- python菜鳥教程學習1:背景性學習2020-11-15Python
- 菜鳥總結Kubernetes 搭建Flask+Mysql API教程2022-11-01FlaskMySqlAPI
- Mac菜鳥如何進階?記住7個Mac高效快捷鍵即可2021-12-17Mac
- Android菜鳥學習js筆記一2018-06-27AndroidJS筆記
- 菜鳥做 bomb lab 之第一關2019-05-14
- hashmap == 菜鳥驛站?2018-08-24HashMap
- 菜鳥看前端(Git)2020-11-21前端Git
- java菜鳥入門2020-10-16Java
- Linux菜鳥到老鳥的那些建議2020-10-15Linux
- 一個99年菜鳥研究生的疫情三年2023-01-18
- 【菜鳥教程筆記】python基礎之元組的使用2018-07-17筆記Python
- ESlint-菜鳥入門2018-11-16EsLint
- 菜鳥初嘗快速冪2018-12-05
- 跟著菜鳥學python2020-11-13Python
- 菜鳥也裝Linux(轉)2022-03-23Linux
- 阿里巴巴菜鳥Java一面11個問題,你會幾個呢?2019-01-29阿里Java