改跳转之后是假注册
这个程序是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: 是重启验证 我主要是想问一下这一条语句
00409943 393D 744D4900 cmp dword ptr ds:,edi
edi里是“AAAAAA”,这是用edi和谁比较?
找到这个是不是就能找到真注册码? 用命令:d 494D74 查看 ds:指的是偏移地址为494D74的内存地址处的数据
ds是段地址,是偏移地址, d 00494D74看到里面是:
00494D7479 87 23 63 11 11 11 11y?c
不是注册码。
dword ptr ds:[494D74】是指ds:[494D74】 所指向的内容,但不知道怎么查看。
用d 0x79 找不到地址。
谁知道怎么查看? 谢谢各位,我已经找到了,程序执行到那一行时,信息窗口里都显示出来了。
edi=00BBBBBB
ds:=63238779
哈哈。 希望大家对OD的各个功能要熟悉,对OD的使用方法要熟练。
页:
[1]