錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù),錦州廣廈維修電腦,公司IT外包服務(wù)
topFlag1 設(shè)為首頁
topFlag3 收藏本站
 
maojin003 首 頁 公司介紹 服務(wù)項(xiàng)目 服務(wù)報(bào)價(jià) 維修流程 IT外包服務(wù) 服務(wù)器維護(hù) 技術(shù)文章 常見故障
錦州市廣廈電腦維修|上門維修電腦|上門做系統(tǒng)|0416-3905144熱誠服務(wù)技術(shù)文章
考無憂2017離線注冊(cè)算法分析(注冊(cè)機(jī)已刪除)

作者: 肥牛  日期:2017-06-02 16:29:52   來源: 本站整理

看了zjy-geek的帖子“考無憂2017 離線注冊(cè) 破解 入門教程”,里面寫到如何跟蹤出的注冊(cè)碼,但是并沒有分析出注冊(cè)碼的算法。
所以,我接著那個(gè)帖子,繼續(xù)分析注冊(cè)碼是怎么算出來的,這樣也許對(duì)新人更有幫助一些。
考無憂2017是用DELPHI XE2寫的,所以還是習(xí)慣性的用IDR做分析。其中涉及到注冊(cè)碼算法的部分,我用OD做了跟蹤,并且寫了注釋,方便大家的理解。
首先,按照原貼中,斷網(wǎng),注冊(cè)轉(zhuǎn)入離線注冊(cè)。這里需要輸入的內(nèi)容如下圖:
 
考生姓名,手機(jī)號(hào),郵箱等都是隨便輸?shù)模浖矝]有做合法性的判斷。
注冊(cè)碼一定要輸入25位,不符合條件軟件會(huì)給出相應(yīng)的提示。
注冊(cè)科目是軟件自動(dòng)填好的,因?yàn)槲蚁螺d的是winxp的卷子,所以這里的科目就是winxp。
機(jī)器碼也是軟件自動(dòng)填好的。
剩下的事情就是我們自己輸入離線注冊(cè)碼了。
在IDR中,查看離線注冊(cè)按鈕的點(diǎn)擊事件。

[Asm] 純文本查看 復(fù)制代碼
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
179
180
181
182
183
184
185
186
187
188
189
190
191
192
193
194
195
196
197
198
199
200
201
202
203
204
205
206
207
208
209
210
211
212
213
214
215
216
217
218
219
220
221
222
223
224
225
226
227
228
229
230
231
232
233
234
235
236
237
238
239
240
241
242
243
244
245
246
247
248
249
250
251
252
253
254
255
256
257
258
259
260
261
262
263
264
265
266
267
268
269
270
271
272
273
274
275
276
277
278
279
280
281
282
283
284
285
286
287
288
289
290
291
292
293
294
295
296
297
298
299
300
301
302
303
304
305
306
307
308
309
310
311
312
313
314
315
316
317
318
319
320
321
322
323
324
325
326
327
328
329
330
331
register.TregisterForm.BitmapButton5Click
00893A00        push        ebp
00893A01        mov         ebp,esp
00893A03        mov         ecx,11
00893A08        push        0
00893A0A        push        0
00893A0C        dec         ecx
00893A0D>       jne         00893A08
00893A0F        push        ecx
00893A10        push        ebx
00893A11        mov         ebx,eax
00893A13        xor         eax,eax
00893A15        push        ebp
00893A16        push        893EFB
00893A1B        push        dword ptr fs:[eax]
00893A1E        mov         dword ptr fs:[eax],esp
00893A21        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893A28        push        eax
00893A29        lea         eax,[ebp-4]
00893A2C        push        eax
00893A2D        lea         edx,[ebp-8]
00893A30        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit        //Edit6就是我們輸入的離線注冊(cè)碼
00893A36        call        TControl.GetText
00893A3B        mov         eax,dword ptr [ebp-8]
00893A3E        xor         ecx,ecx
00893A40        mov         edx,893F1C;' '
00893A45        call        StringReplace                                //去掉空格
00893A4A        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893A51        push        eax
00893A52        lea         eax,[ebp-4]
00893A55        push        eax
00893A56        lea         edx,[ebp-0C]
00893A59        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893A5F        call        TControl.GetText
00893A64        mov         eax,dword ptr [ebp-0C]
00893A67        xor         ecx,ecx
00893A69        mov         edx,893F2C;' '
00893A6E        call        StringReplace                                //去掉全角空格
00893A73        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893A7A        push        eax
00893A7B        lea         eax,[ebp-4]
00893A7E        push        eax
00893A7F        lea         edx,[ebp-10]
00893A82        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893A88        call        TControl.GetText
00893A8D        mov         eax,dword ptr [ebp-10]
00893A90        mov         ecx,893F3C;'0'
00893A95        mov         edx,893F4C;'o'
00893A9A        call        StringReplace                                //把小寫字母o換成0
00893A9F        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893AA6        push        eax
00893AA7        lea         eax,[ebp-4]
00893AAA        push        eax
00893AAB        lea         edx,[ebp-14]
00893AAE        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893AB4        call        TControl.GetText
00893AB9        mov         eax,dword ptr [ebp-14]
00893ABC        mov         ecx,893F3C;'0'
00893AC1        mov         edx,893F5C;'o'
00893AC6        call        StringReplace                                //把全角小寫字母o換成0
00893ACB        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893AD2        push        eax
00893AD3        lea         eax,[ebp-4]
00893AD6        push        eax
00893AD7        lea         edx,[ebp-18]
00893ADA        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893AE0        call        TControl.GetText
00893AE5        mov         eax,dword ptr [ebp-18]
00893AE8        mov         ecx,893F3C;'0'
00893AED        mov         edx,893F6C;'O'
00893AF2        call        StringReplace                                //把大寫字母O換成0
00893AF7        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893AFE        push        eax
00893AFF        lea         eax,[ebp-4]
00893B02        push        eax
00893B03        lea         edx,[ebp-1C]
00893B06        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893B0C        call        TControl.GetText
00893B11        mov         eax,dword ptr [ebp-1C]
00893B14        mov         ecx,893F3C;'0'
00893B19        mov         edx,893F7C;'O'
00893B1E        call        StringReplace                                //把全角大寫字母O換成0
00893B23        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893B2A        push        eax
00893B2B        lea         eax,[ebp-4]
00893B2E        push        eax
00893B2F        lea         edx,[ebp-20]
00893B32        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893B38        call        TControl.GetText
00893B3D        mov         eax,dword ptr [ebp-20]
00893B40        mov         ecx,893F8C;'-'
00893B45        mov         edx,893F9C;'_'
00893B4A        call        StringReplace                                //把下劃線換成減號(hào)-
00893B4F        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893B56        push        eax
00893B57        lea         eax,[ebp-4]
00893B5A        push        eax
00893B5B        lea         edx,[ebp-24]
00893B5E        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893B64        call        TControl.GetText
00893B69        mov         eax,dword ptr [ebp-24]
00893B6C        mov         ecx,893F8C;'-'
00893B71        mov         edx,893FAC;'——'                                //把破折號(hào)換成減號(hào)-
00893B76        call        StringReplace
00893B7B        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893B82        push        eax
00893B83        lea         eax,[ebp-4]
00893B86        push        eax
00893B87        lea         edx,[ebp-28]
00893B8A        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893B90        call        TControl.GetText
00893B95        mov         eax,dword ptr [ebp-28]
00893B98        mov         ecx,893F8C;'-'
00893B9D        mov         edx,893FC0;'—'                                //把全角橫線線換成減號(hào)-
00893BA2        call        StringReplace
00893BA7        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893BAE        push        eax
00893BAF        lea         eax,[ebp-4]
00893BB2        push        eax
00893BB3        lea         edx,[ebp-2C]
00893BB6        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893BBC        call        TControl.GetText
00893BC1        mov         eax,dword ptr [ebp-2C]
00893BC4        mov         ecx,893F8C;'-'
00893BC9        mov         edx,893FD0;'-'                                //把全角減號(hào)換成減號(hào)-
00893BCE        call        StringReplace
00893BD3        movzx       eax,byte ptr ds:[893F0C];0x1 gvar_00893F0C
00893BDA        push        eax
00893BDB        lea         eax,[ebp-4]
00893BDE        push        eax
00893BDF        lea         edx,[ebp-30]
00893BE2        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893BE8        call        TControl.GetText
00893BED        mov         eax,dword ptr [ebp-30]
00893BF0        mov         ecx,893F8C;'-'
00893BF5        mov         edx,893FE0;'_'
00893BFA        call        StringReplace                                //把下劃線換成減號(hào)-
00893BFF        lea         ecx,[ebp-34]
00893C02        mov         edx,dword ptr [ebp-4]
00893C05        mov         eax,[007944CC];TZhou
00893C0A        call        TZhou.sbctoDbc
00893C0F        mov         edx,dword ptr [ebp-34]
00893C12        lea         eax,[ebp-4]
00893C15        call        @UStrLAsg
00893C1A        lea         edx,[ebp-38]
00893C1D        mov         eax,dword ptr [ebp-4]
00893C20        call        AnsiUpperCase
00893C25        mov         edx,dword ptr [ebp-38]
00893C28        lea         eax,[ebp-4]
00893C2B        call        @UStrLAsg
00893C30        mov         edx,dword ptr [ebp-4]
00893C33        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893C39        call        TControl.SetText
00893C3E        lea         edx,[ebp-3C]
00893C41        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893C47        call        TControl.GetText
00893C4C        cmp         dword ptr [ebp-3C],0
00893C50>       jne         00893C7D
00893C52        push        0
00893C54        mov         ecx,893FE4
00893C59        mov         edx,893FF0
00893C5E        mov         eax,[009295CC];^Application:TApplication
00893C63        mov         eax,dword ptr [eax]
00893C65        call        TApplication.MessageBox
00893C6A        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893C70        mov         edx,dword ptr [eax]
00893C72        call        dword ptr [edx+0F4];TWinControl.SetFocus
00893C78>       jmp         00893E54
00893C7D        call        00892D40                                //這里是判斷函數(shù)
                                                                //理由,第一,這個(gè)CALL后面就是判斷加跳轉(zhuǎn);
                                                                //第二,這個(gè)跳轉(zhuǎn)的地址也在這個(gè)段,所以應(yīng)該是判斷注冊(cè)碼的地方。
00893C82        cmp         dword ptr ds:[0A343D4],1;gvar_00A343D4
00893C89>       jne         00893E2E
00893C8F        lea         edx,[ebp-4C]
00893C92        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893C98        call        TControl.GetText
00893C9D        mov         eax,dword ptr [ebp-4C]
00893CA0        lea         edx,[ebp-48]
00893CA3        call        EncodeString
00893CA8        mov         eax,dword ptr [ebp-48]
00893CAB        lea         edx,[ebp-44]
00893CAE        call        0043121C
00893CB3        mov         ecx,dword ptr [ebp-44]
00893CB6        lea         eax,[ebp-40]
00893CB9        mov         edx,894010;'update user set Rcode='
00893CBE        call        @UStrCat3
00893CC3        mov         edx,dword ptr [ebp-40]
00893CC6        mov         eax,[0092946C];^gvar_00A345C8:TCtl
00893CCB        mov         eax,dword ptr [eax]
00893CCD        call        TCtl.exeSQLStatement
00893CD2        lea         edx,[ebp-5C]
00893CD5        mov         eax,dword ptr [ebx+3C4];TregisterForm.Edit1:TEdit
00893CDB        call        TControl.GetText
00893CE0        mov         eax,dword ptr [ebp-5C]
00893CE3        lea         edx,[ebp-58]
00893CE6        call        EncodeString
00893CEB        mov         eax,dword ptr [ebp-58]
00893CEE        lea         edx,[ebp-54]
00893CF1        call        0043121C
00893CF6        mov         ecx,dword ptr [ebp-54]
00893CF9        lea         eax,[ebp-50]
00893CFC        mov         edx,89404C;'update user set Acode='
00893D01        call        @UStrCat3
00893D06        mov         edx,dword ptr [ebp-50]
00893D09        mov         eax,[0092946C];^gvar_00A345C8:TCtl
00893D0E        mov         eax,dword ptr [eax]
00893D10        call        TCtl.exeSQLStatement
00893D15        lea         edx,[ebp-6C]
00893D18        mov         eax,dword ptr [ebx+3B8];TregisterForm.Edit2:TEdit
00893D1E        call        TControl.GetText
00893D23        mov         eax,dword ptr [ebp-6C]
00893D26        lea         edx,[ebp-68]
00893D29        call        Trim
00893D2E        mov         eax,dword ptr [ebp-68]
00893D31        lea         edx,[ebp-64]
00893D34        call        0043121C
00893D39        mov         ecx,dword ptr [ebp-64]
00893D3C        lea         eax,[ebp-60]
00893D3F        mov         edx,894088;'update user set Name='
00893D44        call        @UStrCat3
00893D49        mov         edx,dword ptr [ebp-60]
00893D4C        mov         eax,[0092946C];^gvar_00A345C8:TCtl
00893D51        mov         eax,dword ptr [eax]
00893D53        call        TCtl.exeSQLStatement
00893D58        lea         edx,[ebp-7C]
00893D5B        mov         eax,dword ptr [ebx+3BC];TregisterForm.Edit4:TEdit
00893D61        call        TControl.GetText
00893D66        mov         eax,dword ptr [ebp-7C]
00893D69        lea         edx,[ebp-78]
00893D6C        call        Trim
00893D71        mov         eax,dword ptr [ebp-78]
00893D74        lea         edx,[ebp-74]
00893D77        call        0043121C
00893D7C        mov         ecx,dword ptr [ebp-74]
00893D7F        lea         eax,[ebp-70]
00893D82        mov         edx,8940C0;'update user set Phone='
00893D87        call        @UStrCat3
00893D8C        mov         edx,dword ptr [ebp-70]
00893D8F        mov         eax,[0092946C];^gvar_00A345C8:TCtl
00893D94        mov         eax,dword ptr [eax]
00893D96        call        TCtl.exeSQLStatement
00893D9B        lea         edx,[ebp-8C]
00893DA1        mov         eax,dword ptr [ebx+3C0];TregisterForm.Edit5:TEdit
00893DA7        call        TControl.GetText
00893DAC        mov         eax,dword ptr [ebp-8C]
00893DB2        lea         edx,[ebp-88]
00893DB8        call        Trim
00893DBD        mov         eax,dword ptr [ebp-88]
00893DC3        lea         edx,[ebp-84]
00893DC9        call        0043121C
00893DCE        mov         ecx,dword ptr [ebp-84]
00893DD4        lea         eax,[ebp-80]
00893DD7        mov         edx,8940FC;'update user set Email='
00893DDC        call        @UStrCat3
00893DE1        mov         edx,dword ptr [ebp-80]
00893DE4        mov         eax,[0092946C];^gvar_00A345C8:TCtl
00893DE9        mov         eax,dword ptr [eax]
00893DEB        call        TCtl.exeSQLStatement
00893DF0        push        0
00893DF2        mov         ecx,893FE4
00893DF7        mov         edx,89412C
00893DFC        mov         eax,[009295CC];^Application:TApplication
00893E01        mov         eax,dword ptr [eax]
00893E03        call        TApplication.MessageBox
00893E08        mov         eax,[0092946C];^gvar_00A345C8:TCtl
00893E0D        mov         eax,dword ptr [eax]
00893E0F        call        TCtl.clearTryHistroy
00893E14        push        1
00893E16        push        894154;'start.exe'
00893E1B        call        kernel32.WinExec
00893E20        mov         eax,[009295CC];^Application:TApplication
00893E25        mov         eax,dword ptr [eax]
00893E27        call        TApplication.Terminate
00893E2C>       jmp         00893E54
00893E2E        push        0
00893E30        mov         ecx,893FE4
00893E35        mov         edx,894160
00893E3A        mov         eax,[009295CC];^Application:TApplication
00893E3F        mov         eax,dword ptr [eax]
00893E41        call        TApplication.MessageBox
00893E46        mov         eax,dword ptr [ebx+3D0];TregisterForm.Edit6:TEdit
00893E4C        mov         edx,dword ptr [eax]
00893E4E        call        dword ptr [edx+0F4];TWinControl.SetFocus
00893E54        xor         eax,eax
00893E56        pop         edx
00893E57        pop         ecx
00893E58        pop         ecx
00893E59        mov         dword ptr fs:[eax],edx
00893E5C        push        893F05
00893E61        lea         eax,[ebp-8C]
00893E67        call        @UStrClr
00893E6C        lea         eax,[ebp-88]
00893E72        mov         edx,3
00893E77        call        @UStrArrayClr
00893E7C        lea         eax,[ebp-7C]
00893E7F        call        @UStrClr
00893E84        lea         eax,[ebp-78]
00893E87        mov         edx,3
00893E8C        call        @UStrArrayClr
00893E91        lea         eax,[ebp-6C]
00893E94        call        @UStrClr
00893E99        lea         eax,[ebp-68]
00893E9C        mov         edx,3
00893EA1        call        @UStrArrayClr
00893EA6        lea         eax,[ebp-5C]
00893EA9        call        @UStrClr
00893EAE        lea         eax,[ebp-58]
00893EB1        mov         edx,3
00893EB6        call        @UStrArrayClr
00893EBB        lea         eax,[ebp-4C]
00893EBE        call        @UStrClr
00893EC3        lea         eax,[ebp-48]
00893EC6        mov         edx,3
00893ECB        call        @UStrArrayClr
00893ED0        lea         eax,[ebp-3C]
00893ED3        call        @UStrClr
00893ED8        lea         eax,[ebp-38]
00893EDB        mov         edx,2
00893EE0        call        @UStrArrayClr
00893EE5        lea         eax,[ebp-30]
00893EE8        mov         edx,0B
00893EED        call        @UStrArrayClr
00893EF2        lea         eax,[ebp-4]
00893EF5        call        @UStrClr
00893EFA        ret
00893EFB>       jmp         @HandleFinally
00893F00>       jmp         00893E61
00893F05        pop         ebx
00893F06        mov         esp,ebp
00893F08        pop         ebp
00893F09        ret



代碼的前面一大段是對(duì)輸入的離線注冊(cè)碼進(jìn)行一些小的處理,主要就是把字符變?yōu)榘虢嵌眩胶竺嬗袀(gè)函數(shù)的判斷,我也標(biāo)注出來了。而且為什么要關(guān)注這個(gè)函數(shù),作為破解的經(jīng)驗(yàn),也一并分享給大家。
那么我們就繼續(xù)看那個(gè)函數(shù),如果只分析代碼,可能大家不太好理解,我把OD跟蹤的示例也一并加進(jìn)去,方便大家理解。

[Asm] 純文本查看 復(fù)制代碼
001
002
003
004
005
006
007
008
009
010
011
012
013
014
015
016
017
018
019
020
021
022
023
024
025
026
027
028
029
030
031
032
033
034
035
036
037
038
039
040
041
042
043
044
045
046
047
048
049
050
051
052
053
054
055
056
057
058
059
060
061
062
063
064
065
066
067
068
069
070
071
072
073
074
075
076
077
078
079
080
081
082
083
084
085
086
087
088
089
090
091
092
093
094
095
096
097
098
099
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
register.sub_00892D40
00892D40        push        ebp
00892D41        mov         ebp,esp
00892D43        mov         ecx,8
00892D48        push        0
00892D4A        push        0
00892D4C        dec         ecx
00892D4D>       jne         00892D48
00892D4F        push        ecx
00892D50        push        ebx
00892D51        push        esi
00892D52        push        edi
00892D53        xor         eax,eax
00892D55        push        ebp
00892D56        push        892F39
00892D5B        push        dword ptr fs:[eax]
00892D5E        mov         dword ptr fs:[eax],esp
00892D61        xor         eax,eax
00892D63        push        ebp
00892D64        push        892EFF
00892D69        push        dword ptr fs:[eax]
00892D6C        mov         dword ptr fs:[eax],esp
00892D6F        mov         dl,1
00892D71        mov         eax,[00765BD8];TIdHashMessageDigest5
00892D76        call        TIdHashMessageDigest4.Create;TIdHashMessageDigest5.Create
00892D7B        mov         ebx,eax
00892D7D        lea         edx,[ebp-4]
00892D80        mov         eax,[00A343A8];gvar_00A343A8:TregisterForm
00892D85        mov         eax,dword ptr [eax+3C4]
00892D8B        call        TControl.GetText
00892D90        movzx       eax,byte ptr ds:[892F4C];0x1 gvar_00892F4C
00892D97        push        eax
00892D98        lea         eax,[ebp-1C]
00892D9B        push        eax
00892D9C        movzx       eax,byte ptr ds:[892F4C];0x1 gvar_00892F4C
00892DA3        push        eax
00892DA4        lea         eax,[ebp-20]
00892DA7        push        eax
00892DA8        push        dword ptr ds:[0A343B4];gvar_00A343B4:UnicodeString                        //4700D-936AF-CEB02-9A5B8,也就是機(jī)器碼
00892DAE        push        892F5C;'&'                                                                //&字符
00892DB3        push        dword ptr [ebp-4]                                                        //1234567890123456789012345,我們輸入的注冊(cè)碼
00892DB6        push        892F5C;'&'                                                                //&字符
00892DBB        lea         eax,[ebp-2C]
00892DBE        mov         edx,4                                                                //一共4個(gè)部分
00892DC3        call        @UStrCatN                                                                //4個(gè)部分合并,機(jī)器碼 & 注冊(cè)碼 &
00892DC8        mov         edx,dword ptr [ebp-2C]                                                //合并后的字符串是4700D-936AF-CEB02-9A5B8&1234567890123456789012345&
00892DCB        lea         ecx,[ebp-28]
00892DCE        mov         eax,[007944CC];TZhou
00892DD3        call        TZhou.sbctoDbc                                                        //這里是干嘛的暫時(shí)不知,應(yīng)該是對(duì)字符串做處理的函數(shù),但是好像對(duì)我們這個(gè)字符串沒有影響,先跳過
                                                                                                //百度了一下,sbctoDbc應(yīng)該是全角轉(zhuǎn)半角的函數(shù),所以這里直接忽略了
00892DD8        mov         eax,dword ptr [ebp-28]
00892DDB        lea         edx,[ebp-24]
00892DDE        call        AnsiUpperCase
00892DE3        mov         eax,dword ptr [ebp-24]
00892DE6        xor         ecx,ecx
00892DE8        mov         edx,892F6C;'-'
00892DED        call        StringReplace                                                        //去掉減號(hào)-
00892DF2        mov         eax,dword ptr [ebp-20]
00892DF5        xor         ecx,ecx
00892DF7        mov         edx,892F7C;' '
00892DFC        call        StringReplace                                                        //去掉空格
00892E01        mov         edx,dword ptr [ebp-1C]                                                //于是我們得到了字符串4700D936AFCEB029A5B8&1234567890123456789012345&
00892E04        lea         eax,[ebp-8]
00892E07        mov         ecx,dword ptr ds:[0A343C0];gvar_00A343C0:UnicodeString                //這里是注冊(cè)科目winxp
00892E0D        call        @UStrCat3                                                                //再合并
00892E12        lea         eax,[ebp-0C]
00892E15        push        eax
00892E16        xor         ecx,ecx
00892E18        mov         edx,dword ptr [ebp-8]                                                //于是就得到了新的字符串4700D936AFCEB029A5B8&1234567890123456789012345&winxp
00892E1B        mov         eax,ebx
00892E1D        call        TIdHash.HashStringAsHex                                                //這個(gè)字符串做MD5轉(zhuǎn)換,得到FF154F7AFB41E7B90B99D975625C6A57
00892E22        lea         eax,[ebp-10]
00892E25        push        eax
00892E26        lea         eax,[ebp-30]
00892E29        push        eax
00892E2A        mov         ecx,14                                                                //0x14=20
00892E2F        xor         edx,edx
00892E31        mov         eax,dword ptr [ebp-0C]
00892E34        call        @UStrCopy                                                                //取前20位,得到字符串FF154F7AFB41E7B90B99
00892E39        mov         edx,dword ptr [ebp-30]
00892E3C        xor         ecx,ecx
00892E3E        mov         eax,ebx
00892E40        call        TIdHash.HashStringAsHex                                                //再做MD5轉(zhuǎn)換,得到A3122F54C1523C53FE1CF250E62D7BC9
00892E45        lea         eax,[ebp-34]
00892E48        push        eax
00892E49        mov         ecx,5
00892E4E        xor         edx,edx
00892E50        mov         eax,dword ptr [ebp-10]
00892E53        call        @UStrCopy                                                                //取前5位A3122
00892E58        push        dword ptr [ebp-34]
00892E5B        push        892F6C;'-'                                                                //合并上-
00892E60        lea         eax,[ebp-38]
00892E63        push        eax
00892E64        mov         ecx,5                                                                //取5位
00892E69        mov         edx,6                                                                //從第6位開始取
00892E6E        mov         eax,dword ptr [ebp-10]
00892E71        call        @UStrCopy                                                                //得到F54C1
00892E76        push        dword ptr [ebp-38]
00892E79        push        892F6C;'-'                                                                //再合并上-
00892E7E        lea         eax,[ebp-3C]
00892E81        push        eax
00892E82        mov         ecx,5                                                                //取5位
00892E87        mov         edx,0B                                                                //從第11位開始取
00892E8C        mov         eax,dword ptr [ebp-10]
00892E8F        call        @UStrCopy                                                                //得到523C5
00892E94        push        dword ptr [ebp-3C]
00892E97        push        892F6C;'-'                                                                //再合并上-
00892E9C        lea         eax,[ebp-40]
00892E9F        push        eax
00892EA0        mov         ecx,5                                                                //取5位
00892EA5        mov         edx,10                                                                //從第16位開始取
00892EAA        mov         eax,dword ptr [ebp-10]
00892EAD        call        @UStrCopy                                                                //得到3FE1C
00892EB2        push        dword ptr [ebp-40]
00892EB5        lea         eax,[ebp-14]
00892EB8        mov         edx,7                                                                //一共7個(gè)部分
00892EBD        call        @UStrCatN                                                                //合并,得到A3122-F54C1-523C5-3FE1C
00892EC2        lea         edx,[ebp-44]
00892EC5        mov         eax,[00A343A8];gvar_00A343A8:TregisterForm
00892ECA        mov         eax,dword ptr [eax+3D0]
00892ED0        call        TControl.GetText
00892ED5        mov         edx,dword ptr [ebp-44]                                                //輸入的離線注冊(cè)碼ABCDE
00892ED8        mov         eax,dword ptr [ebp-14]                                                //剛才算出來的離線注冊(cè)碼A3122-F54C1-523C5-3FE1C
00892EDB        call        @UStrEqual                                                                //判斷是不是相等
00892EE0>       jne         00892EEE
00892EE2        mov         dword ptr ds:[0A343D4],1;gvar_00A343D4
00892EEC>       jmp         00892EF5
00892EEE        xor         eax,eax
00892EF0        mov         [00A343D4],eax;gvar_00A343D4
00892EF5        xor         eax,eax
00892EF7        pop         edx
00892EF8        pop         ecx
00892EF9        pop         ecx
00892EFA        mov         dword ptr fs:[eax],edx
00892EFD>       jmp         00892F09
00892EFF>       jmp         @HandleAnyException
00892F04        call        @DoneExcept
00892F09        xor         eax,eax
00892F0B        pop         edx
00892F0C        pop         ecx
00892F0D        pop         ecx
00892F0E        mov         dword ptr fs:[eax],edx
00892F11        push        892F40
00892F16        lea         eax,[ebp-44]
00892F19        call        @UStrClr
00892F1E        lea         eax,[ebp-40]
00892F21        mov         edx,0A
00892F26        call        @UStrArrayClr
00892F2B        lea         eax,[ebp-14]
00892F2E        mov         edx,5
00892F33        call        @UStrArrayClr
00892F38        ret
00892F39>       jmp         @HandleFinally
00892F3E>       jmp         00892F16
00892F40        mov         eax,dword ptr [ebp-18]
00892F43        pop         edi
00892F44        pop         esi
00892F45        pop         ebx
00892F46        mov         esp,ebp
00892F48        pop         ebp
00892F49        ret


這個(gè)代碼大家應(yīng)該能看懂了吧?算法其實(shí)很簡單,字符串拼到一起,MD5處理,取前20位,再M(fèi)D5處理一下,然后再取前20位,每5位一組分開,中間用-連接即為真正的離線注冊(cè)碼。
注冊(cè)機(jī)也順便寫出來了,用注冊(cè)機(jī)的結(jié)果如下:
 

理論上這個(gè)注冊(cè)機(jī)應(yīng)該可以注冊(cè)所有考無憂的東西了吧?我沒有試過,有興趣的可以自行嘗試。

補(bǔ)充一下,如果科目名稱是中文的,請(qǐng)用每個(gè)字的第一個(gè)字母作為科目名稱進(jìn)行注冊(cè)。如“一級(jí)注冊(cè)消防工程師”,就用“yjzcxfgcs”。這是軟件的設(shè)置,好像在軟件里寫死了,每個(gè)軟件的名字不一樣。

對(duì)不起,因?yàn)樯婕暗缴虡I(yè)版權(quán),注冊(cè)機(jī)就不放出來了。有能力的自己寫吧,我都已經(jīng)說那么明白了,再不會(huì)寫,那我前面說那么多都是白



熱門文章
  • 機(jī)械革命S1 PRO-02 開機(jī)不顯示 黑...
  • 聯(lián)想ThinkPad NM-C641上電掉電點(diǎn)不...
  • 三星一體激光打印機(jī)SCX-4521F維修...
  • 通過串口命令查看EMMC擦寫次數(shù)和判...
  • IIS 8 開啟 GZIP壓縮來減少網(wǎng)絡(luò)請(qǐng)求...
  • 索尼kd-49x7500e背光一半暗且閃爍 ...
  • 樓宇對(duì)講門禁讀卡異常維修,讀卡芯...
  • 新款海信電視機(jī)始終停留在開機(jī)界面...
  • 常見打印機(jī)清零步驟
  • 安裝驅(qū)動(dòng)時(shí)提示不包含數(shù)字簽名的解...
  • 共享打印機(jī)需要密碼的解決方法
  • 圖解Windows 7系統(tǒng)快速共享打印機(jī)的...
  • 錦州廣廈電腦上門維修

    報(bào)修電話:13840665804  QQ:174984393 (聯(lián)系人:毛先生)   
    E-Mail:174984393@qq.com
    維修中心地址:錦州廣廈電腦城
    ICP備案/許可證號(hào):遼ICP備2023002984號(hào)-1
    上門服務(wù)區(qū)域: 遼寧錦州市區(qū)
    主要業(yè)務(wù): 修電腦,電腦修理,電腦維護(hù),上門維修電腦,黑屏藍(lán)屏死機(jī)故障排除,無線上網(wǎng)設(shè)置,IT服務(wù)外包,局域網(wǎng)組建,ADSL共享上網(wǎng),路由器設(shè)置,數(shù)據(jù)恢復(fù),密碼破解,光盤刻錄制作等服務(wù)

    技術(shù)支持:微軟等
    主站蜘蛛池模板: AV无码精品一区二区三区| 中文字幕丰满乱孑伦无码专区| 无码孕妇孕交在线观看| 久久久久亚洲av无码专区喷水| 亚洲av永久中文无码精品| 免费无遮挡无码视频网站| 久热中文字幕无码视频| 无码 免费 国产在线观看91| 影音先锋中文无码一区| 国模无码人体一区二区| 国产福利无码一区在线| 中字无码av电影在线观看网站 | 国产日产欧洲无码视频无遮挡| 国产午夜无码精品免费看| 国产AV无码专区亚洲AV琪琪| 亚洲AV无码专区国产乱码电影| 一级电影在线播放无码| 亚洲AV无码一区二区三区网址| 国产精品无码一区二区三级 | 亚洲AV无码国产精品色午友在线 | 成在线人免费无码高潮喷水| 午夜无码熟熟妇丰满人妻| 久久水蜜桃亚洲av无码精品麻豆| 中文人妻无码一区二区三区 | 无码人妻精品一二三区免费| 男人的天堂无码动漫AV| 无码AV波多野结衣久久| 亚洲大尺度无码无码专区| 亚洲色偷拍另类无码专区| 宅男在线国产精品无码| 亚洲人成无码久久电影网站| 人妻无码久久久久久久久久久| 无码av大香线蕉伊人久久| 麻豆人妻少妇精品无码专区| 丰满亚洲大尺度无码无码专线| 波多野结衣VA无码中文字幕电影 | 国产精品无码素人福利免费| 本道久久综合无码中文字幕| 日韩aⅴ人妻无码一区二区| 国产精品无码一区二区三区在| 无码人妻一区二区三区在线水卜樱|