原创 VirtualAlloc 申請可執行內存

假設我有一個數組,存儲了加法函數的二進制代碼(硬編碼) 加法函數 int __cdecl Plus(int x, int y) { return x + y; } 硬編碼數組 // Plus 的硬編碼 unsigned cha

原创 使用def導出動態鏈接庫(VC6)

使用.def文件導出DLL的好處是可以隱藏函數名,提高安全性。 首先新建DLL工程,編寫函數,因爲使用def導出,所以編寫函數聲明和定義和普通exe的編寫方式一樣。 MyDll.h // MyDll.h: interface fo

原创 打印導出表信息

導出表是數據目錄中的第一張表,要注意 VirtualAddress 是內存偏移。導出表中的三張表地址也是內存偏移。 代碼 // 打印導出表 VOID PrintExportTable(LPVOID pFileBuffer) {

原创 PE新增節

原理 新增節的原理是在最後一個節表後面新增一個節表,然後在ImageBuffer後面新增一塊內存;要注意新增節表後必須留有一個節表空間(40字節)的0,否則會出錯。有些程序如notepad,最後一個節表後面是一些數據,刪除後程序無

原创 PE合併節

把所有節合併成一個節,好處是可以騰出節表空間,保證能成功新增節。 方法是先拉伸成imagebuffer,修改第一個節的VirtualSize = SizeOfRawData = SizeOfImage - VirtualAddre

原创 動態鏈接庫編寫與使用(VC6)

靜態鏈接庫編寫與使用 與靜態鏈接相比,動態鏈接更靈活,修改動態鏈接庫的代碼不需要重新編譯exe程序,如果說靜態鏈接庫是編譯階段的模塊化,那麼動態鏈接就是真正的運行時模塊化。 下面將演示使用VC6編寫動態鏈接庫(dll),然後在另一

原创 靜態鏈接庫編寫與使用(VC6)

靜態庫是一種模塊化技術,可以將獨立的代碼編譯到 lib 文件中,供其他程序使用。其他程序在鏈接階段可以將靜態庫連接到程序內部,與動態鏈接庫相比,靜態鏈接的優點是可以生成單獨的exe,體積比使用動態鏈接庫也要小一些;缺點是修改靜態庫

原创 PE擴大最後一個節

增加 SizeOfImage, VirtualSize, SizeOfRawData, 注意文件對齊和內存對齊即可。 擴大節函數 // 擴大最後一個節 // 返回新文件的大小,失敗返回0 DWORD ExpandLastSecti

原创 向代碼節添加代碼編程實現

原理 分析PE結構,找到第一個節,假設它是代碼節(後面的實驗都是基於這個前提),獲取其內存偏移 VirtualAddress,計算它最後一條指令的偏移的下一個字節,作爲代碼插入點。插入調用MessageBoxA的硬編碼,和jmp到

原创 RvaToFileOffset 內存偏移轉成文件偏移(滴水課後作業)

題目說明 將內存偏移RVA轉成文件偏移FOA的函數; 思路是遍歷節表,比較節內存偏移VirtualAddress和RVA,確定RVA所在的節之後,計算RVA距離所在節首地址的偏移offset,然後返回offset+PointerT

原创 FileBuffer 與 ImageBuffer 互相轉換(滴水PE作業)

主函數 // buffer.cpp : Defines the entry point for the console application. // #include "stdafx.h" int main(int argc

原创 PE節表屬性

原创 PE頭屬性

原创 x64dbg 搜索多條指令 ( find sequence of commands )

和 OD 不同,x64dbg沒有提供 find sequence of commands 功能,要想搜索多條指令,可以用特徵碼匹配來代替。 比如,搜索兩條指令 可以右鍵選擇搜索–當前區域–匹配特徵,把兩條指令的字節碼填入搜索即可

原创 【備忘】debian重裝系統後需要做的事

換國內原 新建用戶(組),設置權限,家目錄,Sudo權限暫時不給 要安裝的軟件 ncat nginx vim / gvim screen gcc sudo ifconfig SSH配置遠程登錄權限和防掉線 ls 配色