这两天加班了,每时间续,惨啊!!!
继续......
跟进CALL中...........
0047C856 . E8 B07DF8FF call Flashcii.0040460B:::::
0047BA50 > \6A FF push -1
0047BA52 . 68 6D835300 push Flashcii.0053836D ; SE 处理程序安装
0047BA57 . 64:A1 0000000>mov eax, dword ptr fs:[0]
0047BA5D . 50 push eax
0047BA5E . 64:8925 00000>mov dword ptr fs:[0], esp
0047BA65 . 81EC D0040000 sub esp, 4D0
0047BA6B . A1 B0005900 mov eax, dword ptr [5900B0]
0047BA70 . 898424 CC0400>mov dword ptr [esp+4CC], eax
0047BA77 . 8D8C24 E40400>lea ecx, dword ptr [esp+4E4]
0047BA7E . C78424 D80400>mov dword ptr [esp+4D8], 1
0047BA89 . FF15 9C4B5900 call near dword ptr [<&MFC71.#2902>] ; MFC71.7C146AB0
0047BA8F . 83F8 1C cmp eax, 1C ; 注册码长度=28?
0047BA92 . 8D8C24 E00400>lea ecx, dword ptr [esp+4E0]
0047BA99 . 0F85 54010000 jnz Flashcii.0047BBF3
0047BA9F . 53 push ebx
0047BAA0 . 56 push esi
0047BAA1 . 32DB xor bl, bl
0047BAA3 . 57 push edi
原来注册码要28位,重新输入注册信息.user:wzq id:1232425262728292021232425262
0047BA50 > \6A FF push -1
0047BA52 . 68 6D835300 push Flashcii.0053836D ; SE 处理程序安装
0047BA57 . 64:A1 0000000>mov eax, dword ptr fs:[0]
0047BA5D . 50 push eax
0047BA5E . 64:8925 00000>mov dword ptr fs:[0], esp
0047BA65 . 81EC D0040000 sub esp, 4D0
0047BA6B . A1 B0005900 mov eax, dword ptr [5900B0]
0047BA70 . 898424 CC0400>mov dword ptr [esp+4CC], eax
0047BA77 . 8D8C24 E40400>lea ecx, dword ptr [esp+4E4]
0047BA7E . C78424 D80400>mov dword ptr [esp+4D8], 1
0047BA89 . FF15 9C4B5900 call near dword ptr [<&MFC71.#2902_AT>; 取注册码长度
0047BA8F . 83F8 1C cmp eax, 1C ; 注册码长度=28?
0047BA92 . 8D8C24 E00400>lea ecx, dword ptr [esp+4E0]
0047BA99 . 0F85 54010000 jnz Flashcii.0047BBF3 ; 不是28位则跳
0047BA9F . 53 push ebx
0047BAA0 . 56 push esi
0047BAA1 . 32DB xor bl, bl
0047BAA3 . 57 push edi
0047BAA4 . 885C24 0F mov byte ptr [esp+F], bl
0047BAA8 . 33F6 xor esi, esi
0047BAAA . FF15 9C4B5900 call near dword ptr [<&MFC71.#2902_AT>; 取用户名长度
0047BAB0 . 85C0 test eax, eax ; 测试用户名长度
0047BAB2 . 7E 32 jle short Flashcii.0047BAE6
0047BAB4 . EB 0A jmp short Flashcii.0047BAC0
0047BAB6 . 8DA424 000000>lea esp, dword ptr [esp]
0047BABD . 8D49 00 lea ecx, dword ptr [ecx]
0047BAC0 > 56 push esi
0047BAC1 . 8D8C24 F00400>lea ecx, dword ptr [esp+4F0]
0047BAC8 . FF15 0C405900 call near dword ptr [<&MFC71.#2451_AT>; MFC71.7C1894E7
0047BACE . 02D8 add bl, al ; 用户名逐个相加
0047BAD0 . 8D8C24 EC0400>lea ecx, dword ptr [esp+4EC]
0047BAD7 . 46 inc esi
0047BAD8 . FF15 9C4B5900 call near dword ptr [<&MFC71.#2902_AT>; MFC71.7C146AB0
0047BADE . 3BF0 cmp esi, eax
0047BAE0 .^ 7C DE jl short Flashcii.0047BAC0
0047BAE2 . 885C24 0F mov byte ptr [esp+F], bl ; 用户名的累加和放入0012F5C7中
0047BAE6 > A1 68685400 mov eax, dword ptr [546868]
0047BAEB . 8B0D 6C685400 mov ecx, dword ptr [54686C]
0047BAF1 . 8B15 70685400 mov edx, dword ptr [546870]
0047BAF7 . 894424 10 mov dword ptr [esp+10], eax
0047BAFB . 66:A1 7468540>mov ax, word ptr [546874]
0047BB01 . 894C24 14 mov dword ptr [esp+14], ecx
0047BB05 . 8A0D 76685400 mov cl, byte ptr [546876]
0047BB0B . 895424 18 mov dword ptr [esp+18], edx
0047BB0F . 66:894424 1C mov word ptr [esp+1C], ax
0047BB14 . 884C24 1E mov byte ptr [esp+1E], cl
0047BB18 . 33F6 xor esi, esi
0047BB1A . 8D9B 00000000 lea ebx, dword ptr [ebx]
0047BB20 > 8D3C36 lea edi, dword ptr [esi+esi] ; 此处开始循环
0047BB23 . 8D57 01 lea edx, dword ptr [edi+1]
0047BB26 . 52 push edx
0047BB27 . 8D8C24 F40400>lea ecx, dword ptr [esp+4F4]
0047BB2E . FF15 BC425900 call near dword ptr [<&MFC71.#865_ATL>; MFC71.7C1894E7
0047BB34 . 57 push edi
0047BB35 . 8D8C24 F40400>lea ecx, dword ptr [esp+4F4]
0047BB3C . 8AD8 mov bl, al ; 从第2位开始间隔取出假注册码进行计算
0047BB3E . FF15 BC425900 call near dword ptr [<&MFC71.#865_ATL>; MFC71.7C1894E7
0047BB44 . 8A5424 0F mov dl, byte ptr [esp+F] ; 堆栈 ss:[0012F5C7]=62
0047BB48 . FEC8 dec al
0047BB4A . C0E0 04 shl al, 4
0047BB4D . 2C 41 sub al, 41
0047BB4F . 02D8 add bl, al
0047BB51 . 2ADA sub bl, dl
0047BB53 . 885C34 10 mov byte ptr [esp+esi+10], bl ; 逐个存下计算结果 0012F5C8
0047BB57 . 46 inc esi
0047BB58 . 83FE 0E cmp esi, 0E
0047BB5B .^ 7C C3 jl short Flashcii.0047BB20
0047BB5D . 8D4C24 20 lea ecx, dword ptr [esp+20]
0047BB61 . E8 6994F8FF call Flashcii.00404FCF ; 对地址0012F5D8赋值:01 23 45 67 89 AB CD EF FE DC BA 98 76 54 32 10 F0 E1 D2 C3
0047BB66 . 8D4C24 20 lea ecx, dword ptr [esp+20]
0047BB6A . C68424 E40400>mov byte ptr [esp+4E4], 2
0047BB72 . C68424 D80000>mov byte ptr [esp+D8], 0
0047BB7A . E8 65ACF8FF call Flashcii.004067E4
0047BB7F . 5F pop edi
0047BB80 . 8D4424 0C lea eax, dword ptr [esp+C]
0047BB84 . 5E pop esi
0047BB85 . 8D50 01 lea edx, dword ptr [eax+1]
0047BB88 . 5B pop ebx
0047BB89 . 8DA424 000000>lea esp, dword ptr [esp]
0047BB90 > 8A08 mov cl, byte ptr [eax] ; 对刚才计算结果测试长度
0047BB92 . 40 inc eax
0047BB93 . 84C9 test cl, cl
0047BB95 .^ 75 F9 jnz short Flashcii.0047BB90
0047BB97 . 2BC2 sub eax, edx
0047BB99 . 50 push eax
0047BB9A . 8D4424 08 lea eax, dword ptr [esp+8] ; 计算结果的起始地址0012F5C8
0047BB9E . 50 push eax
0047BB9F . 8D4C24 1C lea ecx, dword ptr [esp+1C] ; 地址0012F5D8
0047BBA3 . E8 529BF8FF call Flashcii.004056FA
0047BBA8 . 8D4C24 14 lea ecx, dword ptr [esp+14] ; 堆栈地址=0012F5D8
0047BBAC . E8 E167F8FF call Flashcii.00402392 ; 此处对0012F638处写入变换结果
0047BBB1 . 6A 00 push 0
0047BBB3 . 8D8C24 D00000>lea ecx, dword ptr [esp+D0]
0047BBBA . 51 push ecx ; 压入内存地址0012F690
0047BBBB . 8D4C24 1C lea ecx, dword ptr [esp+1C] ; 内存地址0012F5D8
0047BBBF . E8 9C7BF8FF call Flashcii.00403760
0047BBC4 . 68 20685400 push Flashcii.00546820 ; /String2 = "42 30 1E 22 20 34 8B CF D9 38 C0 14 10 68 E4 FA DC FF EF 97"
0047BBC9 . 8D9424 D00000>lea edx, dword ptr [esp+D0] ; |0012F690
0047BBD0 . 52 push edx ; |String1
0047BBD1 . FF15 203F5900 call near dword ptr [<&KERNEL32.lstrc>; \lstrcmpA
0047BBD7 . 85C0 test eax, eax
0047BBD9 . 8D4C24 14 lea ecx, dword ptr [esp+14]
0047BBDD . C68424 D80400>mov byte ptr [esp+4D8], 1
0047BBE5 74 23 je short Flashcii.0047BC0A ; 关键跳转
0047BBE7 . E8 F865F8FF call Flashcii.004021E4
0047BBEC . 8D8C24 E00400>lea ecx, dword ptr [esp+4E0]
0047BBF3 > FF15 A04B5900 call near dword ptr [<&MFC71.#578_ATL>; MFC71.7C1771B1
0047BBF9 . 8D8C24 E40400>lea ecx, dword ptr [esp+4E4]
0047BC00 . FF15 A04B5900 call near dword ptr [<&MFC71.#578_ATL>; MFC71.7C1771B1
0047BC06 . 33C0 xor eax, eax
0047BC08 . EB 24 jmp short Flashcii.0047BC2E
0047BC0A > E8 D565F8FF call Flashcii.004021E4
0047BC0F . 8D8C24 E00400>lea ecx, dword ptr [esp+4E0]
0047BC16 . FF15 A04B5900 call near dword ptr [<&MFC71.#578_ATL>; MFC71.7C1771B1
0047BC1C . 8D8C24 E40400>lea ecx, dword ptr [esp+4E4]
0047BC23 . FF15 A04B5900 call near dword ptr [<&MFC71.#578_ATL>; MFC71.7C1771B1
0047BC29 . B8 01000000 mov eax, 1
0047BC2E > 8B8C24 D00400>mov ecx, dword ptr [esp+4D0]
0047BC35 . 64:890D 00000>mov dword ptr fs:[0], ecx
0047BC3C . 8B8C24 CC0400>mov ecx, dword ptr [esp+4CC]
0047BC43 . E8 E6530900 call Flashcii.0051102E
0047BC48 . 81C4 DC040000 add esp, 4DC
0047BC4E . C2 0800 retn 8
注意这里:
0047BBB1 . 6A 00 push 0
0047BBB3 . 8D8C24 D00000>lea ecx, dword ptr [esp+D0]
0047BBBA . 51 push ecx ; 压入内存地址0012F690
0047BBBB . 8D4C24 1C lea ecx, dword ptr [esp+1C]
0047BBBF . E8 9C7BF8FF call Flashcii.00403760 ;把0012f638处的数据当作字符搬到0012F690
0047BBC4 . 68 20685400 push Flashcii.00546820 ; /String2 = "42 30 1E 22 20 34 8B CF D9 38 C0 14 10 68 E4 FA DC FF EF 97"
0047BBC9 . 8D9424 D00000>lea edx, dword ptr [esp+D0] ; |0012F690
0047BBD0 . 52 push edx ; |String1
0047BBD1 . FF15 203F5900 call near dword ptr [<&KERNEL32.lstrc>; \lstrcmpA
0047BBD7 . 85C0 test eax, eax
0047BBD9 . 8D4C24 14 lea ecx, dword ptr [esp+14]
0047BBDD . C68424 D80400>mov byte ptr [esp+4D8], 1
0047BBE5 . 74 23 je short Flashcii.0047BC0A ; 关键跳转
用0012F690处的数值同固定值比较,需要看看0012F690的数怎么来地.......
在这里0047BBBF . E8 9C7BF8FF call Flashcii.00403760
内容如下:
00486290 > \83EC 0C sub esp, 0C
00486293 . A1 B0005900 mov eax, dword ptr [5900B0]
00486298 . 53 push ebx
00486299 . 55 push ebp
0048629A . 894424 10 mov dword ptr [esp+10], eax
0048629E . 8A4424 1C mov al, byte ptr [esp+1C]
004862A2 . 84C0 test al, al
004862A4 . 56 push esi
004862A5 . 57 push edi
004862A6 . 8BD9 mov ebx, ecx
004862A8 . 0F85 AF000000 jnz Flashcii.0048635D
004862AE . 0FB643 60 movzx eax, byte ptr [ebx+60]
004862B2 . 50 push eax ; /<%02X>
004862B3 . 8D4C24 14 lea ecx, dword ptr [esp+14] ; |
004862B7 . 68 90835400 push Flashcii.00548390 ; |format = "%02X"
004862BC . 51 push ecx ; |s
004862BD . FF15 50525900 call near dword ptr [<&MSVCR71.sprint>; \sprintf
004862C3 . 8D4424 1C lea eax, dword ptr [esp+1C]
004862C7 . 83C4 0C add esp, 0C
004862CA . 8BC8 mov ecx, eax
004862CC . 8D6424 00 lea esp, dword ptr [esp]
004862D0 > 8A10 mov dl, byte ptr [eax]
004862D2 . 40 inc eax
004862D3 . 84D2 test dl, dl
004862D5 .^ 75 F9 jnz short Flashcii.004862D0
004862D7 . 8B7C24 20 mov edi, dword ptr [esp+20]
004862DB . 2BC1 sub eax, ecx
004862DD . 8BF1 mov esi, ecx
004862DF . 4F dec edi
004862E0 > 8A4F 01 mov cl, byte ptr [edi+1]
004862E3 . 47 inc edi
004862E4 . 84C9 test cl, cl
004862E6 .^ 75 F8 jnz short Flashcii.004862E0
004862E8 . 8BC8 mov ecx, eax
004862EA . C1E9 02 shr ecx, 2
004862ED . F3:A5 rep movs dword ptr es:[edi], dword p>
004862EF . 8BC8 mov ecx, eax
004862F1 . 83E1 03 and ecx, 3
004862F4 . F3:A4 rep movs byte ptr es:[edi], byte ptr>
004862F6 . 83C3 61 add ebx, 61
004862F9 . BD 13000000 mov ebp, 13
004862FE . 8BFF mov edi, edi
00486300 > 0FB613 movzx edx, byte ptr [ebx]
00486303 . 52 push edx ; /<%02X>
00486304 . 8D4424 14 lea eax, dword ptr [esp+14] ; |
00486308 . 68 88835400 push Flashcii.00548388 ; |format = " %02X"
0048630D . 50 push eax ; |s
0048630E . FF15 50525900 call near dword ptr [<&MSVCR71.sprint>; \sprintf
00486314 . 8D4424 1C lea eax, dword ptr [esp+1C]
00486318 . 83C4 0C add esp, 0C
0048631B . 8BC8 mov ecx, eax
0048631D . 8D49 00 lea ecx, dword ptr [ecx]
00486320 > 8A10 mov dl, byte ptr [eax]
00486322 . 40 inc eax
00486323 . 84D2 test dl, dl
00486325 .^ 75 F9 jnz short Flashcii.00486320
00486327 . 8B7C24 20 mov edi, dword ptr [esp+20]
0048632B . 2BC1 sub eax, ecx
0048632D . 8BF1 mov esi, ecx
0048632F . 4F dec edi
00486330 > 8A4F 01 mov cl, byte ptr [edi+1]
00486333 . 47 inc edi
00486334 . 84C9 test cl, cl
00486336 .^ 75 F8 jnz short Flashcii.00486330
00486338 . 8BC8 mov ecx, eax
0048633A . C1E9 02 shr ecx, 2
0048633D . F3:A5 rep movs dword ptr es:[edi], dword p>; 此处修改0012F690处数值
0048633F . 8BC8 mov ecx, eax
00486341 . 83E1 03 and ecx, 3
00486344 . 43 inc ebx
00486345 . 4D dec ebp
00486346 . F3:A4 rep movs byte ptr es:[edi], byte ptr>
00486348 .^ 75 B6 jnz short Flashcii.00486300
0048634A . 5F pop edi
0048634B . 5E pop esi
0048634C . 5D pop ebp
0048634D . 5B pop ebx
0048634E . 8B4C24 08 mov ecx, dword ptr [esp+8]
00486352 . E8 D7AC0800 call Flashcii.0051102E
00486357 . 83C4 0C add esp, 0C
0048635A . C2 0800 retn 8
0048635D > 3C 01 cmp al, 1
0048635F . 0F85 A8000000 jnz Flashcii.0048640D
00486365 . 0FB64B 60 movzx ecx, byte ptr [ebx+60]
00486369 . 51 push ecx ; /<%u>
0048636A . 8D5424 14 lea edx, dword ptr [esp+14] ; |
0048636E . 68 84835400 push Flashcii.00548384 ; |format = "%u"
00486373 . 52 push edx ; |s
00486374 . FF15 50525900 call near dword ptr [<&MSVCR71.sprint>; \sprintf
0048637A . 8D4424 1C lea eax, dword ptr [esp+1C]
0048637E . 83C4 0C add esp, 0C
00486381 . 8BC8 mov ecx, eax
00486383 > 8A10 mov dl, byte ptr [eax]
00486385 . 40 inc eax
00486386 . 84D2 test dl, dl
00486388 .^ 75 F9 jnz short Flashcii.00486383
0048638A . 8B7C24 20 mov edi, dword ptr [esp+20]
0048638E . 2BC1 sub eax, ecx
00486390 . 8BF1 mov esi, ecx
00486392 . 4F dec edi
00486393 > 8A4F 01 mov cl, byte ptr [edi+1]
00486396 . 47 inc edi
00486397 . 84C9 test cl, cl
00486399 .^ 75 F8 jnz short Flashcii.00486393
0048639B . 8BC8 mov ecx, eax
0048639D . C1E9 02 shr ecx, 2
004863A0 . F3:A5 rep movs dword ptr es:[edi], dword p>
004863A2 . 8BC8 mov ecx, eax
004863A4 . 83E1 03 and ecx, 3
004863A7 . F3:A4 rep movs byte ptr es:[edi], byte ptr>
004863A9 . 83C3 61 add ebx, 61
004863AC . BD 13000000 mov ebp, 13
004863B1 > 0FB603 movzx eax, byte ptr [ebx]
004863B4 . 50 push eax ; /<%u>
004863B5 . 8D4C24 14 lea ecx, dword ptr [esp+14] ; |
004863B9 . 68 80835400 push Flashcii.00548380 ; |format = " %u"
004863BE . 51 push ecx ; |s
004863BF . FF15 50525900 call near dword ptr [<&MSVCR71.sprint>; \sprintf
004863C5 . 8D4424 1C lea eax, dword ptr [esp+1C]
004863C9 . 83C4 0C add esp, 0C
004863CC . 8BC8 mov ecx, eax
004863CE . 8BFF mov edi, edi
004863D0 > 8A10 mov dl, byte ptr [eax]
004863D2 . 40 inc eax
004863D3 . 84D2 test dl, dl
004863D5 .^ 75 F9 jnz short Flashcii.004863D0
004863D7 . 8B7C24 20 mov edi, dword ptr [esp+20]
004863DB . 2BC1 sub eax, ecx
004863DD . 8BF1 mov esi, ecx
004863DF . 4F dec edi
004863E0 > 8A4F 01 mov cl, byte ptr [edi+1]
004863E3 . 47 inc edi
004863E4 . 84C9 test cl, cl
004863E6 .^ 75 F8 jnz short Flashcii.004863E0
004863E8 . 8BC8 mov ecx, eax
004863EA . C1E9 02 shr ecx, 2
004863ED . F3:A5 rep movs dword ptr es:[edi], dword p>
004863EF . 8BC8 mov ecx, eax
004863F1 . 83E1 03 and ecx, 3
004863F4 . 43 inc ebx
004863F5 . 4D dec ebp
004863F6 . F3:A4 rep movs byte ptr es:[edi], byte ptr>
004863F8 .^ 75 B7 jnz short Flashcii.004863B1
004863FA . 5F pop edi
004863FB . 5E pop esi
004863FC . 5D pop ebp
004863FD . 5B pop ebx
004863FE . 8B4C24 08 mov ecx, dword ptr [esp+8]
00486402 . E8 27AC0800 call Flashcii.0051102E
00486407 . 83C4 0C add esp, 0C
0048640A . C2 0800 retn 8
0048640D > 8B7C24 20 mov edi, dword ptr [esp+20]
00486411 . B9 07000000 mov ecx, 7
00486416 . BE 5C835400 mov esi, Flashcii.0054835C ; ASCII "Error: Unknown report type!"
0048641B . F3:A5 rep movs dword ptr es:[edi], dword p>
0048641D . 8B4C24 18 mov ecx, dword ptr [esp+18]
00486421 . 5F pop edi
00486422 . 5E pop esi
00486423 . 5D pop ebp
00486424 . 5B pop ebx
00486425 . E8 04AC0800 call Flashcii.0051102E
0048642A . 83C4 0C add esp, 0C
0048642D . C2 0800 retn 8
原来是把把0012f638处的十六进制数据当作字符加空格后搬到0012F690...........
在看看0012f638从那里来............