国产探花免费观看_亚洲丰满少妇自慰呻吟_97日韩有码在线_资源在线日韩欧美_一区二区精品毛片,辰东完美世界有声小说,欢乐颂第一季,yy玄幻小说排行榜完本

首頁(yè) > 學(xué)院 > 開發(fā)設(shè)計(jì) > 正文

為OICQ添加顯示IP和端口功能

2019-11-18 18:47:48
字體:
來(lái)源:轉(zhuǎn)載
供稿:網(wǎng)友
特別申明:本文所述的內(nèi)容只用于研究交流之用,如用作非法用途或修改不當(dāng),一 切后果自負(fù)!


我們的目標(biāo)是去掉廣告顯示,并且在廣告的位置上顯示目標(biāo)對(duì)象的ip地址和端口 號(hào)。我們應(yīng)該怎么下手呢,好的,慢慢跟我來(lái)!


經(jīng)過(guò)對(duì)Oicq目錄結(jié)構(gòu)的分析,發(fā)現(xiàn)目錄AD和廣告有關(guān)。其一是廣告的英文簡(jiǎn)寫就 是AD,其二是其中的圖片文件就是我們?cè)趶V告中看到的。試著刪除該目錄之后,呵 呵,廣告消逝了。但是下次進(jìn)入Oicq之后,程序會(huì)自動(dòng)新建這個(gè)目錄,并且重新下 載廣告文件。既然程序讀取不到廣告文件廣告就會(huì)消失,那么就人工讓它讀不到咯 。用Soft-ice把斷點(diǎn)設(shè)置在CreateFileA上,這個(gè)API調(diào)用一般是用來(lái)打開一個(gè)文件 或者設(shè)備的。在Sice截到斷點(diǎn)后,查看是即將打開的那些文件,從而判斷是否是我 們要修改的地方。具體修改方法詳見"打開廣告文件的程序段"


廣告是去掉了,但是在廣告區(qū)域上點(diǎn)擊鼠標(biāo),瀏覽器仍然會(huì)打開廣告鏈接,看來(lái) 我們還需要對(duì)程序作更完善的修改。好了,既然點(diǎn)擊廣告會(huì)出現(xiàn)瀏覽器,那一定是 運(yùn)行了一個(gè)程序。一般打開運(yùn)行瀏覽器程序的有兩種方法,一是調(diào)用COM接口,二 是調(diào)用普通的運(yùn)行程序的API函數(shù)。第一種方法技術(shù)難度較高,一般程序很少采用 。所以直接用Sice把斷點(diǎn)設(shè)置在幾個(gè)和運(yùn)行程序有關(guān)的API函數(shù)上,比如 ShellExecuteA,WinExec等等。好了,程序在ShellExecuteA處中斷,也就是只要 避過(guò)這個(gè)API函數(shù)就行咯。呵呵,順著程序往上找合適的修改位置,會(huì)發(fā)現(xiàn) USER32.PtInRect函數(shù)的調(diào)用,經(jīng)過(guò)分析,發(fā)現(xiàn)它是用作判斷鼠標(biāo)點(diǎn)擊是否在特定 區(qū)域內(nèi)的。搞定,只要使它判斷總是在區(qū)域外,就不會(huì)執(zhí)行到ShellExecuteA那兒 去了。發(fā)送消息窗口和恢復(fù)窗口的廣告點(diǎn)擊的程序在不同的位置,也就說(shuō)在兩個(gè)地 方,這兩個(gè)地方都要修改,原理也都是一樣。具體修改方法詳見"發(fā)送消息窗口點(diǎn) 擊廣告的程序段"和"回復(fù)消息窗口點(diǎn)擊廣告的程序段"。(我們?yōu)榱藢?shí)現(xiàn)在點(diǎn)擊鼠 標(biāo)后出現(xiàn)IP地址和端口號(hào),在發(fā)送消息窗口添加了一個(gè)有關(guān)顯示的程序入口,我將 在后面講解)


這下廣告真的是去除了,既不能看到,也不能點(diǎn)進(jìn)去了。呵呵,開始我們的下一步 目標(biāo),顯示IP地址和端口號(hào)!!!


過(guò)去要想知道Oicq上朋友的IP地址只有借助民間的一些小工具程序或者采用包監(jiān)聽 程序,后者專業(yè)要求比較高,而且辨別率低,也不方便。一些小程序的確很管用, 但是畢竟沒有把這個(gè)功能直接做到Oicq程序上方便和可靠,利用Oicq內(nèi)部的很多數(shù) 據(jù)和結(jié)構(gòu)能獲得很多我們平常不容易獲得的信息。但是畢竟只有二進(jìn)制匯編代碼, 沒有源程序,程序的分析難度和工作量可想而知。經(jīng)過(guò)令人難以想象多次數(shù)的死機(jī) 和重起,以及極其艱辛的設(shè)置斷點(diǎn)跟蹤調(diào)試分析工作……(以下省略5201314字) ,終于粗略的獲得了我們感興趣的數(shù)據(jù)結(jié)構(gòu)指針以及它相關(guān)調(diào)用的位置。這段時(shí)間 是我最郁悶的時(shí)候,想起那段毫無(wú)人性的工作,就像已經(jīng)過(guò)上幸福生活的老同志回 憶起49年以前悲慘生活般的膽戰(zhàn)心驚且心有余悸……(以下省略520字)。還好我 挺過(guò)來(lái)了,終于在0042513D處找到了需要的指針地址。只要利用這個(gè)指針就能獲得 目標(biāo)對(duì)象的IP地址以及端口號(hào)。我們需要做的就是把這些信息顯示在以前的廣告位 置。


又是一項(xiàng)艱巨的任務(wù)放在我的面前,還好我有堅(jiān)定的信念、豐富的臨床經(jīng)驗(yàn)以及對(duì) 成功喜悅的企盼,還有對(duì)聊天MM住址的渴望,我一定會(huì)珍惜,不能像周星星一樣期 望再來(lái)一次……(再次省略若干,以免挨雞蛋)。 言歸正傳,既然獲得了關(guān)鍵的數(shù)據(jù)指針,那可以說(shuō)我們已經(jīng)成功了90%了,接下來(lái) 的就是顯示出來(lái)而已。但這也需要反復(fù)的試驗(yàn)和修改。讓我們好好來(lái)回味一下這一 過(guò)程:


首先,要實(shí)現(xiàn)新的功能毫無(wú)疑問需要添加代碼和數(shù)據(jù),以及執(zhí)行一定的API函數(shù), 所以需要找到適當(dāng)?shù)姆椒ㄌ砑哟a到原程序之中。完美的方法就是作一個(gè)外殼添加 程序,在原程序中添加所需要的段(數(shù)據(jù)段,程序段),以及添加Import表表項(xiàng), 以用于新的API函數(shù)的地址定位,還要修改PE文件頭中的各項(xiàng)相關(guān)信息,這就是病 毒的做法。這無(wú)疑非常的復(fù)雜和繁瑣,有興趣的同學(xué)可以參見我以前的文章"關(guān)于 95下可執(zhí)行文件的加密研究"。其實(shí)我們的要添加的程序量并不大,充其量也就零 零星星的幾百個(gè)字節(jié),而且用到的API函數(shù)也不多。所以我們采取了手動(dòng)修改添加 的方法,但也需要必要的條件和方法。看我以下的分析和方法:


PE可執(zhí)行文件的邏輯結(jié)構(gòu)是段,比如代碼段".text"、數(shù)據(jù)段".data"、資源段". rscs"等等。這些段大小都是按文件對(duì)齊,也就是說(shuō)段大小至少會(huì)按10h對(duì)齊,一般 是1000h(4096字節(jié)),這由文件頭中指定(鏈接的時(shí)候確定)。但是代碼也好數(shù) 據(jù)也好,不可能做到長(zhǎng)度剛好是對(duì)齊的。也就是說(shuō),段的大小是大于段中代碼或數(shù) 據(jù)實(shí)際大小的。他們之間的差值就是該段冗余的空間,這個(gè)空間被稱為"空隙"。有 一些簡(jiǎn)單的PE文件減肥軟件就是去掉"空隙"的方法來(lái)減肥的。這個(gè)"空隙"可以被我 們用來(lái)放置代碼、數(shù)據(jù)以及堆棧。我常用的分析PE文件文件頭的工具軟件是 Borland 以前在C++系列軟件中帶的"Tdump.exe"。讓我們看看實(shí)際分析的結(jié)果:


Object table:

# Name VirtSize RVA PhysSize Phys off Flags

-- -------- -------- -------- -------- -------- --------

01 .text 000D0637 00001000 000D1000 00001000 60000020 [CER]

02 .rdata 000320E8 000D2000 00033000 000D2000 40000040 [IR]

03 .data 00039848 00105000 00012000 00105000 C0000040 [IRW]

04 .rsrc 0003E4C0 0013F000 0003F000 00117000 40000040 [IR]


以上是用看到的Oicq.exe的段信息(它的Oject就是我們所說(shuō)的段)。我們肯定是 首選.text段進(jìn)行觀察(.text是代碼段,F(xiàn)lag為CER,意思就是包含代碼、可執(zhí)行 、可讀的意思(Contains code, Execute,Readable))。可以看到,.text段代碼 實(shí)際長(zhǎng)度D0637h,物理長(zhǎng)度D1000,文件偏移位置為1000h處。OK,這個(gè)段有 D1000h-D0637h=C9Ch的"空隙"。這個(gè)長(zhǎng)度完全可以滿足我們的需要了,而且代碼 數(shù)據(jù)堆棧都可以放在這個(gè)區(qū)域內(nèi)。眾所周知,要作為數(shù)據(jù)段使用,段的屬性( Flags)需要可寫。好了,只需要改寫".text"的屬性即可,可寫屬性的值是 80000000h,然后加上原來(lái)的60000020h后,就是C0000020h了,也就是變成了CERW 屬性(具體修改方法詳見"代碼段段屬性修改")。看看我們更改后的用Tdump分析 的結(jié)果。


Object table: # Name VirtSize RVA PhysSize Phys off Flags

-- -------- -------- -------- -------- -------- --------

01 .text 000D0637 00001000 000D1000 00001000 C0000020 [CRW]

02 .rdata 000320E8 000D2000 00033000 000D2000 40000040 [IR]

03 .data 00039848 00105000 00012000 00105000 C0000040 [IRW]

04 .rsrc 0003E4C0 0013F000 0003F000 00117000 40000040 [IR]


好了,找到了放置代碼數(shù)據(jù)和堆棧的地方,也就是其實(shí)偏移1000h+D0637h 的地方 。為了對(duì)齊邊界,我們采用D1640h這個(gè)值(文件偏移)。用Tdump 查看代碼段基址 (Code Base)和PE文件映象基址(Image Base),分別是1000h和400000h,可以算 出我們的程序在裝入后的實(shí)際地址,400000h+1000h+D0640h=4D1640h。也就是說(shuō)我 們的代碼在被系統(tǒng)裝入后在內(nèi)存4D1640處,這在以后程序跳轉(zhuǎn)處用到。


添加代碼的工作已經(jīng)做好,現(xiàn)在關(guān)鍵的問題就是編制具體的代碼,以用于IP地址和 端口號(hào)的保存和顯示。


首先是對(duì)對(duì)象數(shù)據(jù)中IP地址和端口信息的保存,我們?cè)讷@得該數(shù)據(jù)指針后(程序 00425157處),更改程序使程序直接跳轉(zhuǎn)到我們的保存程序中(4D1640)。該數(shù)據(jù) 的指針首址放在EAX,由于該段程序有些寄存器的值都有用,堆棧也不能亂壓。所 以我們首先修改了棧指針,使所有的堆棧活動(dòng)都在我們的"空隙"中進(jìn)行(堆棧頂端 4D1900)。然后保存幾個(gè)寄存器的值(壓棧)。IP地址和端口號(hào)分別在該數(shù)據(jù)結(jié)構(gòu) +214h和+218h的地方(也就是EAX+214h和EAX+218h)。IP地址是一個(gè)字符串指針 ,端口是個(gè)32位整數(shù)。我們要做的就是把他們都轉(zhuǎn)換成字符串,保存在自己的地盤 中。我們巧妙的用了一個(gè)wsPRintfA函數(shù)把字符串和端口號(hào)輸出到一個(gè)地址上(隨 便在我們的"空隙"中找個(gè)空閑的地址,我用的是4D1700,4D1720中放的是格式化字 符串"%s:%d")。實(shí)際這段程序翻譯成C語(yǔ)言就是printf("%s:%d",char *ip, int port),這樣我們就把字符串形式的數(shù)據(jù)保存在了數(shù)據(jù)區(qū)里。值得注意的是, 由于我們修改了原程序中的有用代碼用于跳轉(zhuǎn)程序,所以在我們的程序中就需要加 上(cmp dWord ptr [eax+000001DC], ecx),退出我們的程序之前恢復(fù)棧指針和 各寄存器,用一條無(wú)條件跳轉(zhuǎn)指令轉(zhuǎn)回到原程序繼續(xù)執(zhí)行。


細(xì)心的同學(xué)可能注意到我們沒有顯式的調(diào)用wsprintfA函數(shù),但是我們實(shí)際上是調(diào) 用了。在顯示IP的那段附加程序中調(diào)用SetWindowTextA的調(diào)用也是這樣。這是怎么 回事呢?我們知道所有API函數(shù)的調(diào)用前都需要重定位,這個(gè)過(guò)程發(fā)生在系統(tǒng)裝入 這個(gè)PE程序的時(shí)候。系統(tǒng)按照PE文件中Import表的內(nèi)容對(duì)API函數(shù)在程序中的地址 進(jìn)行填寫。我們沒有修改Import表,所以,如果直接寫上匯編代碼,系統(tǒng)是不會(huì)為 它定位的。由于Import表比較復(fù)雜,更改它是個(gè)非常繁瑣的事情。所以我們采用變 通的方法,既然系統(tǒng)為用到的API函數(shù)地址都作了重定位,所以API函數(shù)的地址信息 也就存在了。


具體的做法如下:

找到原程序中有調(diào)用wsprintfA的地方:

:0049CE30 FF1560274D00 Call USER32.wsprintfA

:0049CE36 83C410 add esp, 00000010

:0049CE39 EB1A jmp 0049CE55


實(shí)際的匯編代碼應(yīng)該是Call dword ptr [004D2760],我們就知道了wsprintfA的 地址是放在004D2760中。所以,我們只要間接的獲得這個(gè)調(diào)用的地址,這個(gè)地址就 是指向wsprintfA實(shí)際地址的二重指針。這樣我們就可以直接Call這個(gè)地址了。在 "顯示IP地址和串口的附加程序"中所用到的SetWindowTextA也是用這種方法調(diào)用的 。(具體修改方法詳見"彈出發(fā)送消息窗口之前的對(duì)象數(shù)據(jù)調(diào)用的程序段"和"保存 IP地址和端口的附加程序")


在把IP地址和端口保存為了字符串形式在4D1700h之后,今后只需要在需要的時(shí)候 顯示出來(lái)就行了。


前面我們提到了需要在點(diǎn)擊廣告后顯示IP地址。所以,我們?cè)邳c(diǎn)擊廣告的程序段 中間添加了跳轉(zhuǎn)到我們顯示程序的入口(4D1680h)。顯示程序的原理很簡(jiǎn)單,使 用SetWindowTextA函數(shù)把保存在4D1700h的字符串顯示在以前廣告的窗口中。在顯 示之前,判斷一下如果沒有IP地址的情況,如果是只有一個(gè)冒號(hào),說(shuō)明沒有IP地址 ,就簡(jiǎn)單的寫上一個(gè)"0"。調(diào)用SetWindowTextA函數(shù)的方法在前面已經(jīng)提到。需要 注意還有兩個(gè)重要的問題:


我們從什么地方獲得SetWindowTextA函數(shù)需要的一個(gè)參數(shù)??廣告窗口句柄呢? 我特意在"發(fā)送消息窗口點(diǎn)擊廣告的程序段"中寫出了在點(diǎn)擊廣告時(shí)有一個(gè)Call USER32.GetWindowRect調(diào)用的代碼,這個(gè)函數(shù)同樣需要窗口句柄。[ESI+160h]就是 USER32.GetWindowRect需要的廣告窗口句柄,我們就可以利用這個(gè)句柄調(diào)用 SetWindowTextA,使字符串顯示在廣告窗口上。


還有就是由于原來(lái)的廣告窗口是用于圖片的顯示,所以不能用來(lái)顯示字符。它的窗 口樣式中有個(gè)SS_ETCHEDFRAME的值。我們需要去掉它并加上用于垂直居中和水平居 中的兩個(gè)樣式SS_CENTER和SS_CENTERIMAGE。一般靜態(tài)對(duì)話框中的窗口元素(控件 )都是靜態(tài)的保存在資源段中,而不是程序動(dòng)態(tài)生成的。所以我們不需要改程序, 只需要改掉資源段中的值就可以了。具體改法詳見"消息發(fā)送對(duì)話框中廣告窗口樣 式的更改"。


程序基本上改完了,終于可以享受我們辛苦改動(dòng)的結(jié)果了,不料Oicq 820版有檢查 文件是否被修改過(guò)這一手。同樣,阻止我們通向成功道路上的任何障礙只能無(wú)情的 被我們消滅,這個(gè)提示文件已被修改的對(duì)話框也只能被我們搞調(diào)。幸好搞它非常的 簡(jiǎn)單,把斷點(diǎn)設(shè)置在MessageBoxA上,等蹦出斷點(diǎn)后,查找前面的代碼,找到判斷 是否彈出對(duì)話框的代碼并且無(wú)情的干掉,詳見"彈出文件修改警告框的程序段"。 大功告成!學(xué)到不少東西吧!這么多代碼自己慢慢用UltraEdit查找修改吧,知道 敲錯(cuò)一個(gè)的后果嗎?呵呵,不是死機(jī)就是重起。考慮到一些初級(jí)DIY用戶的需求, 我把修改好的EXE文件用專業(yè)的Patch軟件"CodeFusion"作成了一個(gè)18K的Patch執(zhí)行 文件。需要的朋友額可以到我主頁(yè)上去下載。


好了,課程結(jié)束。如果有時(shí)間的話,還可以對(duì)Oicq作很多的改造。但無(wú)疑這個(gè)人 物是非常艱巨而復(fù)雜的,但是只要你有必勝的信心以及充沛的精力,并且敢于接受 這種毫無(wú)人性任務(wù)的挑戰(zhàn),還有視一起PPMM為糞土的高尚眼光和能忍受對(duì)自己無(wú)情 虐待的勇氣,你會(huì)成功的!(¥……#%%……※#!¥#%啊啊啊啊~~~~~ ~~呃~~,被前排學(xué)生暴扁)。


為OICQ添加顯示IP和端口功能


打開廣告文件的程序段

更改以前:|

:0042AF5B FF152C244D00 Call KERNEL32.CreateFileA ?

文件

:0042AF61 8BF8 mov edi, eax ?

:0042AF63 83FFFF cmp edi, FFFFFFFF ?


句柄(打開失敗)

:0042AF66 897D08 mov dword ptr [ebp+08], edi ?

:0042AF69 0F84EB000000 je 0042B05A :0042AF6F 8D45F4 lea eax, dword ptr [ebp-0C]

:0042AF72 50 push eax

:0042AF73 57 push edi

更改以后:

:0042AF5B FF152C244D00 Call KERNEL32.CreateFileA ?


文件

:0042AF61 8BF8 mov edi, eax ?

:0042AF63 83FFFF cmp edi, FFFFFFFF 更改以后:

:00443B56 33FF xor edi, edi

:00443B58 397DDC cmp dword ptr [ebp-24], edi

:00443B5B EB5C jmp 00443BB9 ?


手工更改方法:

查找16進(jìn)制代碼:39 7D DC 75 5C

更改為: EB

文件偏移為43B5Bh

發(fā)送消息窗口點(diǎn)擊廣告的程序段

更改以前:

:00432B4E 50 push eax

:00432B4F FFB660010000 push dword ptr [esi+00000160] ;

esi+160是窗口句柄

:00432B55 FF1578274D00 Call USER32.GetWindowRect

:00432B5B 8D45DC lea eax, dword ptr [ebp-24]

:00432B5E 8BCE mov ecx, esi

:00432B60 50 push eax

:00432B61 E8A6110700 call 004A3D0C

:00432B66 FF7510 push [ebp+10]

:00432B69 8D45DC lea eax, dword ptr [ebp-24]

:00432B6C FF750C push [ebp+0C]

:00432B6F 50 push eax

:00432B70 FF15B8274D00 Call USER32.PtInRect

:00432B76 85C0 test eax, eax ?

區(qū)域內(nèi)點(diǎn)擊

:00432B78 0F84FF000000 je 00432C7D

:00432B7E 6A10 push 00000010 ?

:00432B80 FF157C274D00 Call USER32.GetKeyState

:00432B86 33DB xor ebx, ebx

:00432B88 663BC3 cmp ax, bx

:00432B8B 7D0F jge 00432B9C

:00432B8D C705D874510001000000 mov dword ptr [005174D8], 00000001

:00432B97 E9E8000000 jmp 00432C84


更改以后:

:00432B70 FF15B8274D00 Call USER32.PtInRect

:00432B76 85C0 test eax, eax

:00432B78 0F84FF000000 je 00432C7D

:00432B7E 6A10 push 00000010 ?

區(qū)域內(nèi)點(diǎn)擊

:00432B80 FF157C274D00 Call USER32.GetKeyState

:00432B86 E9F5EA0900 jmp 004D1680 ?

示程序當(dāng)中

:00432B8B 7D0F jge 00432B9C

:00432B8D C705D874510001000000 mov dword ptr [005174D8], 00000001

:00432B97 E9E8000000 jmp 00432C84


手工更改方法:

查找16進(jìn)制代碼:33 DB 66 3B C3 7D 0F C7

更改為: E9 F5 EA 09 00

文件偏移為32B86h

回復(fù)消息窗口點(diǎn)擊廣告的程序段

更改以前:

:0046221C FF15B8274D00 Call USER32.PtInRect ?

廣告區(qū)域內(nèi)點(diǎn)擊

:00462222 85C0 test eax, eax

:00462224 0F84D8000000 je 00462302 ?

更改以后:

:0046221C FF15B8274D00 Call USER32.PtInRect ?

廣告區(qū)域內(nèi)點(diǎn)擊

:00462222 85C0 test eax, eax

:00462224 E9D9000000 jmp 00462302 ?


手工更改方法:

查找16進(jìn)制代碼:0F 84 D8 00 00 00 8B 46 56

更改為: E9 D9 00 00 00 90

文件偏移為62224h


彈出發(fā)送消息窗口之前的對(duì)象數(shù)據(jù)調(diào)用的程序段

更改以前:

:0042513D 56 push esi

:0042513E 8BF1 mov esi, ecx

:00425140 FFB6F4000000 push dword ptr [esi+000000F4]

:00425146 FFB6B0000000 push dword ptr [esi+000000B0]

:0042514C E879810300 call 0045D2CA ?

結(jié)構(gòu)首址

:00425151 33C9 xor ecx, ecx

:00425153 3BC1 cmp eax, ecx ?

成功

:00425155 7431 je 00425188 結(jié)構(gòu)首址

:00425151 33C9 xor ecx, ecx

:00425153 3BC1 cmp eax, ecx ?

成功

:00425155 7431 je 00425188 ?

:00425157 E9E4C40A00 jmp 004D1640 ?

IP地址和端口的程序中

:0042515C 90 nop ?


手工更改方法:

查找16進(jìn)制代碼:39 88 DC 01 00 00 75 08

更改為: E9 E4 C4 0A 00 90

文件偏移為25157h

顯示IP地址和串口的附加程序

:004D1680 803D00174D003A cmp byte ptr [004D1700], 3A ?

字符內(nèi)存區(qū)第一個(gè)字符是不是冒號(hào),是就說(shuō)明沒有IP地址

:004D1687 7509 jne 004D1692 ?


:004D1689 66C70500174D003000 mov word ptr [004D1700], 0030 ?

字符內(nèi)存區(qū)寫上一個(gè)"0"

:004D1692 6800174D00 push 004D1700 ?


:004D1697 FFB660010000 push dword ptr [esi+00000160] 告窗口的窗口句柄

:004D169D A1E8714A00 mov eax, dword ptr [004A71E8] ?

他地方調(diào)用SetWindowTextA的地址

:004D16A2 FF10 call dword ptr [eax] ?

重定位好了的SetWindowTextA的地址

:004D16A4 E9D415F6FF jmp 00432C7D ?

之后

:004D16A9 90 nop ?

對(duì)齊好看

:004D16AA 90 nop

:004D16AB 90 nop

:004D16AC 90 nop

:004D16AD 90 nop

:004D16AE 90 nop

:004D16AF 90 nop

wsprintf所用到的模式字符串:

:004D1720 25733A2564 "%s:%d"


手工更改方法:

在文件偏移D1680處添加16進(jìn)制代碼:

80 3D 00 17 4D 00 3A 75-09 66 C7 05 00 17 4D 00

30 00 68 00 17 4D 00 FF-B6 60 01 00 00 A1 E8 71

4A 00 FF 10 E9 D4 15 F6- FF 90 90 90 90 90 90 90


在文件偏移D1720處添加16進(jìn)制代碼:

25 73 3A 25 64

保存IP地址和端口的附加程序

:004D1640 8BDC mov ebx, esp ?



:004D1642 BC00194D00 mov esp, 004D1900 ?

針到無(wú)用的內(nèi)存區(qū)域

:004D1647 50 push eax ?

寄存器

:004D1648 51 push ecx

:004D1649 52 push edx

:004D164A 56 push esi

:004D164B FFB018020000 push dword ptr [eax+00000218] ?

象端口的地址

:004D1651 FFB014020000 push dword ptr [eax+00000214] P

地址的字符串指針

:004D1657 6820174D00 push 004D1720 ?

是printf的模式字符

:004D165C 6800174D00 push 004D1700 ?

:004D1661 8B3532CE4900 mov esi, dword ptr [0049CE32] 他地方調(diào)用wsprintfA的地址

:004D1667 FF16 call dword ptr [esi] ?

重定位好了的wsprintfA的地址

:004D1669 83C410 add esp, 00000010 ?

:004D166C 5E pop esi ?


:004D166D 5A pop edx

:004D166E 59 pop ecx

:004D166F 58 pop eax

:004D1670 3988DC010000 cmp dword ptr [eax+000001DC], ecx ?

原程序00425157處被改掉的有用代碼

:004D1676 8BE3 mov esp, ebx ?



:004D1678 E9E03AF5FF jmp 0042515D ?

:004D167D 90 nop

:004D167E 90 nop

:004D167F 90 nop


手工更改方法:

在文件偏移D1640處添加16進(jìn)制代碼:

8B DC BC 00 19 4D 00 50-51 52 56 FF B0 18 02 00

00 FF B0 14 02 00 00 68-20 17 4D 00 68 00 17 4D

他地方調(diào)用wsprintfA的地址

:004D1667 FF16 call dword ptr [esi] ?

重定位好了的wsprintfA的地址

:004D1669 83C410 add esp, 00000010 ?

:004D166C 5E pop esi ?


:004D166D 5A pop edx

:004D166E 59 pop ecx

:004D166F 58 pop eax

:004D1670 3988DC010000 cmp dword ptr [eax+000001DC], ecx ?

原程序00425157處被改掉的有用代碼

:004D1676 8BE3 mov esp, ebx ?



:004D1678 E9E03AF5FF jmp 0042515D ?

:004D167D 90 nop

:004D167E 90 nop

:004D167F 90 nop


手工更改方法:

在文件偏移D1640處添加16進(jìn)制代碼:

8B DC BC 00 19 4D 00 50-51 52 56 FF B0 18 02 00

00 FF B0 14 02 00 00 68-20 17 4D 00 68 00 17 4D


消息發(fā)送對(duì)話框中廣告窗口樣式的更改

更改以前的窗口樣式(style)是50000012h,

WS_CHILDWINDOW|WS_VISIBLE|SS_LEFT|SS_ETCHEDFRAME

更改以后的窗口樣式(style)是50000201h,

WS_CHILDWINDOW|WS_VISIBLE|SS_LEFT|SS_CENTER|SS_CENTERIMAGE

手工更改方法:

在文件偏移141EFCh處把

12 00 00 50

改為 02 01 00 50


代碼段段屬性修改

更改以前的代碼段屬性為60000020,CER(包含代碼,可執(zhí)行,可讀)

更改以后的代碼段屬性為C0000020,CRW(包含代碼,可讀寫和執(zhí)行)

手工更改方法:

在文件偏移21Ch處把

20 00 00 60

改為 20 00 00 C0


上一篇:公歷到農(nóng)歷的轉(zhuǎn)換法

下一篇:kylix開發(fā)工具鋪平Linux應(yīng)用之路

發(fā)表評(píng)論 共有條評(píng)論
用戶名: 密碼:
驗(yàn)證碼: 匿名發(fā)表
學(xué)習(xí)交流
熱門圖片

新聞熱點(diǎn)

疑難解答

圖片精選

網(wǎng)友關(guān)注

主站蜘蛛池模板: 绥德县| 安庆市| 沙河市| 邓州市| 西华县| 长武县| 山丹县| 新乐市| 扎囊县| 临漳县| 恩施市| 赫章县| 广河县| 米林县| 景泰县| 舟山市| 湖南省| 莒南县| 广饶县| 商河县| 无为县| 赣榆县| 博湖县| 凤庆县| 延庆县| 进贤县| 顺义区| 郸城县| 股票| 东源县| 嵊泗县| 平潭县| 桐城市| 海门市| 高唐县| 娱乐| 武鸣县| 五峰| 平原县| 长顺县| 肥西县|