精華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,所以顯示不出來任何東西。