上www.rising.com.cn上可以下载到最新版的瑞星2006,但是安装时需要输入序列号,没有序列号就不能安装下去了。本文只是解除这个输入的检验,安装后不能网上升级,所以其实是对瑞星没有多大影响的,仅仅是研究罢了。
先把下回来的文件用winrar解压(其实是自解压文件来的),我是2006年4月17日下载的版本,用 win32dasm打开瑞星,使用字符串参考查找到字符串
String Resource ID=00126: "Your Product Serial Number is invalud, please check it."
String Resource ID=00127: "Your Product Serial Number is:
双击分别到达使用了这两个字符串的代码处,发现调用" Your Product Serial Number is:"字符串的较错误的在前,于是来到“正确”的地方,向上可以找到几个跳转,
0041EFA9 |. 51 push ecx ; /Arg1
0041EFAA |. B9 E0684300 mov ecx, 004368E0 ; |
0041EFAF |. E8 6C67FEFF call 00405720 ; /Setup.00405720 判断函数入口
0041EFB4 |. 85C0 test eax, eax ;返回结果eax为1则通过序列号,否则不能下一步
0041EFB6 |. 8945 30 mov [ebp+30], eax ;保存判断的结果,留待后用
0041EFB9 |. 74 23 je short 0041EFDE ;不能让它跳
0041EFBB |. A0 FA684300 mov al, [4368FA]
0041EFC0 |. 84C0 test al, al
0041EFC2 |. 74 1A je short 0041EFDE
0041EFC4 |. 8D5424 20 lea edx, [esp+20]
0041EFC8 |. 68 94694300 push 00436994
0041EFCD |. 52 push edx
0041EFCE |. E8 ED710000 call 004261C0
0041EFD3 |. 83C4 08 add esp, 8
0041EFD6 |. F7D8 neg eax
0041EFD8 |. 1BC0 sbb eax, eax
0041EFDA |. 40 inc eax
0041EFDB |. 8945 30 mov [ebp+30], eax
0041EFDE |> 8B45 30 mov eax, [ebp+30]
0041EFE1 |. 8B1D 88F24200 mov ebx, [<&USER32.ShowWindow>] ; USER32.ShowWindow
0041EFE7 |. 85C0 test eax, eax
0041EFE9 |. 0F84 CD010000 je 0041F1BC
0041EFEF |. 8D7C24 20 lea edi, [esp+20]
0041EFF3 |. 83C9 FF or ecx, FFFFFFFF
发觉直接修改跳转指令是不行的,因为瑞星后面有调用到函数判断结果的地方,只是修改几个跳转是不行的,所以,最好的办法是到它的判断函数里面,把返回的结果直接改为1
00405720 /$ 81EC 50020000 sub esp, 250 ;函数入口
00405726 |. 53 push ebx
00405727 |. 8BD9 mov ebx, ecx
00405729 |. 55 push ebp
0040572A |. 56 push esi
0040572B |. 8DB3 14090000 lea esi, [ebx+914]
00405731 |. 57 push edi
00405732 |. 8BFE mov edi, esi
00405734 |. 83C9 FF or ecx, FFFFFFFF
00405737 |. 33C0 xor eax, eax
00405739 |. 33ED xor ebp, ebp
0040573B |. F2:AE repne scas byte ptr es:[edi]
0040573D |. F7D1 not ecx
0040573F |. 49 dec ecx
00405740 |. 897424 14 mov [esp+14], esi
00405744 |. 74 24 je short 0040576A
00405746 |. 68 307A4300 push 00437A30
0040574B |. 56 push esi
0040574C |. E8 6F0A0200 call 004261C0
00405751 |. 83C4 08 add esp, 8
00405754 |. 85C0 test eax, eax
00405756 ^ 75 90 jnz short 004056E8 ; 此处改为不跳转即可,那后面的mov eax,1就可被执行了
00405758 |. 5F pop edi
00405759 |. 5E pop esi
0040575A |. 5D pop ebp
0040575B |. B8 01000000 mov eax, 1
00405760 |. 5B pop ebx
00405761 |. 81C4 50020000 add esp, 250
00405767 |. C2 0400 retn 4
得到的最好的修改办法是修改
00405756 ^ 75 90 jnz short 004056E8 为 nop
那么函数返回值eax绝对是1了,而且不会有其它影响。
分析到处为止,只是跳过了序列号,事实上我没有继续安装下去,因为我没有用瑞星,以前的经验发觉瑞星经常时不时给我来个cpu使用100%,害我的机器动都动不了,现在用norton了。