一個PostScript(RoPS)序號產生器分析。初學者看。 (21千字)
軟體名稱:Roger's PostScript(RoPS)
整理日期:2000.2.10最新版本:5.2c檔案大小:282KB軟體授權:共享軟體使用平臺:WinNT/2000/98Loadown address:
http://www.newhua.com.cn/down/rops52c.exe
CrackingBy: machoman[CCG] (China Cracking Group)
平臺 :win2000/98
使用工具 :Softice 4.05 for NT /98,ida 4.04 或者 wdasm32 推薦漢化版
預定目標 :學習寫簡單的序號產生器。
難度等級 :入門級J
結果:
Name: [CCG]
Users: 1
Key: 4e802402618f
破解過程:
這個軟體是一個讀取PostScript格式的電子文件的軟體,這種文件格式跟PDF文件格式一樣都需要專門的軟體才能開啟,這個軟體就是開啟.ps字尾文件的一個小軟體。它有30天的使用限制,如果過期會要求註冊才能使用。我們的目標就是要知道其註冊方法去找到註冊碼。以下的步驟就是達成這個目標所需要的步驟。你只要有耐心與興趣跟我一起一步一步的做,就可以體會到破解的樂趣。當然我希望不是噩夢,要是也沒辦法,小弟破解水平不但低,而且表達能力更是不敢恭維,要是看不下去了千萬要原諒小弟。只怪小弟才只讀了正規的9年書^_^。我儘量力爭寫詳細,只需要你具備一些很基礎的彙編知識。
首先在註冊框內輸入名字比如我最先輸入就是
Name : [CCG]
Users : 1
Key :31415926
這些輸入是很重要的,你在用Softice 除錯軟體跟蹤時需要時時參照這些值以觀察其發生的變化,進而分析出註冊演算法正確的結果。當這裡輸入完成後你不要馬上點OK,我想大家都可能沒有個個摸大獎的手氣。任意輸入就搞定註冊。這時就需要按住Ctrl+D調出強力除錯工具,比如Softice
。你的畫面切換到黑色的命令列介面,進來的目的就是要下斷點讓程式跑動起來後在註冊前停下來,讓我們能夠看見其計算註冊碼的過程。斷點的方式很多,對於windows的註冊輸入你一般可以使用
bpx GetWindowTextA
bpx GetDlgItemTextA
bpx hmemcpy
bpx LockMyTask
這些斷點。
對於這個軟體你可以使用
bpx GetDlgItemTextA下斷就可以阻止住程式跑動的腳步。
完成這個後你再用Ctrl+D又回到了windows 介面中,現在你就可以拿出吃奶的力氣按下OK鍵^_^。哈哈,發生了啥,程式被斷下在softice 的黑頭下了。你可以看見游標停止在User32!GetDlgItemTextA這裡。我們現在是在user32.dll這個程式空間中的,只需按F12鍵就會
回到軟體程式的空間見下面的星號部分。Mico$oft的windows作業系統就像其老闆一樣厚黑學學的好的很。臉皮是層一層的跟洋蔥頭一樣。你要是在win98平臺下用hmemcpy,lockmytask
這樣的斷點也可以斷下,不過那樣你把作業系統的臉皮扒的更乾淨,你就需要多用幾下F12才能到下面的位置,不過你要小心別按過頭喲,Cracker就是要膽大加心細的喲。你我要是跟老比爾一樣臉厚說最少也是個小土老財了。我看我們也不要妄想了,沒有發財的命。要不會幹破解,還不早就去花天酒地泡妹妹去了。還受破解這個窮罪個啥喲,只想哪天兄弟們能夠把破功提高到能跟[偽裝者]大峽一樣成為專業戶就就好了,嘿嘿,我這輩子是不要想了。嘿嘿不廢話了。到程式中來把游標停留在下面星號的位置,下邊的彙編程式碼是用ida4.04
抓出來的,跟在Softice 下看見的情況有些微差別,比如外邊傳遞過來的引數都用ebp+arg_**表示,而如果是內部變數就是ebp+var_***的方式表示。
PORT_1:
004361A9 push
[ebp+arg_8]
004361AC push
[ebp+arg_4]
004361AF push
[ebp+arg_0]
004361B2 push
dword ptr [ecx+1Ch]
004361B5 call
ds:GetDlgItemTextA *****************;這裡就是你F12回來的位置,程式在這裡的作用是把你輸入的使用者名稱提供給判斷程式
/*****打斷解釋一下:
這個函式在MSDN裡是這樣定義的
UINT GetDlgItemText( HWND hDlg, int nIDDlgItem, LPTSTR lpString, int nMaxCount);也就是說
其第三個引數lpString 也就是[ebp+arg_4]就是讀出你對話方塊中的輸入資訊的,不你可以在這時在
Softice下記憶體顯示命令
D ebp+0c(注:也就是ida 中004361ac push [ebp+arg_4])
0023:0012f27c A0 F2 12 00 13 00 00 00-8C F7 12 00 60 51 44 00
##########
然後在在我的機器上顯示資料的第一行是上邊所示,這個東西是間接定址的,你只需要再用一下D 命令顯示上邊記憶體中#號的資料的位置就可以看見如下了,注意記憶體中的資料是高位元組在後底位元組在前的
D 0012f2a0
0023:0012f2a0 5B 43 43 47 5D 00 50 00-D6 02 02 00 34 0E 81 00 [CCG].P…..4…
看看後邊的字元顯示不就是輸入的註冊名嗎?這裡的操作方式在Cracker程式時經常遇到。希望能學會多用D命令顯示記憶體這樣對你找到 有價值的東西
解釋結束*******/
004361BB jmp
short loc_4361CD
004361BD ; ---------------------------------------------------------------------------
004361BD
004361BD loc_4361BD:
; CODE XREF: sub_43619F+8 j
004361BD push
[ebp+arg_8]
004361C0 mov
edx, [eax]
004361C2 mov
ecx, eax
004361C4 push
[ebp+arg_4]
004361C7 push
[ebp+arg_0]
004361CA call
dword ptr [edx+78h]
004361CD
004361CD loc_4361CD:
; CODE XREF: sub_43619F+1C j
004361CD pop
ebp
004361CE retn
0Ch
你現在在程式中的一個子程式中,當用F10一步一步走過到4361ce或者用F12直接retrun時就會回到下面的主程式判斷部分
你可以用 softice 命令
BD *
清掉斷點,然後用
F8
一步一步走。
PORT_2:
/***************************************************************************/
004045E4 lea
eax, [ebp+var_28];使用者名稱的地址
004045E7 push
13h
004045E9 mov
esi, 0D9h
004045EE push
eax
004045EF mov
edi, ecx
004045F1 push
esi
004045F2 call
sub_43619F;這裡就是GetDlgItemText取name:[CCG]
;其地址放在[ebp_var_28]中
004045F7 lea
eax, [ebp+var_3C];你的游標回來後停留在這個位置
004045FA push
13h
004045FC push
eax
004045FD push
0DAh
00404602 mov
ecx, edi
00404604 call
sub_43619F;再次GetDlgItemText取user:1放進
; [Ebp+var_3c]這個位置
00404609 push
1
0040460B push
0
0040460D push
0DCh
00404612 mov
ecx, edi
00404614 call
sub_43616D;取你的測試註冊碼
00404619 push
eax;測試註冊碼
0040461A lea
eax, [ebp+var_14]
0040461D push
offset aD ; "%d"
00404622 push
eax
00404623 call
ds:wsprintfA;格式轉換
00404629 lea
eax, [ebp+var_14];31415926 Key,用Sofeice D命令可見
0040462C push
eax
0040462D lea
eax, [ebp+var_3C];1 user
00404630 push
eax
00404631 lea
eax, [ebp+var_28];[CCG] Name
00404634 push
eax
00404635 call
sub_401940;註冊碼演算法就在裡邊,嘿嘿,爆破手就
;在這裡打住,要想吃雞哪就需要跟進去
;Port3部分的彙編
0040463A add
esp, 18h
0040463D cmp
dword_44E168, 0;公德圓滿的話,這裡這個
;dword_44e168這個位置的資料為0,否則玩完
00404644 mov
dword_453670, eax
00404649 mov
[ebp+var_4], offset aThankYouForReg ; "Thank you for registering RoPS"
00404650 jz
short loc_40465B ;
00404652 mov
[ebp+var_4], offset aSorryThatKeySe ; "Sorry, that key / serial number doesn't"...
00404659 jmp
short loc_404664
0040465B ; ---------------------------------------------------------------------------
0040465B
0040465B loc_40465B:
; CODE XREF: sub_4045DC+74 j
0040465B push
1
0040465D mov
ecx, edi
0040465F call
sub_431C31
00404664
00404664 loc_404664:
; CODE XREF: sub_4045DC+7D j
00404664 mov
ecx, dword_45367C
0040466A push
0
0040466C push
offset aRegisterRops ; "Register RoPS"
00404671 push
[ebp+var_4]
00404674 call
sub_434BE4
00404679 mov
ecx, dword_45367C
0040467F call
sub_402C27
00404684 lea
eax, [ebp+var_28]
00404687 push
13h
00404689 push
eax
0040468A push
esi
0040468B mov
ecx, edi
0040468D call
sub_43619F
00404692 lea
eax, [ebp+var_28]
00404695 mov
esi, offset aRops_0 ; "rops"
0040469A push
eax
0040469B push
offset aReg ; "reg"
004046A0 push
esi
004046A1 call
sub_40154F
004046A6 lea
eax, [ebp+var_3C]
004046A9 push
eax
004046AA push
offset aKey ; "key"
004046AF push
esi
004046B0 call
sub_40154F
004046B5 lea
eax, [ebp+var_14]
004046B8 push
eax
004046B9 push
offset aUsers ; "users"
004046BE push
esi
004046BF call
sub_40154F
004046C4 add
esp, 24h
004046C7 pop
edi
004046C8 pop
esi
004046C9 leave
004046CA retn
004046CA sub_4045DC endp
004046CA
PORT 3演算法部分
00401940 ; ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
S U B R O U T I N E ¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦¦
00401940
00401940 ; Attributes: bp-based frame
00401940
00401940 sub_401940 proc near
; CODE XREF: sub_40176C+130 p
00401940
; sub_4045DC+59
p
00401940
00401940 var_44 = byte ptr -44h
00401940 var_30 = byte ptr -30h
00401940 var_1C = byte ptr -1Ch
00401940 var_8 = dword ptr -8
00401940 var_4 = dword ptr -4
00401940 arg_0 = dword ptr 8
00401940 arg_4 = dword ptr 0Ch
00401940 arg_8 = dword ptr 10h
00401940
00401940 push
ebp
00401941 mov
ebp, esp
00401943 sub
esp, 44h
00401946 and
[ebp+var_8], 0
0040194A push
ebx
0040194B mov
ebx, [ebp+arg_0];判斷第一個引數[CCG]
; Name的長度
0040194E mov
[ebp+var_4], 0Ch
00401955 push
ebx
00401956 call
_strlen;很明顯的執行庫函式
0040195B cmp
eax, 9;名字為長度為9嗎?
0040195E pop
ecx
0040195F jnz
short loc_401976;長度不為9跳走,下去繼續新判斷
00401961 push
ebx;把名字做為引數
00401962 call
sub_401AA6;長度為9的話繼續進這個地方去判斷
00401967 cmp
eax, 3C9h;比較這個函式得到的結果為3C9h嗎?
0040196C pop
ecx
0040196D jnz
short loc_401976;不是也跳走,下去繼續新判斷
0040196F xor
eax, eax;設定標誌,為合法。
00401971 jmp
loc_401AA3;餓嘿嘿,要是你名字剛好9個而且和為
;3c9的話,你就是合法了喲
00401976 ; ---------------------------------------------------------------------------
00401976
00401976 loc_401976:
; CODE XREF: sub_401940+1F j
00401976
; sub_401940+2D
j
00401976 push
ebx
00401977 call
_strlen
0040197C cmp
eax, 10h;你的名字長度為10h嗎?也就是16個字元
0040197F pop
ecx
00401980 jnz
short loc_4019CF;不是的話,還是進入下邊判斷
00401982 push
ebx;再次壓入使用者名稱,我的是[CCG],當然不會走到這
;裡,如果名字為16個字元的話,才會壓入
00401983 call
sub_401AA6;名字計算求和
00401988 cmp
eax, 630h;結果恰好為630h嗎?
0040198D pop
ecx
0040198E jnz
short loc_4019CF;如果不是,還是繼續跳要判斷註冊碼
;的
00401990 push
[ebp+arg_4];
00401993 lea
eax, [ebp+var_30]
00401996 push
eax
00401997 call
unknown_libname_1
0040199C lea
eax, [ebp+var_30]
0040199F push
2Dh
004019A1 push
eax
004019A2 call
_strchr
004019A7 add
esp, 10h
004019AA test
eax, eax
004019AC jnz
short loc_4019B6
004019AE or
eax, 0FFFFFFFFh
004019B1 jmp
loc_401AA3
004019B6 ; ---------------------------------------------------------------------------
004019B6
004019B6 loc_4019B6:
; CODE XREF: sub_401940+6C j
004019B6 and
byte ptr [eax], 0
004019B9 inc
eax
004019BA push
eax
004019BB lea
eax, [ebp+var_44]
004019BE push
eax
004019BF call
unknown_libname_1
004019C4 pop
ecx
004019C5 lea
eax, [ebp+var_44]
004019C8 pop
ecx
004019C9 lea
ebx, [ebp+var_30]
004019CC mov
[ebp+arg_4], eax
004019CF
004019CF loc_4019CF:
; CODE XREF: sub_401940+40 j
004019CF
; sub_401940+4E
j
004019CF push
[ebp+arg_4];你用D這個地址就可以知道是輸入的
;User :1這個部分
004019D2 call
__strlwr
004019D7 cmp
byte ptr [ebx], 0
004019DA pop
ecx
004019DB jnz
short loc_4019E4
004019DD and
byte ptr [ebx+1], 0
004019E1 mov
byte ptr [ebx], 20h
004019E4
004019E4 loc_4019E4:
; CODE XREF: sub_401940+9B j
004019E4 push
esi
004019E5 push
edi
004019E6 push
ebx
004019E7 call
_strlen;求字元的長度。
004019EC pop
ecx
004019ED mov
esi, eax;字元長度送esi
004019EF push
11h
004019F1 mov
ecx, esi;字元長度送ecx
004019F3 pop
edi;edi=11h
004019F4 cmp
esi, edi;比較字元長度等於11h就是17個嗎?
004019F6 jge
short loc_401A08;大於17個跳過去
//////////////////////////////////////////////////////////////////////////////////////////////////////////
004019F8
004019F8 loc_4019F8:
; CODE XREF: sub_401940+C6 j
004019F8 mov
eax, ecx;這裡是個迴圈,被除數為eax初始為使用者名稱
;我這裡name,[CCG]字元長度ecx=5,
004019FA cdq
004019FB idiv
esi ;esi是11hó17
004019FD mov
al, [edx+ebx];edx 中就是除法後的餘數,作為一個變
;址定址,在C中相當於一個指標,這
;裡把這個以ebx為基地址的記憶體的
;資料取出,放在al中
00401A00 mov
[ecx+ebx], al;然後把結果放在,使用者名稱字元後邊
00401A03 inc
ecx
00401A04 cmp
ecx, edi;已經附加到17個字元了嗎?
00401A06 jl
short loc_4019F8;沒有繼續迴圈
//////////////////////////////////////////////////////////////////////////////////////////////////////////
/**********再次打斷一下
在上邊////////部分裡的程式實際上是在你使用者名稱不大於17個時,把你的使用者名稱湊足17個,其方法是把你前邊的使用者名稱迴圈的加在後邊湊足17個,比如我輸入的[CCG]在這個迴圈結束時就會在記憶體中由最先的
“[CCG]”湊成” [CCG] [CCG] [CCG] [C”這樣的17個字元
用C可以這樣表示
int var,I;
char temp[18];
var=strlen(name);
for(var<17)
{
var=17/var+1;
for(I=0;I<var;I++)
strcat(temp,name);
}
***********打斷結束/
00401A08
00401A08 loc_401A08:
; CODE XREF: sub_401940+B6 j
00401A08 push
[ebp+arg_8]
00401A0B push
[ebp+arg_8];這下邊就是高潮了,現在壓的就是
;User 我的是1
00401A0E call
_strlen;求長度
00401A13 pop
ecx
00401A14 mov
ecx, ebx;上邊的17個字串的位置送ec
00401A16 sub ecx, eax;減去User長度
00401A18 add ecx, edi;再加上11h這裡就是把User從後邊附加覆蓋在
;字串中
00401A1A push ecx
00401A1B call unknown_libname_1;
/********打斷
程式經過這裡後最終形成的輸入字串就是
” [CCG] [CCG] [CCG] [1”
把User 覆蓋了最後一個字元,當你User有多個字元時,會向前覆蓋,但是當你字元個數大於9時,只覆蓋最後一個用0,表示。這些在Softice動態跟蹤時可以很好的看清楚
結束******/
00401A20 or byte ptr [ebx], 1
00401A23 pop ecx
00401A24 pop ecx
///////////////////////////////////////////////////////////////////////(最關鍵處)
00401A25 mov eax, 1F4h ;這裡就是最後的迴圈判斷,要迴圈500次
;1F4hó500嘛,夠多把
00401A2A
00401A2A loc_401A2A: ; CODE XREF: sub_401940+10F j
00401A2A mov ecx, [ebp+var_8] ;最初為0
00401A2D mov edx, [ebp+var_4];最初為0xc
00401A30 mov dl, [edx+ebx];變址把字元[temp+0xc]取出就是把17個
;字元中的第13個字元取出
00401A33 lea esi, [ecx+ebx];跟第一個相加
00401A36 add [esi], dl;跟第一個相加
00401A38 test ecx, ecx;比較ecx,為零嗎?
00401A3A jnz short loc_401A3F
00401A3C mov [ebp+var_8], edi;為零,把17個字元指向變元,讓下
;次迴圈時,改變指標位置
00401A3F
00401A3F loc_401A3F: ; CODE XREF: sub_401940+FA j
00401A3F cmp [ebp+var_4], 0;相加的字元位置為偏移0嗎?
00401A43 jnz short loc_401A48;不是就跳
00401A45 mov [ebp+var_4], edi;為零的話,指向最後一個字元edi=11h
00401A48
00401A48 loc_401A48: ; CODE XREF: sub_401940+103 j
00401A48 dec [ebp+var_8];被加的變元指標位置減一
00401A4B dec [ebp+var_4];加數指標也減一
00401A4E dec eax;迴圈變元減1,
00401A4F jnz short loc_401A2A還沒有到500次迴圈,繼續
///////////////////////////////////////////////////////////////////////
/********分析一下
程式在這/////////部分就是演算法,它是這樣處理的,在一個500次的迴圈中把字串按一個規律兩兩相加,
” [CCG] [CCG] [CCG] [1”
用C表示就是
int var1=0xc;//第一次加數字符的相對位置
int var2=1;
for( int I=0;I<500;I++)
{var2--;//被加數的相對位置,迴圈一次減1
temp[var2]=temp[var2]+temp[var1];//做加法
if(var2==0)
var2=0x11;//如果被加數為第一個字元,修改下次迴圈其指向最後一個字元
if (var1==0)
var1=0x11;//如果加數的位置為第一個字元,改變指標到最後一個字元
var1-- //迴圈減一
}
500次迴圈做完,得到的結果就是最後的註冊碼,就是取在陣列中的前6個Byte對應的數字
*********/
00401A51 mov esi, offset a0123456789abcd ; "0123456789abcdef"
00401A56 lea edi, [ebp+var_1C]
00401A59 movsd
00401A5A movsd
00401A5B movsd
00401A5C and dword_44E168, 0
00401A63 movsd
00401A64 movsb
00401A65 mov esi, [ebp+arg_4]
00401A68 xor edi, edi
00401A6A
00401A6A loc_401A6A: ; CODE XREF: sub_401940+15A j
00401A6A movzx eax, byte ptr [edi+ebx]
00401A6E mov dl, [esi]
00401A70 mov ecx, eax
00401A72 shr ecx, 4
00401A75 cmp dl, [ebp+ecx+var_1C]
00401A79 jnz short loc_401A8B ;right can’t jump
00401A7B mov cl, [esi+1]
00401A7E and eax, 0Fh
00401A81 cmp cl, [ebp+eax+var_1C];比較你的Key跟計算結果相等嗎?
00401A85 jnz short loc_401A8B;在這裡正確都不跳,
;不然就置錯誤標誌
00401A87 xor eax, eax;標誌0是正確
00401A89 jmp short loc_401A8E; must to there
00401A8B ; ---------------------------------------------------------------------------
00401A8B
00401A8B loc_401A8B: ; CODE XREF: sub_401940+139 j
00401A8B ; sub_401940+145 j
00401A8B push 1; 要是在這裡就錯了
00401A8D pop eax
00401A8E
00401A8E loc_401A8E: ; CODE XREF: sub_401940+149 j
00401A8E or dword_44E168, eax
00401A94 inc edi
00401A95 inc esi
00401A96 inc esi
00401A97 cmp edi, 6;比較前6個byte的資訊。
00401A9A jl short loc_401A6A;
00401A9C mov eax, dword_453670
00401AA1 pop edi
00401AA2 pop esi
00401AA3
00401AA3 loc_401AA3: ; CODE XREF: sub_401940+31 j
00401AA3 ; sub_401940+71 j
00401AA3 pop ebx
00401AA4 leave
00401AA5 retn
00401AA5 sub_401940 endp
00401AA5
程式將這些資訊寫入登錄檔的HLM\Software\Centipede\Rops\rops中,每次啟動時判斷。序號產生器付在後邊。
(轉貼請保持完整)
AllRight reserved :[CCG]
//VC 控制檯下注冊機
嘿嘿,小弟太菜。序號產生器中好多BVG,謝謝大哥指出。首先,陣列變數的
分配因該在主程式外邊,在裡邊定義會 在strcat(temp,name)時當名字
過長時,覆蓋資料為啥會出現這樣的情況小弟原因不明,希望哪個大哥指教;
第二,字元結尾要用0x00結束。不然會在後邊顯示一些怪字元.
第三,這個序號產生器不完美,還有些路沒有去走,嘿嘿,哪個大哥把他補全。
只希望初學者去走做,對於高手這個東西也太簡單了。大家一起學習。去走走看。
小弟獻醜了。
include<windows.h>
char name[100],user[10],temp[18],covert[13]; //BUG修改定義成全域性變數
int i,var,var1,var2;
BYTE lena,lenb;
main()
{
printf("[CCG] KeyGen\n");
printf("please input your name:\n");
scanf("%s",name);
getchar();
printf("please input user number:\n");
scanf("%s",user);
getchar();
var=strlen(name);
memset(temp,0x00,18);
if(var<17)
{
var=17/var+1;
for(i=0;i<var;i++)
strcat(temp,name);
}
else
strncpy(temp,name,17);
temp[17]=0x00;
var=strlen(user);
if(var>10)
temp[16]=0x30;
else
memcpy(&temp[17-var],user,var);
// printf("%s\n",temp);
var1=0xc;
var2=1;
for(i=0;i<500;i++)
{
var2--;
temp[var2]=temp[var2]+temp[var1];
if(var2==0)
var2=0x11;
if(var1==0)
var1=0x11;
var1--;
}
for(i=0;i<6;i++)
{
lena=(unsigned char)temp[i]/0x10;
lenb=(unsigned char)temp[i]&0xf;
if(lena<10)
covert[2*i]=lena+0x30;
else
covert[2*i]=lena+0x57;
if(lenb<10)
covert[2*i+1]=lenb+0x30;
else
covert[2*i+1]=lenb+0x57;
}
covert[12]=0x00; //BUG最後加上結尾不然會顯示錯誤
printf(" key is:%s",covert);
}
相關文章
- IrfanView 序號產生器分析(初級版)
(13千字)2015-11-15View
- 製作mIRC6.02序號產生器(給別人寫的初學者序號產生器教材) (14千字)2015-11-15
- WinAmp V2.11的序號產生器制分析(一)(初學者必讀) (12千字)2001-04-08
- 序號產生器制分析: (1千字)2001-11-19
- 分享一個navicat序號產生器2024-04-02
- winzip序號產生器 (1千字)2001-04-12
- 即時語音提示 &
校對軟體InsTalk註冊碼及序號產生器-初學者請看 (24千字)2002-04-13
- 美萍安全衛士V8.45序號產生器制作分析過程,及序號產生器! (11千字)2001-10-28
- 3DAxy貪吃蛇 AxySnake 破解與序號產生器 (21千字)2015-11-153D
- winzip的通用序號產生器 (2千字)2001-12-10
- 一個CrackMe的破解以及序號產生器的製作
(4千字)2001-08-16
- 序號產生器合集2024-03-17
- NewsReactor 1.0 Build 5009的序號產生器制分析 (16千字)2001-08-07ReactUI
- Turbo Note+ V4.4序號產生器制分析 (19千字)2001-11-07
- Gif2Swf Ver 2.1 TC20序號產生器 && MASM32序號產生器 (4千字)2001-12-10ASM
- supercapture3.0的版序號產生器!
(4千字)2002-04-23APT
- 另類序號產生器(一MFC程式的改造心得) (3千字)2001-09-10C程式
- 初學者請看! (2千字)2000-12-28
- SWF探索者XP 1.2(swfexplorer)破解+分析+序號產生器
(18千字)2002-04-14
- EmEditor V3.29和它的序號產生器 (12千字)2015-11-15
- Myeclipse 6.5 序號產生器2020-04-06Eclipse
- Advanced Dialer v2.5演算法分析(附序號產生器) (3千字)2002-04-17演算法
- 【原創】FileRecoveryAngel 演算法分析+序號產生器2015-11-15演算法
- HappyIcon序號產生器TC原始碼 (1千字)2001-04-08APP原始碼
- NetTalk破解與序號產生器(高手勿進) (10千字)2001-09-20
- 橋牌軟體Deep Finesse的序號產生器 (1千字)2015-11-15
- 好久沒來,貼個安全衛士序號產生器(masm6.0) (10千字)2001-12-05ASM
- Universe 1.63註冊碼生成分析及序號產生器原碼(上) (2千字)2001-11-12
- Kalua Cocktails 1.1完全破解,內附彙編序號產生器(用序號產生器編寫器,並有它的使用教程)
(22千字)2002-02-27AI
- win10如何執行序號產生器_win10怎麼執行序號產生器2020-08-28Win10
- 如何製作VB程式記憶體序號產生器--國內某軟體的序號產生器(隱去軟體資訊)
(14千字)2002-08-04記憶體
- Audio compositor註冊碼及序號產生器 (5千字)2002-04-06
- 用keymake制序號產生器實戰~高手莫入~~ (1千字)2001-09-30
- 破解accoustica
2.21(帶序號產生器)----讓高手見笑了:) (11千字)2002-03-31
- Resource
Builder 1.1.0 完全破解~~附彙編序號產生器 (10千字)2015-11-15UI
- 守財奴1.9註冊分析+序號產生器原始碼2015-11-15原始碼
- 網頁加密器(HTMLEncryptor1.1)破解及序號產生器 (1千字)2001-04-22網頁加密HTML
- 俠客系統修改器 V1.21 序號產生器 (2千字)2001-09-01