关于QQ1220显示IP Patch (2千字)
精华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,所以显示不出来任何东西。
