pediy系列――為程式新增顯示註冊碼的Messagebox
【目標程式】:電子筆記簿V2.52
【修改目的】:為程式新增顯示註冊碼的Messagebox
【修改型別】:Reverse Engineering
第一次做pediy的工作,沒有經驗,不足之處請各位指教!
為了新增程式碼和資料,先檢視一下Section Table,注意一下.text塊的RO為1000,VS為8794E,所以在1000+8794E=8894E後有大段的空白區,可以從這裡開始新增程式碼,且不超過1000+88000=89000位置。同樣,在AB000+7000=B2000處可以新增資料
。
Section Virtual Size Virtual Offset Raw Size Raw Offset Characteristics
.text 0008794E 00001000 00088000
00001000 60000020
.rdata 00021BFC
00089000 00022000 00089000 40000040
.data 0000D9A8 000AB000 00007000
000AB000 C0000040
.rsrc 00000E80
000B9000 00001000 000B2000 40000040
:0041A2F5
51 push
ecx
:0041A2F6 8BCC
mov ecx, esp
:0041A2F8 8965E8
mov dword ptr [ebp-18], esp
:0041A2FB 57
push edi
:0041A2FC
E8BD790400 call 00461CBE
:0041A301
51 push
ecx
:0041A302 C645FC02 mov
[ebp-04], 02
:0041A306 8BCC
mov ecx, esp
:0041A308 8965E4
mov dword ptr [ebp-1C], esp
:0041A30B 53
push
ebx
:0041A30C E8AD790400 call
00461CBE
:0041A311 B9381E4B00 mov
ecx, 004B1E38
:0041A316 C645FC01
mov [ebp-04], 01
:0041A31A E891CB0100
call 00436EB0//關鍵call,追進去!
:0041A31F 85C0
test eax, eax//成功與否的判斷
:0041A321
7519 jne
0041A33C
:0041A323 50
push eax
:0041A324 6A40
push 00000040
:0041A326 680A810000
push 0000810A
:0041A32B E800F2FEFF
call 00409530//失敗提示
:0041A330
83C40C add esp,
0000000C
:0041A333 8BCE
mov ecx, esi
:0041A335 E8153B0400
call 0045DE4F
:0041A33A EB70
jmp 0041A3AC
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A321(C)
|
:0041A33C
51 push
ecx//程式啟動時不經過這裡,所以在這兒插入Messagebox的呼叫,修改如下:
:0041A33D 8BCC
mov ecx, esp
:0041A33F 8965E4
mov dword ptr [ebp-1C],
esp
:0041A342 57
push edi
:0041A343 E876790400
call 00461CBE//成功提示
―――――――――――――――――――――――――――――――――――――――
修改後的程式碼:
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0041A321(C)
|
:0041A33C
6872894800 push 00488972
:0041A341
C3 ret//這裡跳到新增的程式碼處
:0041A342
57 push
edi
:0041A343 E876790400 call
00461CBE
:0041A348 51
push ecx
:0041A349 C645FC03
mov [ebp-04], 03
:0041A34D 8BCC
mov ecx, esp
以下是增加的程式碼:
:00488972
90 nop
:00488973
90 nop
:00488974
90 nop
:00488975
90 nop
:00488976
90 nop
:00488977
90 nop
:00488978
90 nop
:00488979
6A40 push
00000040//Messagebox型別
*
Possible StringData Ref from Data Obj ->"註冊碼"
|
:0048897B 68561B4B00
push 004B1B56//視窗標題入棧,這個標題我們放在資料區4B1B56(VA)處,佔七個位元組(包括‘\0')的“註冊碼”字串,這三個字的程式碼的獲得我會在最後講解。
:00488980
685D1B4B00 push 004B1B5D//真正的註冊碼入棧,地址在4B1B5D
:00488985
6A00 push
00000000
* Reference
To: USER32.MessageBoxA, Ord:01BEh
|
:00488987
FF1584964800 Call dword ptr [00489684]//Messagebox的呼叫程式碼可以從原程式的反彙編程式碼獲得,點選
函式->匯入,然後查詢Messageboxa
:0048898D 51
push ecx//這裡補上原來的程式程式碼
:0048898E 8BCC
mov ecx, esp
:00488990
8965E4 mov dword
ptr [ebp-1C], esp
:00488993 6842A34100
push 0041A342//從這裡返回
:00488998 C3
ret
―――――――――――――――――――――――――――――――――――
:0041A348
51 push
ecx
:0041A349 C645FC03 mov
[ebp-04], 03
:0041A34D 8BCC
mov ecx, esp
:0041A34F 8965E8
mov dword ptr [ebp-18], esp
**********************************************************************
call
00436EB0:
* Referenced by a CALL at Address:
|:0041A31A
|
:00436EB0
55 push
ebp
:00436EB1 8BEC
mov ebp, esp
:00436EB3 6AFF
push FFFFFFFF
:00436EB5 68B85B4800
push 00485BB8
:00436EBA 64A100000000
mov eax, dword ptr fs:[00000000]
:00436EC0
50 push
eax
:00436EC1 64892500000000 mov dword ptr
fs:[00000000], esp
:00436EC8 81EC60010000
sub esp, 00000160
:00436ECE 53
push ebx
:00436ECF 56
push esi
:00436ED0 57
push
edi
:00436ED1 8BF1
mov esi, ecx
:00436ED3 8965F0
mov dword ptr [ebp-10], esp
:00436ED6 8975E8
mov dword ptr [ebp-18],
esi
:00436ED9 8D4DDC
lea ecx, dword ptr [ebp-24]
:00436EDC C745FC01000000
mov [ebp-04], 00000001
:00436EE3 E87AAD0200
call 00461C62
:00436EE8 8BCE
mov ecx, esi
:00436EEA C645FC03
mov [ebp-04], 03
:00436EEE
E81D040000 call 00437310
:00436EF3
85C0 test
eax, eax
:00436EF5 8945EC
mov dword ptr [ebp-14], eax
:00436EF8 7509
jne 00436F03
:00436EFA C645FC01
mov [ebp-04], 01
:00436EFE
E9A5010000 jmp 004370A8
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00436EF8(C)
|
:00436F03
8D4508 lea eax,
dword ptr [ebp+08]
:00436F06 8BCE
mov ecx, esi
:00436F08 50
push eax
:00436F09 E812FFFFFF
call 00436E20
:00436F0E 85C0
test eax,
eax
:00436F10 7409
je 00436F1B
:00436F12 C645FC01
mov [ebp-04], 01
:00436F16 E98D010000
jmp 004370A8
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00436F10(C)
|
:00436F1B
8B4D08 mov ecx,
dword ptr [ebp+08]
:00436F1E B838383838
mov eax, 38383838
:00436F23 8DBD14FFFFFF
lea edi, dword ptr [ebp+FFFFFF14]
:00436F29 8B59F8
mov ebx, dword ptr [ecx-08]
:00436F2C
B932000000 mov ecx, 00000032
:00436F31
81FBC8000000 cmp ebx, 000000C8
:00436F37
F3 repz
:00436F38
AB stosd
:00436F39
7E05 jle
00436F40
:00436F3B BBC8000000 mov
ebx, 000000C8
* Referenced
by a (U)nconditional or (C)onditional Jump at Address:
|:00436F39(C)
|
:00436F40
53 push
ebx
:00436F41 8D4D08
lea ecx, dword ptr [ebp+08]
:00436F44 E830B40200
call 00462379
:00436F49 8BCB
mov ecx, ebx
:00436F4B 8BF0
mov esi,
eax
:00436F4D 8BD1
mov edx, ecx
:00436F4F 8DBD14FFFFFF
lea edi, dword ptr [ebp+FFFFFF14]
:00436F55 C1E902
shr ecx, 02
:00436F58 F3
repz
:00436F59
A5 movsd
:00436F5A
8BCA mov
ecx, edx
:00436F5C 83E103
and ecx, 00000003
:00436F5F F3
repz
:00436F60 A4
movsb
:00436F61 83CEFF
or esi, FFFFFFFF
:00436F64
8D4D08 lea ecx,
dword ptr [ebp+08]
:00436F67 56
push esi
:00436F68 E85BB40200
call 004623C8
:00436F6D 83FB0A
cmp ebx, 0000000A
:00436F70 7D21
jge 00436F93
:00436F72
B9C8000000 mov ecx, 000000C8
:00436F77
B838383838 mov eax, 38383838
:00436F7C
2BCB sub
ecx, ebx
:00436F7E 8DBC1D14FFFFFF lea edi,
dword ptr [ebp+ebx-000000EC]
:00436F85 8BD1
mov edx, ecx
:00436F87 C1E902
shr ecx, 02
:00436F8A F3
repz
:00436F8B
AB stosd
:00436F8C
8BCA mov
ecx, edx
:00436F8E 83E103
and ecx, 00000003
:00436F91 F3
repz
:00436F92 AA
stosb
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00436F70(C)
|
:00436F93
8BC3 mov
eax, ebx
:00436F95 8B7DEC
mov edi, dword ptr [ebp-14]
:00436F98 99
cdq
:00436F99 83E207
and edx, 00000007
:00436F9C
8D8D94FEFFFF lea ecx, dword ptr [ebp+FFFFFE94]
:00436FA2
03C2 add
eax, edx
:00436FA4 C1F803
sar eax, 03
:00436FA7 40
inc eax
:00436FA8 50
push eax
:00436FA9 8D8514FFFFFF
lea eax, dword ptr [ebp+FFFFFF14]
:00436FAF
50 push
eax
:00436FB0 57
push edi
:00436FB1 E81ACAFDFF
call 004139D0
:00436FB6 57
push edi
:00436FB7 E81EAC0200
call 00461BDA
:00436FBC 8B4D0C
mov ecx, dword ptr [ebp+0C]
:00436FBF
83C404 add esp,
00000004
:00436FC2 8B59F8
mov ebx, dword ptr [ecx-08]
:00436FC5 83FB0E
cmp ebx, 0000000E//這裡是對註冊碼長度的判斷,我已經把下面改為絕對跳轉
:00436FC8
EB1D jmp
00436FE7
:00436FCA C645FC01
mov [ebp-04], 01
:00436FCE E8CDAC0200
call 00461CA0
:00436FD3 8D4D08
lea ecx, dword ptr [ebp+08]
:00436FD6 C645FC00
mov [ebp-04], 00
:00436FDA
E86AAF0200 call 00461F49
:00436FDF
8975FC mov dword
ptr [ebp-04], esi
:00436FE2 E9D9000000
jmp 004370C0
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00436FC8(U)
|
:00436FE7
6A0E push
0000000E
:00436FE9 E8C3AB0200 call
00461BB1
:00436FEE 83C404
add esp, 00000004
:00436FF1 8D4D0C
lea ecx, dword ptr [ebp+0C]
:00436FF4 8BF8
mov edi,
eax
:00436FF6 6A0E
push 0000000E
:00436FF8 E87CB30200
call 00462379
:00436FFD 8B08
mov ecx, dword ptr [eax]
:00436FFF
8BD7 mov
edx, edi
:00437001 56
push esi
:00437002 890A
mov dword ptr [edx], ecx
:00437004 8B4804
mov ecx, dword ptr
[eax+04]
:00437007 894A04
mov dword ptr [edx+04], ecx
:0043700A 8B4808
mov ecx, dword ptr [eax+08]
:0043700D
894A08 mov dword
ptr [edx+08], ecx
:00437010 668B400C
mov ax, word ptr [eax+0C]
:00437014 8D4D0C
lea ecx, dword ptr [ebp+0C]
:00437017
6689420C mov word ptr [edx+0C],
ax
:0043701B E8A8B30200 call
004623C8
:00437020 33C0
xor eax, eax
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437030(U)
|
:00437022
3BC3 cmp
eax, ebx
:00437024 7D0C
jge 00437032
:00437026 8A1438
mov dl, byte ptr [eax+edi]
:00437029 80F238
xor dl, 38
:0043702C
881438 mov byte
ptr [eax+edi], dl
:0043702F 40
inc eax
:00437030 EBF0
jmp 00437022
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437024(C)
|
:00437032
6A00 push
00000000
:00437034 8D8D14FFFFFF lea
ecx, dword ptr [ebp+FFFFFF14]
:0043703A 57
push edi
:0043703B 51
push ecx
:0043703C
8B4DE8 mov ecx,
dword ptr [ebp-18]
:0043703F E87C050000
call 004375C0//判斷點,追進去!
:00437044 57
push edi
:00437045 8BD8
mov ebx, eax
:00437047
E88EAB0200 call 00461BDA
:0043704C
83C404 add esp,
00000004
:0043704F C645FC01
mov [ebp-04], 01
:00437053 E848AC0200
call 00461CA0
:00437058 8D4D08
lea ecx, dword ptr [ebp+08]
:0043705B C645FC00
mov [ebp-04], 00
:0043705F
E8E5AE0200 call 00461F49
:00437064
8D4D0C lea ecx,
dword ptr [ebp+0C]
:00437067 8975FC
mov dword ptr [ebp-04], esi
:0043706A E8DAAE0200
call 00461F49
:0043706F 8BC3
mov eax, ebx
:00437071
8B4DF4 mov ecx,
dword ptr [ebp-0C]
:00437074 64890D00000000 mov
dword ptr fs:[00000000], ecx
:0043707B 5F
pop edi
:0043707C 5E
pop esi
:0043707D
5B pop
ebx
:0043707E 8BE5
mov esp, ebp
:00437080 5D
pop ebp
:00437081 C20800
ret 0008
***********************************************************************
call
004375C0:
* Referenced by a CALL at Addresses:
|:0043703F , :004372AF
|
:004375C0 55
push ebp
:004375C1 8BEC
mov ebp, esp
:004375C3 6AFF
push FFFFFFFF
:004375C5
68285C4800 push 00485C28
:004375CA
64A100000000 mov eax, dword ptr fs:[00000000]
:004375D0
50 push
eax
:004375D1 64892500000000 mov dword ptr
fs:[00000000], esp
:004375D8 83EC18
sub esp, 00000018
:004375DB 53
push ebx
:004375DC 56
push esi
:004375DD
57 push
edi
:004375DE 8D4DDC
lea ecx, dword ptr [ebp-24]
:004375E1 8965F0
mov dword ptr [ebp-10], esp
:004375E4 E879A60200
call 00461C62
:004375E9 A1D8CF4A00
mov eax, dword ptr [004ACFD8]
:004375EE
8A0DDCCF4A00 mov cl, byte ptr [004ACFDC]
:004375F4
8B750C mov esi,
dword ptr [ebp+0C]
:004375F7 C745FC00000000 mov
[ebp-04], 00000000
:004375FE 8945E4
mov dword ptr [ebp-1C], eax
:00437601 C645FC01
mov [ebp-04], 01
:00437605 BF01000000
mov edi, 00000001
:0043760A
884DE8 mov byte
ptr [ebp-18], cl
:0043760D 33C0
xor eax, eax
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437623(U)
|
:0043760F
83F804 cmp eax,
00000004
:00437612 7D11
jge 00437625
:00437614 8A1430
mov dl, byte ptr [eax+esi]
:00437617 8A4C05E4
mov cl, byte ptr [ebp+eax-1C]
:0043761B
80F238 xor dl, 38
:0043761E
3ACA cmp
cl, dl//這裡是判斷註冊碼前四位是否為ENB-,所以把下面的判斷nop掉
:00437620 7544
jne 00437666//改為9090
―――――――――――――――――――――――――――――――――
修改後的程式碼:
:0043761E
3ACA cmp
cl, dl
:00437620 90
nop
:00437621 90
nop
:00437622 40
inc eax
―――――――――――――――――――――――――――――――――
:00437622
40 inc
eax
:00437623 EBEA
jmp 0043760F
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437612(C)
|
:00437625
85FF test
edi, edi//從這裡插入一段程式碼,在資料區存入"ENB-"這個字串,改動如下:
:00437627 743F
je 00437668
:00437629
8B4D08 mov ecx,
dword ptr [ebp+08]
:0043762C 33C0
xor eax, eax
――――――――――――――――――――――――――――――――――
修改後的程式碼:
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437612(C)
|
:00437625
85FF test
edi, edi
:00437627 685B894800 push
0048895B//跳到插入程式碼區
:0043762C C3
ret
:0043762D
90 nop
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437664(U)
|
:0043762E
83F80A cmp eax,
0000000A
:00437631 7D35
jge 00437668
下面是.text塊新增的程式碼:
:0048895B
743F je 0048899C//補上原程式中的程式碼
:0048895D
8B4D08 mov ecx,
dword ptr [ebp+08]
:00488960 33C0
xor eax, eax
:00488962 C7055D1B4B00454E422D
mov dword ptr [004B1B5D], 2D424E45//在資料區存入"ENB-"
:0048896C
682E764300 push 0043762E//返回
:00488971
C3 ret
――――――――――――――――――――――――――――――――――
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:00437664(U)
|
:0043762E
83F80A cmp eax,
0000000A
:00437631 7D35
jge 00437668
:00437633 8A1408
mov dl, byte ptr [eax+ecx]
:00437636 80E27F
and dl, 7F
:00437639
80FA41 cmp dl, 41
:0043763C
881408 mov byte
ptr [eax+ecx], dl
:0043763F 7D06
jge 00437647
:00437641 80CA41
or dl, 41
:00437644 881408
mov byte ptr [eax+ecx],
dl
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0043763F(C)
|
:00437647
8A1408 mov dl, byte
ptr [eax+ecx]
:0043764A 80FA5A
cmp dl, 5A
:0043764D 7E06
jle 00437655
:0043764F 80E25A
and dl, 5A
:00437652 881408
mov byte ptr [eax+ecx],
dl
* Referenced by a
(U)nconditional or (C)onditional Jump at Address:
|:0043764D(C)
|
:00437655
8A543004 mov dl, byte ptr
[eax+esi+04]
:00437659 8A1C08
mov bl, byte ptr [eax+ecx]
:0043765C 80F238
xor dl, 38
:0043765F 3ADA
cmp bl, dl//上面這段演算法產生註冊碼後十位並比較,由於這裡是直接與真碼逐位比較,所以要設法把真碼的每一位儲存下來,最後呼叫一個Messagebox來顯示,但這個呼叫不能放在這裡,因為軟體每次啟動時都要呼叫這個call來驗證註冊碼,把Messagebox插在這裡每次啟動都會彈出。所以在這裡要插入的就是把真碼儲存的程式碼。我在資料區找了一個地方4B1B61,這裡我們先讓程式跳到新增的程式碼處:
―――――――――――――――――――――――――――――――――
修改後的程式碼:
*
Referenced by a (U)nconditional or (C)onditional Jump at Address:
|:0043764D(C)
|
:00437655
8A543004 mov dl, byte ptr
[eax+esi+04]
:00437659 8A1C08
mov bl, byte ptr [eax+ecx]
:0043765C 684E894800
push 0048894E
:00437661 C3
ret//這兩步跳到新增的程式碼處
:00437662
90 nop
:00437663
40 inc
eax
:00437664 EBC8
jmp 0043762E
:00437666 33FF
xor edi, edi
以上是在原始碼中的改動,下面是加在原.text塊末尾的程式碼,從48894E處開始,執行結束後返回:
:0048894E
8898611B4B00 mov byte ptr [eax+004B1B61],
bl
:00488954 90
nop
:00488955 6863764300
push 00437663
:0048895A C3
ret
―――――――――――――――――――――――――――――――――
:00437661
7503 jne
00437666
:00437663 40
inc eax
:00437664 EBC8
jmp 0043762E
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00437620(C),
:00437661(C)
|
:00437666 33FF
xor edi, edi
*
Referenced by a (U)nconditional or (C)onditional Jump at Addresses:
|:00437627(C),
:00437631(C)
|
:00437668 8B4510
mov eax, dword ptr [ebp+10]
:0043766B 85C0
test eax, eax
:0043766D
7406 je 00437675
:0043766F
893D5C454B00 mov dword ptr [004B455C],
edi
* Referenced by
a (U)nconditional or (C)onditional Jump at Address:
|:0043766D(C)
|
:00437675
C745FCFFFFFFFF mov [ebp-04], FFFFFFFF
:0043767C
E81FA60200 call 00461CA0
:00437681
8BC7 mov
eax, edi
:00437683 8B4DF4
mov ecx, dword ptr [ebp-0C]
:00437686 64890D00000000
mov dword ptr fs:[00000000], ecx
:0043768D 5F
pop edi
:0043768E
5E pop
esi
:0043768F 5B
pop ebx
:00437690 8BE5
mov esp, ebp
:00437692 5D
pop ebp
:00437693 C20C00
ret 000C
*****************************************************************
最後講一下如何取得字串“註冊碼”在記憶體中的形式
在輸入註冊碼時,我們注意到如果輸入的註冊碼是錯誤的,程式會彈出一個Messagebox說:註冊號碼不對!
我們就從這個Messagebox的引數入手來取得“註冊號碼”的存放形式。
下斷點bpx
Messageboxa來到下面的地方:
* Referenced by a (U)nconditional or (C)onditional Jump
at Address:
|:0046CA9A(U)
|
:0046CAB6 53
push ebx
:0046CAB7 57
push edi
:0046CAB8
FF7508 push [ebp+08]//這裡壓入lpText,用d
*(ebp+8)檢視,得到
0187:01234700
D7 A2 B2 E1 BA C5 C2 E0
這就是“註冊號碼”在記憶體中的形式,我們把第1、2、3、4、7、8個位元組複製到000B1B56(Raw
Offset)處
:0046CABB FF75F4 push [ebp-0C]
*
Reference To: USER32.MessageBoxA, Ord:01BEh
|
:0046CABE
FF1584964800 Call dword ptr [00489684]
:0046CAC4
85F6 test
esi, esi
:0046CAC6 8BF8
mov edi, eax
:0046CAC8 7405
je 0046CACF
:0046CACA 8B45F8
mov eax, dword ptr [ebp-08]
:0046CACD
8906 mov
dword ptr [esi], eax
這樣我們就完成了對程式的修改。執行一下試試!
cyclotron
2003.4.26
相關文章
- kaggle 註冊不顯示機器人驗證碼2024-06-11機器人
- VisualStudio 2022 如何顯示 dotnet 6 及以上版本的框架的程式碼註釋為中文2024-09-12框架
- Laravel 6.x 為註冊或登入元件新增驗證碼2019-10-30Laravel元件
- AI為Spring Boot整個程式碼庫新增了註釋2024-02-27AISpring Boot
- Dubbo系列之 (二)Registry註冊中心-註冊(1)2020-08-09
- Dubbo系列之 (二)Registry註冊中心-註冊(2)2020-08-13
- Laravel5.8 入門系列三,新增註冊郵箱驗證2019-09-08Laravel
- 為javaweb的頁面、html新增網站圖示簡單程式碼2018-03-27JavaWebHTML網站
- gitee(碼雲)的註冊和程式碼提交【手把手】2024-04-28Gitee
- Netty系列(四):NioServerSocketChannel註冊2019-02-10NettyiOSServer
- oracle 12c 新增的LREG程式及其動態註冊的過程2020-01-17Oracle
- Dynamics CRM 用程式碼註冊Plugin Step2018-07-20Plugin
- VMware註冊碼2018-10-18
- PhpStorm註冊碼2020-04-07PHPORM
- Micro原始碼系列 - Go-Micro服務是如何註冊的2019-07-03原始碼Go
- qt 使用qmake pro檔案新增 ico圖示,程式執行時顯示圖示,exe也顯示圖示2024-08-05QT
- PowerDesigner顯示註釋列2018-03-20
- 將windows應用程式註冊為windows服務2020-04-05Windows
- 解決Hive使用desc顯示中文註釋亂碼2018-05-12Hive
- Viscosity for Mac 註冊碼:2019-09-19Mac
- Navicat for MySQL註冊碼2020-04-07MySql
- ShadowDefender 註冊碼 分析2024-08-17
- 程式碼編輯器:sublime text for Mac 註冊版2023-12-28Mac
- webapi 配置介面註釋顯示2024-06-02WebAPI
- cnode系列之登陸註冊功能2019-03-03
- 註冊中心 Eureka 原始碼解析 —— 應用例項註冊發現(一)之註冊2019-03-03原始碼
- JavaScript年月日日期顯示程式碼2018-07-04JavaScript
- MYSQL程式碼顯示測試測試2021-09-09MySql
- 【SpringCloud】consul註冊中心註冊的服務為內網(區域網)IP2020-11-21SpringGCCloud內網
- phpstrom 註冊碼獲取2018-05-23PHP
- PLSQL Developer 12 註冊碼2018-06-07SQLDeveloper
- wing ftp server 註冊碼2020-11-23FTPServer
- php 隨機顯示圖片的函式程式碼2021-09-09PHP隨機函式
- etcd套路(九)註冊服務中心程式碼封裝2020-08-27封裝
- 直播平臺開發,jsp登入註冊程式碼2022-12-23JS
- 登陸註冊頁面html程式碼(仿知乎)2020-12-08HTML
- sublime text for Mac註冊啟用 sublime text4註冊碼2023-10-11Mac
- Redis中文顯示為Unicode編碼 亂碼的解決辦法2021-09-06RedisUnicode
- Dubbo:Nacos作為註冊中心2019-06-03