hk35544 发表于 2009-9-8 13:55:00

改跳转之后是假注册

这个程序是Microsoft Visual C++ 6.0的,
用到了strtoul函数和crc32算法。
修改跳转后提示成功,重启后还是未注册。
请高手帮我看看,代码如下:

004098E2    BB 13000000   mov ebx,13
004098E7    8D4424 78       lea eax,dword ptr ss:
004098EB    B9 E4714900   mov ecx,gofun.004971E4
004098F0    50            push eax
004098F1    E8 902E0800   call <jmp.&MFC42.#858>
004098F6    8D4C24 7C       lea ecx,dword ptr ss:
004098FA    51            push ecx
004098FB    B9 E0714900   mov ecx,gofun.004971E0
00409900    E8 812E0800   call <jmp.&MFC42.#858>
00409905    8B7424 38       mov esi,dword ptr ss:
00409909    8D4424 18       lea eax,dword ptr ss:
0040990D    F7D8            neg eax
0040990F    1BC0            sbb eax,eax
00409911    23C6            and eax,esi
00409913    50            push eax
00409914    E8 972B0800   call <jmp.&MFC42.#825>
00409919    8B15 E4714900   mov edx,dword ptr ds:    ; MFC42.6CB7A690
ds:=01BADF10, (ASCII "aaaaaa")
edx=0048CABC (xxxxxx.0048CABC)

0040991F    6A 10         push 10                        ; 假码一:aaaaaa
00409921    6A 00         push 0
00409923    52            push edx            edx=01BADF10, (ASCII "aaaaaa")

00409924    FFD5            call ebp
00409926    8BF0            mov esi,eax
00409928    A1 E0714900    v eax,dword ptr ds:   
ds:=01BAE000
eax=00AAAAAA

0040992D    6A 10         push 10
0040992F    6A 00         push 0
00409931    50            push eax               eax=01BAE000, (ASCII "bbbbbb")

00409932    FFD5            call ebp                         ; 假码二:bbbbbb
00409934    8B4C24 30       mov ecx,dword ptr ss:
00409938    83C4 1C         add esp,1C
0040993B    8BF8            mov edi,eax
0040993D    56            push esi
0040993E    E8 1DF1FFFF   call xxxxxx.00408A60             call里的代码在下面
00409943    393D 744D4900   cmp dword ptr ds:,edi   关键比较处,edi里是“AAAAAA”,这是用edi和谁比较?
00409949    0F84 24020000   je xxxx.00409B73                ; 没跳,跳后成功(但是重启之后还是没注册)
0040994F    6A 00         push 0
00409951    6A 00         push 0
00409953    68 00484900   push xxxxxx.00494800
00409958 >E8 712B0800   call <jmp.&MFC42.#1200>          ; 错误提示


call里面的代码:

00408A60    8B4424 04       mov eax,dword ptr ss:
00408A64    53            push ebx
00408A65    8BD0            mov edx,eax
00408A67    8BC8            mov ecx,eax
00408A69    C1EA 14         shr edx,14
00408A6C    80E2 0F         and dl,0F
00408A6F    8BD8            mov ebx,eax
00408A71    8815 CA704B00   mov byte ptr ds:,dl
00408A77    8BD0            mov edx,eax
00408A79    C1EA 10         shr edx,10
00408A7C    80E2 0F         and dl,0F
00408A7F    56            push esi
00408A80    8815 CB704B00   mov byte ptr ds:,dl
00408A86    8BD0            mov edx,eax
00408A88    C1EA 0C         shr edx,0C
00408A8B    80E2 0F         and dl,0F
00408A8E    8815 CC704B00   mov byte ptr ds:,dl
00408A94    8BD0            mov edx,eax
00408A96    C1EA 08         shr edx,8
00408A99    80E2 0F         and dl,0F
00408A9C    8815 CD704B00   mov byte ptr ds:,dl
00408AA2    8BD0            mov edx,eax
00408AA4    C1E9 1C         shr ecx,1C
00408AA7    24 0F         and al,0F
00408AA9    80E1 0F         and cl,0F
00408AAC    C1EA 04         shr edx,4
00408AAF    A2 CF704B00   mov byte ptr ds:,al
00408AB4    80E2 0F         and dl,0F
00408AB7    0FBEC1          movsx eax,cl
00408ABA    8815 CE704B00   mov byte ptr ds:,dl
00408AC0    880D C8704B00   mov byte ptr ds:,cl
00408AC6    99            cdq
00408AC7    B9 3C000000   mov ecx,3C
00408ACC    F7F9            idiv ecx
00408ACE    C1EB 18         shr ebx,18
00408AD1    80E3 0F         and bl,0F
00408AD4    881D C9704B00   mov byte ptr ds:,bl
00408ADA    0FBE82 10724B00 movsx eax,byte ptr ds:[edx+4B721>
00408AE1    03C2            add eax,edx
00408AE3    99            cdq
00408AE4    F7F9            idiv ecx
00408AE6    8815 B0704B00   mov byte ptr ds:,dl
00408AEC    0FBE82 92714B00 movsx eax,byte ptr ds:[edx+4B719>
00408AF3    0FBE8A 11724B00 movsx ecx,byte ptr ds:[edx+4B721>
00408AFA    8D4C08 04       lea ecx,dword ptr ds:
00408AFE    81E1 0F000080   and ecx,8000000F
00408B04    79 05         jns short gofun.00408B0B         ; 跳了
00408B06    49            dec ecx
00408B07    83C9 F0         or ecx,FFFFFFF0
00408B0A    41            inc ecx
00408B0B    0FBEC3          movsx eax,bl
00408B0E    03C2            add eax,edx
00408B10    BE 3C000000   mov esi,3C
00408B15    99            cdq
00408B16    F7FE            idiv esi
00408B18    880D BC704B00   mov byte ptr ds:,cl
00408B1E    8BC2            mov eax,edx
00408B20    0FBE15 A9714B00 movsx edx,byte ptr ds:
00408B27    03C2            add eax,edx
00408B29    99            cdq
00408B2A    F7FE            idiv esi
00408B2C    8815 B1704B00   mov byte ptr ds:,dl
00408B32    0FBE82 D7704B00 movsx eax,byte ptr ds:[edx+4B70D>
00408B39    0FBEB2 90714B00 movsx esi,byte ptr ds:[edx+4B719>
00408B40    8D5C30 03       lea ebx,dword ptr ds:
00408B44    81E3 0F000080   and ebx,8000000F
00408B4A    79 05         jns short gofun.00408B51         ; 跳了
00408B4C    4B            dec ebx
00408B4D    83CB F0         or ebx,FFFFFFF0
00408B50    43            inc ebx
00408B51    0FBE05 CA704B00 movsx eax,byte ptr ds:

老万 发表于 2009-9-8 21:49:02

是重启验证

hk35544 发表于 2009-9-8 22:13:45

我主要是想问一下这一条语句
00409943    393D 744D4900   cmp dword ptr ds:,edi   
edi里是“AAAAAA”,这是用edi和谁比较?
找到这个是不是就能找到真注册码?

老万 发表于 2009-9-9 06:53:44

用命令:d 494D74    查看

2005ljb 发表于 2009-9-10 22:29:23

ds:指的是偏移地址为494D74的内存地址处的数据
ds是段地址,是偏移地址,

hk35544 发表于 2009-9-11 15:47:52

d 00494D74看到里面是:
00494D7479 87 23 63 11 11 11 11y?c
不是注册码。
dword ptr ds:[494D74】是指ds:[494D74】 所指向的内容,但不知道怎么查看。
用d 0x79 找不到地址。
谁知道怎么查看?

hk35544 发表于 2009-9-11 16:15:51

谢谢各位,我已经找到了,程序执行到那一行时,信息窗口里都显示出来了。
edi=00BBBBBB
ds:=63238779
哈哈。

老海 发表于 2009-9-12 07:58:00

希望大家对OD的各个功能要熟悉,对OD的使用方法要熟练。
页: [1]
查看完整版本: 改跳转之后是假注册