PE文件(六)新增節-添加代碼作業

一.手動新增節添加代碼

1.當預備條件都滿足,節表結尾沒有相關數據時:

現在我們將ipmsg.exe用winhex打開,在節的最后新增一個節用于存放我們要增加的數據

注意:飛鴿的文件對齊和內存對齊是一致的

先判斷節表末尾到第一個節之間是否夠80字節:可選PE頭中SizeOfHeaders值為0x1000,標準PE頭中SizeOfOptionalHeader獲取可選pe頭的大小值為0xE0,NumberOfSections獲取節的數量為0x4,DOS頭中e_lfanew獲取NT的地址為0xE0,PE簽名大小0x04,標準PE頭大小0x14,通過0x1000 - (0xE0 + 0x4 + 0x14 + 0xE0 + 0x4 * 0x28)= 0xD88獲取節表到節之間的空白區大小,因為0xD88 > 0x50,所以可以存下新增節表。在實際操作中,我們肉眼便可判斷空間是否足夠

我們將.text節表(注意是第一個節表)的40字節復制一份到節表末尾地址0x278:選中.text40字節復制,再選中0x278到后面40字節數據粘貼,這樣我們就把.text節表內容復制一份添加到節表末尾作為新節表的40字節

注:winhex中write是覆蓋選中數據,paste是插入

接著為了滿足Windows格式要求將新增節后面的40字節數據改為0

修改PE標準頭中的NumberOfSections值為4 + 1 = 5

先看一下文件對齊和內存對齊都是0x1000,所以我們新增的節大小為了方便后面修改可以設定為0x1000字節大小,這已經足夠存放我們想要添加的代碼了。(如果文件對齊和內存對齊不一樣,那可以選擇兩個的最小公倍數,方便后面的修改)

接著修改可選PE頭中SizeOfImage值:由于我們想要新增節的大小為0x1000(考慮了內存對齊),所以將SizeOfImage + 0x1000即可,0x3D000 + 0x1000 = 0x3E000

然后修改節表中的字段:

Name:名字改為.tttt 2E 74 74 74 74

Misc.VirtualSize:直接寫0x1000,即內存中對齊前的長度

VirtualAddress:0x30000 + 0x4000 + 0x4000 + 0x4000 + 0x4000 = 0x3D000 第一個節的VirtualAddress時0x300000,一共四個節,每個節對齊后是0x4000大小,加起來就是0xD0000

SizeOfRawData:0x1000

PointerToRawData:0x2C000 + 0xD000 = 0x39000

屬性值不用變,因為復制的.text節表已經滿足了可執行的屬性

現在我們要在文件第四個節末添加新節,選中節末最后一個數據,右鍵–edit–paste zero bytes–輸入新節的大小十進制大小4096,將其初始化為0

新增節后我們將要添加的代碼加到新節中,這里就使用前兩節應用的shellcode,就是運行飛鴿后先彈一個框,再正常運行,但是此時還要計算一下E8和E9后面的值:

E8后面的值:X = 0x77D36476 - (0x400000 + 0x3D000 + 0x8 + 0x5) = 0x778F9469 注意0x77D36476為MessageBoxA API地址

E9后面的值:X = 0x400000 + 0x1D26F - (0x400000 + 0x3D000 + 0xD + 0x5) = 0xFFFE025D

所以將完整的代碼(硬編碼)添加到新節中:

最后將OEP的值改為0x3D000

保存,運行后發現先彈框再正常打開程序,成功

2.節表結尾有數據整體上移的情況

我們打開記事本復件notepad_test.exe,找到節表末,發現這里有一些我們不認識的數據,而且是緊挨著節表的,所以這種情況下我們沒法在節表末新增節表

此時我們發現DOS頭結尾到PE簽名之間是垃圾數據,如果將PE簽名一直到節表末之間的所有數據整體上緊挨著DOS頭后面,接著將e_lfanew字段值改為0x40,此時節表末便空出來了0xE8 - 0x40 = 0xA8字節內存,足夠存放80字節,即兩個節表大小了

選中0xE8到0x258的全部數據復制,從0x40開始write覆蓋0x258 - 0xE8 = 0x170字節數據,接著將此時節表末尾多空出來的數據改為0,再修改e_lfanew的值為0x40即可。此時0x1B0到0x258之間就空出來了0xA8字節,在這里新增節即可

后面新增節的過程與條件都滿足時一模一樣,不再演示

二.代碼實現新增一個節,并添加代碼

三.編程實現擴大最后一個節,并添加代碼

?3.整體上移后空間還不夠,擴大最后一個節

如果整體上移覆蓋DOS Stub后空間還不夠兩節表寬度,那么就要采用擴大最后一個節的方式。注意不要擴大其他的節,因為如果不是最后一個節擴大的話,其他的節擴大會造成其下面的全部節的數據偏等等諸多問題

需要修改SizeOfImage,比如我想擴大500字節,那么要滿足內存對齊,所以SizeOfImage應該 + 0x1000,這里為了方便后面的修改,直接就按照內存對齊來擴大,所以擴大0x1000字節即可

接著就是修改最后一個節表的屬性:

VirtualAddress和PointerToRawData的值都不用改變

VirtualSize:SizeOfImage - VirtualAddress + Ex,再內存對齊(這里為了方便,Ex可以直接選文件對齊粒度和內存對齊粒度的最小公倍數,這樣就不用再考慮內存對齊了),就是最后注入shellcode時不好判斷Ex+原來空白區大小是否足夠存下shellcode了,不過可以直接在Ex區域注入shellcode即可,不用考慮原來此節的空白區

SizeOfRawData:因為文件對齊一般都為0x200或0x1000,這里直接等于VirtualSize即可(因為VirtualSize此時肯定即是0x200的整數倍,也是0x1000的整數倍)

因為擴大節的目的是為了添加shellcode,所以還要看最后一個節的屬性是否可執行

此時就可以在最后一個節的末尾到結束這之間添加代碼了

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/diannao/14550.shtml
繁體地址,請注明出處:http://hk.pswp.cn/diannao/14550.shtml
英文地址,請注明出處:http://en.pswp.cn/diannao/14550.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

奧德彪的幸福VS碼農的幸福

奧德彪的幸福 非洲國家布隆迪是一個全球最不發達國家之一,大部分居民以農業為生,其中包括香蕉,人們拿香蕉用來做飯也用來釀酒。 香蕉產地距離布隆迪首都布瓊布拉很遠,而這個國家又缺乏規模化的物流企業,于是就誕生了…

Linux進程--函數 system 和 popen 的區別

system() 和 popen() 是 C 語言中用于執行外部命令的兩個函數,它們的功能類似,但在使用方式和特性上有一些區別。 system() system() 函數允許您在程序中執行外部命令,并等待該命令執行完成后繼續執行程序。其基本語法如下: in…

如何使用腳本執行SQL Server 數據庫壓縮備份?

SQL Server 數據庫壓縮備份是否可以實現? 使用時,SQL Server 數據庫會變得非常大,備份也是如此。它們占用大量磁盤空間,并且每次備份數據庫或四處移動都非常耗時。因此,您可能想知道是否有任何方法可以創建壓縮備份。…

pikachu靶場(SQL注入基于布爾的盲注)python實現

import requests from bs4 import BeautifulSoupurl "http://localhost:8086/pikachu-master/vul/sqli/sqli_blind_b.php"def get_database_name(url):dataname # 初始化一個空字符串用于存儲數據庫名dict abcdefghijklmnopqrstuvwxyz # 數據庫名可能存在這些…

docker實戰之搭建MYSQL8.0主從同步

目錄 環境配置容器創建主服務器創建MYSQL容器新增my.cnf文件創建用戶并授權 從服務器創建MYSQL容器新增my.cnf文件重啟MYSQL容器配置主從同步 驗證主從同步彩蛋 MySQL 主從同步(Master-Slave Replication)是一種常用的解決方案,它允許一個主服…

Golang實現根據文件后綴刪除文件和遞歸刪除文件

概述 這個功能會非常強大,因為在日常工作中,我通常會遇到需要批量刪除文件的場景,通過這個方法,再結合我的另一個 命令行開發框架,能夠很輕松的開發出這個功能。 代碼 package zdpgo_fileimport ("errors"…

LabVIEW與串口通訊在運行一段時間后出現數據接收中斷的問題

這些問題可能與硬件、軟件或通信協議有關。以下是詳細的原因分析和可能的解決方案: 一、硬件原因 串口線纜或接口問題: 由于長時間使用,串口線纜可能出現接觸不良或損壞。接口松動也可能導致通訊中斷。 解決方案:檢查并更換串口…

C語言基礎-內存申請和釋放

在C語言中,malloc 和 free 是用于動態內存分配和釋放的函數。而在C中,new 和 delete 提供了類似的功能,但它們之間有一些重要的區別。 1. malloc 和 free malloc malloc 函數用于在堆上動態地分配指定字節數的內存。它的原型在 stdlib.h 頭…

【Text2SQL 經典模型】X-SQL

論文:X-SQL: reinforce schema representation with context ???? Microsoft, arXiv:1908.08113 X-SQL 與 SQLova 類似,使用 BERT style 的 PLM 來獲得 representation,只是融合 NL question 和 table schema 的信息的方式不太一樣&#…

一種獲取java代碼結構的實現思路

一種獲取java代碼結構的實現思路 有時,我們需要獲取java文件里的代碼結構,即,只需要里面的class定義、方法聲明、屬性定義。不需要額外的方法實現 這里提供一下實現思路: 采用語法解析器Tree-sitter對java代碼進行解析,獲取里面的方法實現遍歷第一步獲取到的方法列表,在源…

Linux c開發線程鎖和條件變量使用

#include <pthread.h> #include <stdio.h> #include <unistd.h>pthread_mutex_t mutex PTHREAD_MUTEX_INITIALIZER; pthread_cond_t cond PTHREAD_COND_INITIALIZER;void* thread_function(void* arg) {printf("線程等待喚醒,鎖定互斥量...\n");…

代碼隨想錄算法訓練營第十七天 | 110. 平衡二叉樹、257. 二叉樹的所有路徑、404. 左葉子之和

[LeetCode] 110. 平衡二叉樹 [LeetCode] 110. 平衡二叉樹 文章解釋 [LeetCode] 110. 平衡二叉樹 視頻解釋 給定一個二叉樹&#xff0c;判斷它是否是 平衡二叉樹 示例 1&#xff1a; 輸入&#xff1a;root [3,9,20,null,null,15,7] 輸出&#xff1a;true示例 2&#xff1a; 輸…

HTTP 響應分割漏洞

HTTP 響應分割漏洞 1.漏洞概述2.漏洞案例 1.漏洞概述 HTTP 響應拆分發生在以下情況&#xff1a; 數據通過不受信任的來源&#xff08;最常見的是 HTTP 請求&#xff09;進入 Web 應用程序。該數據包含在發送給 Web 用戶的 HTTP 響應標頭中&#xff0c;且未經過惡意字符驗證。…

CSS常用的兩種定位方式

在CSS中&#xff0c;absolute 和 relative 是兩種常用的定位方式&#xff0c;分別通過 position 屬性進行設置。它們用于控制元素在頁面中的位置。理解這兩種定位方式對于布局和設計響應式頁面非常重要。 position: relative 定義 relative 定位是相對自身原始位置進行偏移。…

Python 魂斗羅的音效和動漫效果

一、實現游戲音效 音效是游戲中不可或缺的一部分&#xff0c;它可以為游戲增添氛圍和趣味性。在 Pygame 中&#xff0c;我們可以使用 pygame.mixer 模塊來播放音效。下面是一個簡單的示例代碼&#xff0c;演示如何在游戲中播放音效&#xff1a; import pygamepygame.mixer.init…

windows平臺vcpkg安裝

1. 克隆vcpkg倉庫 git clone https://github.com/microsoft/vcpkg 2.運行bootstrap-vcpkg.bat下載vcpkg.exe 3.運行驗證 4.使用VCPKG安裝OPENSSL 5.安裝成功

VC++學習(1)——環境準備,參考文檔等,初步入門VC++

目錄 引出環境準備&#xff0c;參考文檔第一講 初步入門鍵盤按下的消息鼠標左鍵按下報錯源碼新建一個工程 總結 引出 VC學習&#xff08;1&#xff09;——環境準備&#xff0c;參考文檔等&#xff0c;初步入門VC C是一門編程語言,他的語法標準和語言特性是全球統一的 VC是微…

計算機系統概述習題

選擇題 電子計算機問世至今&#xff0c;新型計算機不斷推陳出新&#xff0c;不管怎么更新&#xff0c;依然具有“存儲程序”的特點&#xff0c;最早提出這種概念的是(B) A. 巴貝奇 B. 馮*諾伊曼 C. 帕斯卡 D. 貝爾 B下列描述中___是正確的。 A. 控制器能理解&#xff0c;解釋…

中國主要城市房價指數數據集(2011-2024)

數據來源&#xff1a;東方財富網 時間跨度&#xff1a;2011年1月 - 2024年4月 數據范圍&#xff1a;中國主要城市 包含指標&#xff1a; 日期、城市 新建商品住宅價格指數-同比 新建商品住宅價格指數-環比 新建商品住宅價格指數-定基 二手住宅價格指數-環比 二手住宅價格指…

Visual Studio 調試及快捷鍵

文章目錄 原文連接環境一、調試器的基本使用1、更改執行流2、快速執行某一條代碼斷點設置條件斷點查看內存信息查看調用堆棧查看寄存器信息設置監視斷點調試二、快捷鍵一、窗口快捷鍵二、查找相關快捷鍵三、代碼快捷鍵原文連接 【教程】visual studio debug 技巧總結 環境 一…