精华4夜月同志这篇文章还是不错的。。。但是有几个问题:
(1) 最大的问题是根本显示不了IP,原因在于push wsprintfA函数的参数的时候少push了IP的EIP。
0043AF15: 51 push ecx
0043AF16: 52 push edx
0043AF17: 56 push esi
0043AF18: 8B8614040000 mov eax,[esi][00000414]
0043AF1E: 8B8058030000 mov eax,[eax][00000358]
0043AF24: 803800 cmp b,[eax],000 ;" "
0043AF27: 7436 je .00043AF5F ----- (2)
0043AF29: 50 push eax
0043AF2A: 50 push eax
0043AF2B: FF1510035D00 call _GetAddress ;ipsearcher.dl
0043AF31: 83C404 add esp,004 ;""
0043AF34: FF7004 push d,[eax][04]
0043AF37: FF30 push d,[eax]
0043AF39: 6890B95F00 push 0005FB990 ----- (3)
0043AF3E: 90 nop
0043AF3F: 68A0B95F00 push 0005FB9A0 ----- (4)
0043AF44: FF15E4165800 call wsprintfA ;USER32.dll
0043AF4A: 83C414 add esp,014 ;""
0043AF4D: B8A0B95F00 mov eax,0005FB9A0 ----- (5)
0043AF52: 50 push eax
0043AF53: FFB64C030000 push d,[esi][0000034C]
0043AF59: FF15D4145800 call SetWindowTextA ;USER32.dll
0043AF59: FF15D4145800 call SetWindowTextA ;USER32.dll
0043AF5F: 5E pop esi
0043AF60: 5A pop edx
0043AF61: 59 pop ecx
0043AF62: 8D86E4030000 lea eax,[esi][000003E4]
0043AF68: E9E8CA0100 jmp .000457A55 ----- (5)
(2) 没有修改exe的资源,把广告窗口的类型改成EDIT或者STATIC|TEXT才能把SetWindowTextA的东西显示出来(这个大家自己改吧)。
(3) 数据段的长度没有改,exe一旦压缩就显示不了IP了(应该改成2B000左右,而不是原来的2A960)。
(4) 改好之后win2k/xp会认为它是个非法的Win32文件,可以用ProcDump的PE Rebuilder来一遍,之后可以在所有平台运行。(5)5FB990(就是wsprintfA的格式参数)处应该填上%s %s\n%s,不然也显示不出来IP。 顺便说一句,(3)的原因就是压缩软件只取了段的物理大小范围进行压缩,这样就把格式串忽略了,解压时被设成0,所以显示不出来任何东西。