锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务,锦州广厦维修电脑,公司IT外包服务
topFlag1 设为首页
topFlag3 收藏本站
 
maojin003 首 页 公司介绍 服务项目 服务报价 维修流程 IT外包服务 服务器维护 技术文章 常见故障
锦州市广厦电脑维修|上门维修电脑|上门做系统|0416-3905144热诚服务技术文章
一个新鲜CM的追码(简略分析)

作者: 佚名  日期:2017-08-08 19:49:32   来源: 本站整理

 因为这个CM要详细写起来实在是太麻烦 篇幅有限 我就说关键的
我并不是大神 所以哪里写的太少 或者哪里有错误的地方 还请指出来。。


0x0 初探

这个cm.exe是用易语言编写(而且是静态编译)
先用Mrack师傅的E-Reverse3.12看一下程序调用的API 其中有三个我认为比较重要的API

ReadProcessMemory <== 
403EB5,404316,
CallWindowProcA <== 
4044C8,
CreateProcessA <== kernel32.dll
4061E6,


这三个API我认为很关键(对于分析而言)
再用E-DEBUG EVENTS探测一下信息(启动事件的地址)

C:\Users\Administrator\Desktop\cm.exe
中断地址: 0041CDCD
Start......
StartAddress: 004639D7
事件发生: 00403998 //__启动窗口_创建完毕
事件发生: 0040105B //时钟的周期事件
事件发生: 0040105B
事件发生: 0040105B
事件发生: 0040105B
事件发生: 0040105B
程序退出
......End


好了 现在用OD打开cm.exe 给00403998下断点 然后F9
程序首先取出临时目录的路径并和"tmp.tmp"合在一起

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
004039A1  |.  68 01030080   push 0x80000301
004039A6  |.  6A 00         push 0x0
004039A8  |.  68 0B000000   push 0xB
004039AD  |.  68 01000000   push 0x1
004039B2  |.  B8 03000000   mov eax,0x3
004039B7  |.  BB A0294600   mov ebx,cm.004629A0
004039BC  |.  E8 E52D0000   call cm.004067A6                        ;  取临时目录
004039C1  |.  83C4 10       add esp,0x10
004039C4  |.  8945 FC       mov [local.1],eax
004039C7  |.  68 244C4800   push cm.00484C24                        ; /tmp.tmp
004039CC  |.  FF75 FC       push [local.1]                          ; |Arg1 = 00537D44 ASCII "out"
004039CF  |.  B9 02000000   mov ecx,0x2                             ; |
004039D4  |.  E8 3BE5FFFF   call cm.00401F14                        ; \cm.00401F14
004039D9  |.  83C4 08       add esp,0x8
004039DC  |.  8945 F8       mov [local.2],eax                       ;  路径合成(临时目录 + tmp.tmp)


然后将一个可执行文件的字节集写到tmp.tmp中

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
004039EF  |> \68 05000080   push 0x80000005
004039F4  |.  6A 00         push 0x0
004039F6  |.  68 3C4D4800   push cm.00484D3C                        ;  一个可执行文件
004039FB  |.  68 04000080   push 0x80000004
00403A00  |.  6A 00         push 0x0
00403A02  |.  8B45 F8       mov eax,[local.2]                       ;  tmp.tmp的全路径
00403A05  |.  85C0          test eax,eax
00403A07  |.  75 05         jnz short cm.00403A0E
00403A09  |.  B8 884C4800   mov eax,cm.00484C88
00403A0E  |>  50            push eax
00403A0F  |.  68 02000000   push 0x2
00403A14  |.  BB 007A4000   mov ebx,cm.00407A00                     ;  写到文件
00403A19  |.  E8 8E2D0000   call cm.004067AC
00403A1E  |.  83C4 1C       add esp,0x1C


然后程序设置一个SendMessage的回调函数

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
00403A31  |> \68 01000100   push 0x10001                            
00403A36  |.  68 00000106   push 0x6010000
00403A3B  |.  68 01000152   push 0x52010001;_启动窗口
00403A40  |.  68 01000000   push 0x1
00403A45  |.  BB 70694000   mov ebx,cm.00406970                     ;  取窗口句柄
00403A4A  |.  E8 5D2D0000   call cm.004067AC
00403A4F  |.  83C4 10       add esp,0x10
00403A52  |.  50            push eax                                ; /_启动窗口的窗口句柄
00403A53  |.  E8 76000000   call cm.00403ACE                        ; \设置SendMessage的回调函数 地址是0x404511
00403A58  |.  6A 01         push 0x1                                ; /Arg3 = 00000001
00403A5A  |.  68 D45E4000   push cm.00405ED4                        ; |Arg2 = 00405ED4
00403A5F  |.  B8 447D5300   mov eax,cm.00537D44                     ; |out
00403A64  |.  8945 FC       mov [local.1],eax                       ; |
00403A67  |.  8D45 FC       lea eax,[local.1]                       ; |
00403A6A  |.  50            push eax                                ; |Arg1 = 00000000
00403A6B  |.  E8 C00A0000   call cm.00404530                        ; \cm.00404530
00403A70  |.  8B5D FC       mov ebx,[local.1]                       ;  cm.00537D44


后面的call太长了就不看了。
这个tmp.tmp是一个可执行文件。。
先打开cm.exe 用pchunter看看进程间的关系
 
可以发现 这个cm.exe是tmp.tmp的父进程
Mrack的神器告诉我们cm.exe有使用CreateProcessA这个api
那么给这个API下断点 然后F9。
 
可以发现:程序创建了一个调试进程(进程名是tmp.tmp)


0x1 分析被调试进程

因为WINDOWS下的R3调试器与被调试进程的关系是"一个萝卜一个坑" 即一个进程只能被一个调试器附加
这样我们就没办法用
OllyDbg去附加tmp.tmp了
所以只能用OD载入单独分析了。。
直接F9运行 输入假码 然后给GetWindowTextA下断点 之后点击[按钮]
结果发现。。。第一次没找到按钮事件
那再F9一次 结果发现又断了下来。。。
这次回到0x402C5E处  找到函数头(0x402C3B处)
删掉GetWindowTextA 这个断点  给函数头设置断点。
F9运行 重新点击[按钮]。
程序首先取出第一个编辑框的内容然后转换成整数

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
19
00402C4B  |.  6A FF         push -0x1
00402C4D  |.  6A 08         push 0x8
00402C4F  |.  68 B4350116   push 0x160135B4
00402C54  |.  68 01000152   push 0x52010001
00402C59  |.  E8 CD2B0000   call tmp.0040582B                       ;  获取第一个编辑框的内容
00402C5E  |.  83C4 10       add esp,0x10
00402C61  |.  8945 F8       mov [local.2],eax
00402C64  |.  68 04000080   push 0x80000004
00402C69  |.  6A 00         push 0x0
00402C6B  |.  8B45 F8       mov eax,[local.2]
00402C6E  |.  85C0          test eax,eax
00402C70  |.  75 05         jnz short tmp.00402C77
00402C72  |.  B8 676E4800   mov eax,tmp.00486E67
00402C77  |>  50            push eax
00402C78  |.  68 01000000   push 0x1
00402C7D  |.  BB B0604000   mov ebx,tmp.004060B0
00402C82  |.  E8 982B0000   call tmp.0040581F                       ;  再转换成整数
00402C87  |.  83C4 10       add esp,0x10
00402C8A  |.  8945 F4       mov [local.3],eax


程序又获取了第二个编辑框的内容 然后转换成字节集

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
00402C9D  |> \6A FF         push -0x1
00402C9F  |.  6A 08         push 0x8
00402CA1  |.  68 B3350116   push 0x160135B3
00402CA6  |.  68 01000152   push 0x52010001
00402CAB  |.  E8 7B2B0000   call tmp.0040582B                       ;  获取第二个编辑框的内容
00402CB0  |.  83C4 10       add esp,0x10
00402CB3  |.  8945 F0       mov [local.4],eax
00402CB6  |.  68 04000080   push 0x80000004
00402CBB  |.  6A 00         push 0x0
00402CBD  |.  8B45 F0       mov eax,[local.4]
00402CC0  |.  85C0          test eax,eax
00402CC2  |.  75 05         jnz short tmp.00402CC9
00402CC4  |.  B8 676E4800   mov eax,tmp.00486E67
00402CC9  |>  50            push eax
00402CCA  |.  68 01000000   push 0x1
00402CCF  |.  BB 50674000   mov ebx,tmp.00406750
00402CD4  |.  E8 462B0000   call tmp.0040581F                       ;  转换成字节集
00402CD9  |.  83C4 10       add esp,0x10


然后调用这个函数

[Asm] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
00402CEF  |> \8D45 EC       lea eax,[local.5]                       ;  指向第二个编辑框的内容(字节集)的指针的指针
00402CF2  |.  50            push eax                                ; /Arg3 = 0019F47C
00402CF3  |.  B8 8F784800   mov eax,tmp.0048788F                    ; |ASCII "out"
00402CF8  |.  8945 E8       mov [local.6],eax                       ; |
00402CFB  |.  8D45 E8       lea eax,[local.6]                       ; |ASCII "out"
00402CFE  |.  50            push eax                                ; |Arg2 = 0019F47C
00402CFF  |.  FF75 F4       push [local.3]                          ; |第一个编辑框的内容(整数型)
00402D02  |.  E8 12020000   call tmp.00402F19                       ; \tmp.00402F19


F7跟进去。
程序申请一个叫做 out 的窗口消息

[Asm] 纯文本查看 复制代码
1
2
3
4
5
6
7
8
9
00402F44  |.  FF33          push dword ptr ds:[ebx]                 ;  tmp.0048788F
00402F46  |.  B8 07000000   mov eax,0x7
00402F4B  |.  E8 C9280000   call tmp.00405819                       ;  新申请一个窗口消息(名字叫做out)
00402F50  |.  3965 EC       cmp [local.5],esp
00402F53  |.  74 0D         je short tmp.00402F62
00402F55  |.  68 06000000   push 0x6
00402F5A  |.  E8 B4280000   call tmp.00405813
00402F5F  |.  83C4 04       add esp,0x4
00402F62  |>  8945 FC       mov [local.1],eax                       ;  保存消息号 这里是0xC342


然后将第一个编辑框的内容转换成整数型 充当窗口句柄 判断这个窗口是否接受鼠标或键盘输入

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
0040300A  |.  FF75 08       push [arg.1]                            ;  窗口句柄(第一个编辑框的内容(整数型))
0040300D  |.  B8 0C000000   mov eax,0xC
00403012  |.  E8 02280000   call tmp.00405819                       ;  判断窗口是否允许接受键盘或鼠标输入
00403017  |.  3965 EC       cmp [local.5],esp
0040301A  |.  74 0D         je short tmp.00403029
0040301C  |.  68 06000000   push 0x6
00403021  |.  E8 ED270000   call tmp.00405813
00403026  |.  83C4 04       add esp,0x4
00403029  |>  85C0          test eax,eax
0040302B  |.  0F84 8E030000 je tmp.004033BF                         ;  不允许则返回


如果返回的话 就直接失败。 所以这里不能让它返回
联合前面cm.exe新申请的SendMessage回调函数 那这个就可能是填写父进程(cm.exe)的窗口句柄
用od打开cm.exe 然后直接F9运行(要出现窗口) 找到这个cm.exe的窗口句柄 转换成十进制。

 
 
那么把1183644输入过去。
看看这个je会不会跳走 这次就没有跳走。
那么继续往下
然后程序向cm.exe发送了窗口消息(中间一大部分操作我直接略过了。) 然后弹出了一个MessageBox

[Asm] 纯文本查看 复制代码
1
2
3
4
5
6
00403342  |.  FF75 D8       push [local.10]
00403345  |.  FF75 E0       push [local.8]                          ;  tmp.00441431
00403348  |.  FF75 FC       push [local.1]                          ;  out 消息
0040334B  |.  FF75 08       push [arg.1]                            ;  cm.exe的窗口句柄
0040334E  |.  B8 0E000000   mov eax,0xE
00403353  |.  E8 C1240000   call tmp.00405819                       ;  发送消息


之前cm.exe申请了一个SendMessage的回调函数 因为xh5510大佬提醒我 说"关键部分在cm.exe" 所以 在这个消息发送以后 cm.exe调用之前设置的回调函数应该是关键部分


0x2 再看调试器 找出
注册码

回到cm.exe 直接给0x404511下断点 然后之前运行cm.exe时弹出的注册窗口的第一个输入框中输入 之前用pchunter探测到的cm.exe的主窗口句柄(十进制:我这里是1183644) 第二个输入框随便输入点东西 点击[按钮]。
直接断了下来
这里只有一个call 那么直接跟进去。
一看call里面 一堆代码。。。
那么就用快捷点的方法 直接定位。
因为被调试进程和调试器要交换数据 而cm.exe又有调用ReadProcessMemory 那么给ReadProcessMemory下断点 然后F9运行试试。。。
断了下来。。
结果两次都在一个地方返回 而且都在这个call里面。。
看样子这个API断点并不适用
那换一个API 试试...这个CallWindowProcA(在刚刚在0x404511断下时下断点 然后按F9 就会在这里断下来)

 
 
注意这个函数发送的消息是NULL。。
蛮可疑的
在这个回调函数地址下断点然后F9试试。
这个函数也只有一个call 直接跟进去(我分析的时候 这个call就是验证注册码的call)
跟进去以后还有一个。。。来到00404EF3处
直接找到这段代码

[Asm] 纯文本查看 复制代码
1
2
3
4
5
6
00404F9B  |.  6A 00         push 0x0                                ; /Arg3 = 00000000
00404F9D  |.  8D45 EC       lea eax,[local.5]                       ; |
00404FA0  |.  50            push eax                                ; |Arg2 = 0019FAAC
00404FA1  |.  8D45 F0       lea eax,[local.4]                       ; |输入的假的注册码(在第二个框中)
00404FA4  |.  50            push eax                                ; |Arg1 = 0019FAAC
00404FA5  |.  E8 C9010000   call cm.00405173                        ; \验证


来到这里:

[Asm] 纯文本查看 复制代码
1
2
3
004051B8  |> \FF75 0C       push [arg.2]                            ; /Arg2 = 0019FAA8
004051BB  |.  FF75 08       push [arg.1]                            ; |假的注册码
004051BE  |.  E8 11000000   call cm.004051D4                        ; \cm.004051D4


跟进去 来到验证CALL
这段代码调用的call是易语言的 分割文本 函数

[Asm] 纯文本查看 复制代码
01
02
03
04
05
06
07
08
09
10
11
12
13
14
15
16
17
18
004053B5  |.  6A 00         push 0x0
004053B7  |.  6A 00         push 0x0
004053B9  |.  6A 00         push 0x0
004053BB  |.  68 04000080   push 0x80000004
004053C0  |.  6A 00         push 0x0
004053C2  |.  68 8E7D5300   push cm.00537D8E                        ;  %
004053C7  |.  68 04000080   push 0x80000004
004053CC  |.  6A 00         push 0x0
004053CE  |.  8B5D 08       mov ebx,[arg.1]
004053D1  |.  8B03          mov eax,dword ptr ds:[ebx]              ;  假的注册码
004053D3  |.  85C0          test eax,eax
004053D5  |.  75 05         jnz short cm.004053DC
004053D7  |.  B8 884C4800   mov eax,cm.00484C88
004053DC  |>  50            push eax
004053DD  |.  68 03000000   push 0x3
004053E2  |.  BB 50754000   mov ebx,cm.00407550
004053E7  |.  E8 C0130000   call cm.004067AC                        ;  文本分割
004053EC  |.  83C4 28       add esp,0x28


这里面被分割的文本就是我们输入的假注册码 用作分割的文本就是"%"
保险起见 我们换一个注册码 比如说:abcdefgh%123456
输入好后 来到004053EC处 观察一下eax寄存器中指向的地址
 
观察一下0076EFD8的内容和0077F6B8的内容
可以发现一个是abcdefgh另一个是123456
继续往下。
来到一个大循环中
这个循环是有关联的 所以我就直接发吧。。。必要的注释我已经标记了 其中 注册码2是指第二个输入框中的文本(第一部分是指0076EFD8中的文本 第二部分则是0077F6B8中的文本)

[Asm] 纯文本查看 复制代码
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
0040543C  |.  8945 F4       mov [local.3],eax
0040543F  |.  8B5D F4       mov ebx,[local.3]
00405442  |.  E8 49CAFFFF   call cm.00401E90                        ;  取出分割后的文本的成员个数(注册码2被"%"分割)
00405447  |.  33C9          xor ecx,ecx
00405449  |.  50            push eax
0040544A  |.  8D45 F0       lea eax,[local.4]
0040544D  |.  8BD8          mov ebx,eax
0040544F  |.  58            pop eax
00405450  |>  41            /inc ecx
00405451  |.  51            |push ecx
00405452  |.  53            |push ebx
00405453  |.  890B          |mov dword ptr ds:[ebx],ecx
00405455  |.  50            |push eax
00405456  |.  3BC8          |cmp ecx,eax
00405458  |.  0F8F 99030000 |jg cm.004057F7
0040545E  |.  8B5D F4       |mov ebx,[local.3]
00405461  |.  E8 DFC2FFFF   |call cm.00401745
00405466  |.  53            |push ebx
00405467  |.  51            |push ecx
00405468  |.  8B45 F0       |mov eax,[local.4]
0040546B  |.  48            |dec eax
0040546C  |.  79 0D         |jns short cm.0040547B
0040546E  |.  68 04000000   |push 0x4
00405473  |.  E8 22130000   |call cm.0040679A
00405478  |.  83C4 04       |add esp,0x4
0040547B  |>  59            |pop ecx
0040547C  |.  5B            |pop ebx
0040547D  |.  3BC1          |cmp eax,ecx
0040547F  |.  7C 0D         |jl short cm.0040548E
00405481  |.  68 01000000   |push 0x1
00405486  |.  E8 0F130000   |call cm.0040679A
0040548B  |.  83C4 04       |add esp,0x4
0040548E  |>  C1E0 02       |shl eax,0x2
00405491  |.  03D8          |add ebx,eax
00405493  |.  895D D8       |mov [local.10],ebx                     ;  注册码2被 "%" 分割
00405496  |.  8B5D D8       |mov ebx,[local.10]
00405499  |.  8B03          |mov eax,dword ptr ds:[ebx]
0040549B  |.  85C0          |test eax,eax
0040549D  |.  74 15         |je short cm.004054B4
0040549F  |.  50            |push eax
004054A0  |.  8BD8          |mov ebx,eax
004054A2  |.  E8 02CAFFFF   |call cm.00401EA9                       ;  取出第一部分的长度
004054A7  |.  40            |inc eax                                ;  长度 + 1
004054A8  |.  50            |push eax
004054A9  |.  E8 E6120000   |call cm.00406794                       ;  注册码2
004054AE  |.  59            |pop ecx
004054AF  |.  5E            |pop esi                                ;  cm.00484CB3
004054B0  |.  8BF8          |mov edi,eax
004054B2  |.  F3:A4         |rep movs byte ptr es:[edi],byte ptr ds:[esi];  拷贝第n部分(n是循环的次数)
004054B4  |>  50            |push eax
004054B5  |.  8B5D EC       |mov ebx,[local.5]
004054B8  |.  85DB          |test ebx,ebx
004054BA  |.  74 09         |je short cm.004054C5
004054BC  |.  53            |push ebx
004054BD  |.  E8 CC120000   |call cm.0040678E
004054C2  |.  83C4 04       |add esp,0x4
004054C5  |>  58            |pop eax
004054C6  |.  8945 EC       |mov [local.5],eax
004054C9  |.  B8 884C4800   |mov eax,cm.00484C88
004054CE  |.  50            |push eax
004054CF  |.  8B5D E8       |mov ebx,[local.6]
004054D2  |.  85DB          |test ebx,ebx
004054D4  |.  74 09         |je short cm.004054DF
004054D6  |.  53            |push ebx
004054D7  |.  E8 B2120000   |call cm.0040678E
004054DC  |.  83C4 04       |add esp,0x4
004054DF  |>  58            |pop eax
004054E0  |.  8945 E8       |mov [local.6],eax
004054E3  |.  68 04000080   |push 0x80000004
004054E8  |.  6A 00         |push 0x0
004054EA  |.  8B45 EC       |mov eax,[local.5]
004054ED  |.  85C0          |test eax,eax
004054EF  |.  75 05         |jnz short cm.004054F6
004054F1  |.  B8 884C4800   |mov eax,cm.00484C88
004054F6  |>  50            |push eax
004054F7  |.  68 01000000   |push 0x1
004054FC  |.  BB A0694000   |mov ebx,cm.004069A0
00405501  |.  E8 A6120000   |call cm.004067AC                       ;  取第n部分文本长度
00405506  |.  83C4 10       |add esp,0x10
00405509  |.  33C9          |xor ecx,ecx
0040550B  |.  50            |push eax
0040550C  |.  8D45 E4       |lea eax,[local.7]
0040550F  |.  8BD8          |mov ebx,eax
00405511  |.  58            |pop eax
00405512  |>  41            |/inc ecx
00405513  |.  51            ||push ecx
00405514  |.  53            ||push ebx
00405515  |.  890B          ||mov dword ptr ds:[ebx],ecx
00405517  |.  50            ||push eax
00405518  |.  3BC8          ||cmp ecx,eax
0040551A  |.  0F8F 12020000 ||jg cm.00405732
00405520  |.  68 01030080   ||push 0x80000301
00405525  |.  6A 00         ||push 0x0
00405527  |.  68 01000000   ||push 0x1
0040552C  |.  68 01030080   ||push 0x80000301
00405531  |.  6A 00         ||push 0x0
00405533  |.  FF75 E4       ||push [local.7]
00405536  |.  68 04000080   ||push 0x80000004
0040553B  |.  6A 00         ||push 0x0
0040553D  |.  8B45 EC       ||mov eax,[local.5]
00405540  |.  85C0          ||test eax,eax
00405542  |.  75 05         ||jnz short cm.00405549
00405544  |.  B8 884C4800   ||mov eax,cm.00484C88
00405549  |>  50            ||push eax
0040554A  |.  68 03000000   ||push 0x3
0040554F  |.  BB 706A4000   ||mov ebx,cm.00406A70
00405554  |.  E8 53120000   ||call cm.004067AC                      ;  取出第n部分的一个字节
00405559  |.  83C4 28       ||add esp,0x28
0040555C  |.  8945 D8       ||mov [local.10],eax
0040555F  |.  8B5D FC       ||mov ebx,[local.1]
00405562  |.  E8 DEC1FFFF   ||call cm.00401745                      ;  重定义数组
00405567  |.  B8 09000000   ||mov eax,0x9
0040556C  |.  3BC1          ||cmp eax,ecx
0040556E  |.  7C 0D         ||jl short cm.0040557D
00405570  |.  68 01000000   ||push 0x1
00405575  |.  E8 20120000   ||call cm.0040679A
0040557A  |.  83C4 04       ||add esp,0x4
0040557D  |>  C1E0 02       ||shl eax,0x2
00405580  |.  03D8          ||add ebx,eax
00405582  |.  895D D4       ||mov [local.11],ebx
00405585  |.  8B5D D4       ||mov ebx,[local.11]
00405588  |.  8B03          ||mov eax,dword ptr ds:[ebx]
0040558A  |.  50            ||push eax
0040558B  |.  FF75 D8       ||push [local.10]
0040558E  |.  E8 12BBFFFF   ||call cm.004010A5                      ;  再和p比较
00405593  |.  83C4 08       ||add esp,0x8
00405596  |.  83F8 00       ||cmp eax,0x0
00405599  |.  B8 00000000   ||mov eax,0x0
0040559E  |.  0f94c0        ||sete al
004055A1  |.  8945 D0       ||mov [local.12],eax
004055A4  |.  8B5D D8       ||mov ebx,[local.10]
004055A7  |.  85DB          ||test ebx,ebx
004055A9  |.  74 09         ||je short cm.004055B4
004055AB  |.  53            ||push ebx
004055AC  |.  E8 DD110000   ||call cm.0040678E
004055B1  |.  83C4 04       ||add esp,0x4
004055B4  |>  837D D0 00    ||cmp [local.12],0x0
004055B8  |.  0F84 35000000 ||je cm.004055F3
004055BE  |.  68 B24C4800   ||push cm.00484CB2                      ; /0
004055C3  |.  FF75 E8       ||push [local.6]                        ; |Arg1 = 0077F7F8
004055C6  |.  B9 02000000   ||mov ecx,0x2                           ; |
004055CB  |.  E8 44C9FFFF   ||call cm.00401F14                      ; \cm.00401F14
004055D0  |.  83C4 08       ||add esp,0x8                           ;  相等则用'0'替换
004055D3  |.  8945 D8       ||mov [local.10],eax
004055D6  |.  8B45 D8       ||mov eax,[local.10]
004055D9  |.  50            ||push eax
004055DA  |.  8B5D E8       ||mov ebx,[local.6]
004055DD  |.  85DB          ||test ebx,ebx
004055DF  |.  74 09         ||je short cm.004055EA
004055E1  |.  53            ||push ebx
004055E2  |.  E8 A7110000   ||call cm.0040678E
004055E7  |.  83C4 04       ||add esp,0x4
004055EA  |>  58            ||pop eax
004055EB  |.  8945 E8       ||mov [local.6],eax
004055EE  |.  E9 37010000   ||jmp cm.0040572A
004055F3  |>  8B5D FC       ||mov ebx,[local.1]
004055F6  |.  E8 95C8FFFF   ||call cm.00401E90                      ;  取出asdfghjklp的长度(已经被分割 即s[1] = 'a' s[2] = 's'...一共十个字节)
004055FB  |.  33C9          ||xor ecx,ecx
004055FD  |.  50            ||push eax
004055FE  |.  8D45 E0       ||lea eax,[local.8]
00405601  |.  8BD8          ||mov ebx,eax
00405603  |.  58            ||pop eax
00405604  |>  41            ||/inc ecx
00405605  |.  51            |||push ecx
00405606  |.  53            |||push ebx
00405607  |.  890B          |||mov dword ptr ds:[ebx],ecx
00405609  |.  50            |||push eax
0040560A  |.  3BC8          |||cmp ecx,eax
0040560C  |.  0F8F 15010000 |||jg cm.00405727                       ;  小循环十次
00405612  |.  68 01030080   |||push 0x80000301
00405617  |.  6A 00         |||push 0x0
00405619  |.  68 01000000   |||push 0x1
0040561E  |.  68 01030080   |||push 0x80000301
00405623  |.  6A 00         |||push 0x0
00405625  |.  FF75 E4       |||push [local.7]                       ;  第二个循环的循环次数
00405628  |.  68 04000080   |||push 0x80000004
0040562D  |.  6A 00         |||push 0x0
0040562F  |.  8B45 EC       |||mov eax,[local.5]                    ;  注册码(分割后 即注册码[n])
00405632  |.  85C0          |||test eax,eax
00405634  |.  75 05         |||jnz short cm.0040563B
00405636  |.  B8 884C4800   |||mov eax,cm.00484C88
0040563B  |>  50            |||push eax
0040563C  |.  68 03000000   |||push 0x3
00405641  |.  BB 706A4000   |||mov ebx,cm.00406A70
00405646  |.  E8 61110000   |||call cm.004067AC                     ;  取出一个字节
0040564B  |.  83C4 28       |||add esp,0x28
0040564E  |.  8945 D8       |||mov [local.10],eax
00405651  |.  8B5D FC       |||mov ebx,[local.1]
00405654  |.  E8 ECC0FFFF   |||call cm.00401745
00405659  |.  53            |||push ebx
0040565A  |.  51            |||push ecx
0040565B  |.  8B45 E0       |||mov eax,[local.8]
0040565E  |.  48            |||dec eax
0040565F  |.  79 0D         |||jns short cm.0040566E
00405661  |.  68 04000000   |||push 0x4
00405666  |.  E8 2F110000   |||call cm.0040679A
0040566B  |.  83C4 04       |||add esp,0x4
0040566E  |>  59            |||pop ecx
0040566F  |.  5B            |||pop ebx
00405670  |.  3BC1          |||cmp eax,ecx
00405672  |.  7C 0D         |||jl short cm.00405681
00405674  |.  68 01000000   |||push 0x1
00405679  |.  E8 1C110000   |||call cm.0040679A
0040567E  |.  83C4 04       |||add esp,0x4
00405681  |>  C1E0 02       |||shl eax,0x2
00405684  |.  03D8          |||add ebx,eax
00405686  |.  895D D4       |||mov [local.11],ebx
00405689  |.  8B5D D4       |||mov ebx,[local.11]
0040568C  |.  8B03          |||mov eax,dword ptr ds:[ebx]
0040568E  |.  50            |||push eax                             ;  "asdfghjklp"的每个字符(执行完一个小循环就换下一个)
0040568F  |.  FF75 D8       |||push [local.10]
00405692  |.  E8 0EBAFFFF   |||call cm.004010A5                     ;  eax和注册码(分割后 即 注册码[n])一个字节比较
00405697  |.  83C4 08       |||add esp,0x8
0040569A  |.  83F8 00       |||cmp eax,0x0
0040569D  |.  B8 00000000   |||mov eax,0x0
004056A2  |.  0f94c0        |||sete al
004056A5  |.  8945 D0       |||mov [local.12],eax
004056A8  |.  8B5D D8       |||mov ebx,[local.10]
004056AB  |.  85DB          |||test ebx,ebx
004056AD  |.  74 09         |||je short cm.004056B8
004056AF  |.  53            |||push ebx
004056B0  |.  E8 D9100000   |||call cm.0040678E
004056B5  |.  83C4 04       |||add esp,0x4
004056B8  |>  837D D0 00    |||cmp [local.12],0x0
004056BC  |.  0F84 5D000000 |||je cm.0040571F                       ;  如果相等则不转移
004056C2  |.  68 01030080   |||push 0x80000301
004056C7  |.  6A 00         |||push 0x0
004056C9  |.  FF75 E0       |||push [local.8]
004056CC  |.  68 01000000   |||push 0x1
004056D1  |.  BB F0784000   |||mov ebx,cm.004078F0
004056D6  |.  E8 D1100000   |||call cm.004067AC                     ;  循环次数到文本
004056DB  |.  83C4 10       |||add esp,0x10
004056DE  |.  8945 D8       |||mov [local.10],eax                   ;  循环次数
004056E1  |.  FF75 D8       |||push [local.10]                      ; /Arg2 = 0077F768
004056E4  |.  FF75 E8       |||push [local.6]                       ; |Arg1 = 0077F7F8
004056E7  |.  B9 02000000   |||mov ecx,0x2                          ; |
004056EC  |.  E8 23C8FFFF   |||call cm.00401F14                     ; \cm.00401F14
004056F1  |.  83C4 08       |||add esp,0x8
004056F4  |.  8945 D4       |||mov [local.11],eax                   ;  文本合成 LOCAL6 = LOCAL6 + 到文本(循环次数)(LOCAL6的初始值是0x00)
004056F7  |.  8B5D D8       |||mov ebx,[local.10]
004056FA  |.  85DB          |||test ebx,ebx
004056FC  |.  74 09         |||je short cm.00405707
004056FE  |.  53            |||push ebx
004056FF  |.  E8 8A100000   |||call cm.0040678E
00405704  |.  83C4 04       |||add esp,0x4
00405707  |>  8B45 D4       |||mov eax,[local.11]
0040570A  |.  50            |||push eax
0040570B  |.  8B5D E8       |||mov ebx,[local.6]
0040570E  |.  85DB          |||test ebx,ebx
00405710  |.  74 09         |||je short cm.0040571B
00405712  |.  53            |||push ebx
00405713  |.  E8 76100000   |||call cm.0040678E
00405718  |.  83C4 04       |||add esp,0x4
0040571B  |>  58            |||pop eax
0040571C  |.  8945 E8       |||mov [local.6],eax
0040571F  |>  58            |||pop eax
00405720  |.  5B            |||pop ebx
00405721  |.  59            |||pop ecx
00405722  |.^ E9 DDFEFFFF   ||\jmp cm.00405604
00405727  |>  83C4 0C       ||add esp,0xC
0040572A  |>  58            ||pop eax
0040572B  |.  5B            ||pop ebx
0040572C  |.  59            ||pop ecx
0040572D  |.^ E9 E0FDFFFF   |\jmp cm.00405512
00405732  |>  83C4 0C       |add esp,0xC
00405735  |.  68 04000080   |push 0x80000004
0040573A  |.  6A 00         |push 0x0
0040573C  |.  8B45 E8       |mov eax,[local.6]
0040573F  |.  85C0          |test eax,eax
00405741  |.  75 05         |jnz short cm.00405748
00405743  |.  B8 884C4800   |mov eax,cm.00484C88
00405748  |>  50            |push eax
00405749  |.  68 01000000   |push 0x1
0040574E  |.  BB 40704000   |mov ebx,cm.00407040
00405753  |.  E8 54100000   |call cm.004067AC                       ;  将LOCAL6转换到整数
00405758  |.  83C4 10       |add esp,0x10
0040575B  |.  68 01030080   |push 0x80000301
00405760  |.  6A 00         |push 0x0
00405762  |.  50            |push eax
00405763  |.  68 01000000   |push 0x1
00405768  |.  BB E0764000   |mov ebx,cm.004076E0
0040576D  |.  E8 3A100000   |call cm.004067AC                       ;  再转换成字节集
00405772  |.  83C4 10       |add esp,0x10
00405775  |.  8945 D4       |mov [local.11],eax                     ;  LOCAL.11 = 到字节集(LOCAL.6(整数型))
00405778  |.  68 05000080   |push 0x80000005
0040577D  |.  6A 00         |push 0x0
0040577F  |.  8B45 D4       |mov eax,[local.11]
00405782  |.  85C0          |test eax,eax
00405784  |.  75 05         |jnz short cm.0040578B
00405786  |.  B8 4E4C4800   |mov eax,cm.00484C4E
0040578B  |>  50            |push eax
0040578C  |.  68 01000000   |push 0x1
00405791  |.  BB F0784000   |mov ebx,cm.004078F0
00405796  |.  E8 11100000   |call cm.004067AC                       ;  再转换成文本
0040579B  |.  83C4 10       |add esp,0x10
0040579E  |.  8945 D0       |mov [local.12],eax
004057A1  |.  8B5D D4       |mov ebx,[local.11]
004057A4  |.  85DB          |test ebx,ebx
004057A6  |.  74 09         |je short cm.004057B1
004057A8  |.  53            |push ebx
004057A9  |.  E8 E00F0000   |call cm.0040678E
004057AE  |.  83C4 04       |add esp,0x4
004057B1  |>  FF75 D0       |push [local.12]                        ; /Arg2 = 00000000
004057B4  |.  FF75 DC       |push [local.9]                         ; |Arg1 = 00000000
004057B7  |.  B9 02000000   |mov ecx,0x2                            ; |
004057BC  |.  E8 53C7FFFF   |call cm.00401F14                       ; \cm.00401F14
004057C1  |.  83C4 08       |add esp,0x8
004057C4  |.  8945 CC       |mov [local.13],eax                     ;  local.9 + local.12(文本链接)
004057C7  |.  8B5D D0       |mov ebx,[local.12]
004057CA  |.  85DB          |test ebx,ebx
004057CC  |.  74 09         |je short cm.004057D7
004057CE  |.  53            |push ebx
004057CF  |.  E8 BA0F0000   |call cm.0040678E
004057D4  |.  83C4 04       |add esp,0x4
004057D7  |>  8B45 CC       |mov eax,[local.13]
004057DA  |.  50            |push eax
004057DB  |.  8B5D DC       |mov ebx,[local.9]
004057DE  |.  85DB          |test ebx,ebx
004057E0  |.  74 09         |je short cm.004057EB
004057E2  |.  53            |push ebx
004057E3  |.  E8 A60F0000   |call cm.0040678E
004057E8  |.  83C4 04       |add esp,0x4
004057EB  |>  58            |pop eax
004057EC  |.  8945 DC       |mov [local.9],eax                      ;  将LOCAL13的值保存到LOCAL9中
004057EF  |.  58            |pop eax
004057F0  |.  5B            |pop ebx
004057F1  |.  59            |pop ecx
004057F2  |.^ E9 59FCFFFF   \jmp cm.00405450
004057F7  |>  83C4 0C       add esp,0xC
004057FA  |.  8B45 DC       mov eax,[local.9]                       ;  这时 eax 就是即将弹出的MessageBox的内容。

[1] [2]  下一页



热门文章
  • 机械革命S1 PRO-02 开机不显示 黑...
  • 联想ThinkPad NM-C641上电掉电点不...
  • 三星一体激光打印机SCX-4521F维修...
  • 通过串口命令查看EMMC擦写次数和判...
  • IIS 8 开启 GZIP压缩来减少网络请求...
  • 索尼kd-49x7500e背光一半暗且闪烁 ...
  • 楼宇对讲门禁读卡异常维修,读卡芯...
  • 新款海信电视机始终停留在开机界面...
  • 常见打印机清零步骤
  • 安装驱动时提示不包含数字签名的解...
  • 共享打印机需要密码的解决方法
  • 图解Windows 7系统快速共享打印机的...
  • 锦州广厦电脑上门维修

    报修电话:13840665804  QQ:174984393 (联系人:毛先生)   
    E-Mail:174984393@qq.com
    维修中心地址:锦州广厦电脑城
    ICP备案/许可证号:辽ICP备2023002984号-1
    上门服务区域: 辽宁锦州市区
    主要业务: 修电脑,电脑修理,电脑维护,上门维修电脑,黑屏蓝屏死机故障排除,无线上网设置,IT服务外包,局域网组建,ADSL共享上网,路由器设置,数据恢复,密码破解,光盘刻录制作等服务

    技术支持:微软等