最初由 wsj 发布
yes...
just be careful,you can find it.
........
其实你所讲的不对,因为这个程序的注册号不识别数字,才会出现那种情况。
user:111111
serial:111111,222222,333333,444444都行。
程序的大体流程是:
输入user和serial后,把他们每个字符xor 0x0a33后,保存到ierncv中。
在程序启动的时候验证。验证过程,只变换了从文件中读入user,再和从文件中读入的serial比较,一样的话则注册通过。
最关键的一个CALL如下:
00453A34 /$ 55 push ebp
00453A35 |. 8BEC mov ebp, esp
00453A37 |. 51 push ecx
00453A38 |. 53 push ebx
00453A39 |. 56 push esi
00453A3A |. 57 push edi
00453A3B |. 8BFA mov edi, edx
00453A3D |. 8945 FC mov [ebp-4], eax
00453A40 |. 8B45 FC mov eax, [ebp-4]
00453A43 |. E8 7808FBFF call 004042C0
00453A48 |. 33C0 xor eax, eax
00453A4A |. 55 push ebp
00453A4B |. 68 5F3B4500 push 00453B5F
00453A50 |. 64:FF30 push dword ptr fs:[eax]
00453A53 |. 64:8920 mov fs:[eax], esp
00453A56 |. 8B45 FC mov eax, [ebp-4]
00453A59 |. E8 7206FBFF call 004040D0
00453A5E |. 8BF0 mov esi, eax
00453A60 |. 85F6 test esi, esi
00453A62 |. 7E 22 jle short 00453A86
00453A64 |. BB 01000000 mov ebx, 1
00453A69 |> 8D45 FC /lea eax, [ebp-4]
00453A6C |. E8 B708FBFF |call 00404328
00453A71 |. 8B55 FC |mov edx, [ebp-4]
00453A74 |. 0FB6541A FF |movzx edx, byte ptr [edx+ebx-1]
00453A79 |. 66:81F2 3B02 |xor dx, 23B
00453A7E |. 885418 FF |mov [eax+ebx-1], dl //user都每一个BYTE XOR 23B再保存
00453A82 |. 43 |inc ebx
00453A83 |. 4E |dec esi
00453A84 |.^ 75 E3 \jnz short 00453A69
00453A86 |> 8B45 FC mov eax, [ebp-4]
00453A89 |. E8 4206FBFF call 004040D0
00453A8E |. 8BF0 mov esi, eax
00453A90 |. 85F6 test esi, esi
00453A92 |. 7E 22 jle short 00453AB6
00453A94 |. BB 01000000 mov ebx, 1
00453A99 |> 8D45 FC /lea eax, [ebp-4]
00453A9C |. E8 8708FBFF |call 00404328
00453AA1 |. 8B55 FC |mov edx, [ebp-4]
00453AA4 |. 0FB6541A FF |movzx edx, byte ptr [edx+ebx-1]
00453AA9 |. 66:81F2 3101 |xor dx, 131
00453AAE |. 885418 FF |mov [eax+ebx-1], dl //user都每一个BYTE XOR 131再保存
00453AB2 |. 43 |inc ebx
00453AB3 |. 4E |dec esi
00453AB4 |.^ 75 E3 \jnz short 00453A99
00453AB6 |> 8B45 FC mov eax, [ebp-4]
00453AB9 |. E8 1206FBFF call 004040D0
00453ABE |. 8BF0 mov esi, eax
00453AC0 |. 85F6 test esi, esi
00453AC2 |. 7E 20 jle short 00453AE4
00453AC4 |. BB 01000000 mov ebx, 1
00453AC9 |> 8D45 FC /lea eax, [ebp-4]
00453ACC |. E8 5708FBFF |call 00404328
00453AD1 |. 8B55 FC |mov edx, [ebp-4]
00453AD4 |. 0FB6541A FF |movzx edx, byte ptr [edx+ebx-1]
00453AD9 |. 83C2 35 |add edx, 35
00453ADC |. 885418 FF |mov [eax+ebx-1], dl //user都每一个BYTE ADD 35再保存
00453AE0 |. 43 |inc ebx
00453AE1 |. 4E |dec esi
00453AE2 |.^ 75 E5 \jnz short 00453AC9
00453AE4 |> 8B45 FC mov eax, [ebp-4]
00453AE7 |. E8 E405FBFF call 004040D0
00453AEC |. 8BF0 mov esi, eax
00453AEE |. 85F6 test esi, esi
00453AF0 |. 7E 1F jle short 00453B11
00453AF2 |. BB 01000000 mov ebx, 1
00453AF7 |> 8D45 FC /lea eax, [ebp-4]
00453AFA |. E8 2908FBFF |call 00404328
00453AFF |. 8B55 FC |mov edx, [ebp-4]
00453B02 |. 8A541A FF |mov dl, [edx+ebx-1]
00453B06 |. 80F2 21 |xor dl, 21
00453B09 |. 885418 FF |mov [eax+ebx-1], dl //user都每一个BYTE XOR 21再保存
00453B0D |. 43 |inc ebx
00453B0E |. 4E |dec esi
00453B0F |.^ 75 E6 \jnz short 00453AF7
00453B11 |> 8B45 FC mov eax, [ebp-4]
00453B14 |. E8 B705FBFF call 004040D0
00453B19 |. 8BF0 mov esi, eax
00453B1B |. 85F6 test esi, esi
00453B1D |. 7E 20 jle short 00453B3F
00453B1F |. BB 01000000 mov ebx, 1
00453B24 |> 8D45 FC /lea eax, [ebp-4]
00453B27 |. E8 FC07FBFF |call 00404328
00453B2C |. 8B55 FC |mov edx, [ebp-4]
00453B2F |. 0FB6541A FF |movzx edx, byte ptr [edx+ebx-1]
00453B34 |. 83EA 17 |sub edx, 17
00453B37 |. 885418 FF |mov [eax+ebx-1], dl //user都每一个BYTE 减去 17再保存
00453B3B |. 43 |inc ebx
00453B3C |. 4E |dec esi
00453B3D |.^ 75 E5 \jnz short 00453B24
00453B3F |> 8BC7 mov eax, edi
00453B41 |. 8B55 FC mov edx, [ebp-4]
00453B44 |. E8 1B03FBFF call 00403E64
00453B49 |. 33C0 xor eax, eax
00453B4B |. 5A pop edx
00453B4C |. 59 pop ecx
00453B4D |. 59 pop ecx
00453B4E |. 64:8910 mov fs:[eax], edx
00453B51 |. 68 663B4500 push 00453B66
00453B56 |> 8D45 FC lea eax, [ebp-4]
00453B59 |. E8 B202FBFF call 00403E10
00453B5E \. C3 retn
可以看出从文件中读出的user经过了上边的几个变换。返回后再和读入的SERAIL进行比较。