ㄦ?-鍝斿摡鍝斿摡【戳藍字免費領取最新網絡安全技術視頻教程+筆記資料學習】
Sysinternals Suite是微軟發布的一套非常強大的免費工具程序集。
下載鏈接:https://docs.microsoft.com/zh-cn/sysinternals/downloads/sysinternals-suite
其中包含:(只列舉部分)
AccessChk
為了確保創建安全的環境,Windows 管理員通常需要了解特定用戶或用戶組對文件、目錄、注冊表項和 Windows 服務等資源具有哪種訪問權限。AccessChk 能夠通過直觀的界面和輸出快速回答這些問題。
AccessEnum
這一簡單但強大的安全工具可以向您顯示,誰可以用何種訪問權限訪問您系統中的目錄、文件和注冊表項。使用此工具可查找權限漏洞。
Ctrl2cap
這是一個內核模式的驅動程序,可在鍵盤類驅動程序上演示鍵盤輸入過濾,以便將 Caps-Lock 轉變為控制鍵。在此級別過濾允許在 NT 剛好要“看到”鍵之前變換和隱藏鍵。Ctrl2cap 還顯示如何使用 NtDisplayString() 打印初始化藍屏的消息。
DebugView
Sysinternals 的另一個優先程序:此程序截取設備驅動程序對 DbgPrint 的調用和 Win32 程序生成的 OutputDebugString。它允許在不使用活動的調試器的情況下,在本地計算機上或通過 Internet 查看和記錄調試會話輸出。
Desktops
使用這一新的實用工具可以創建最多四個虛擬桌面,使用任務欄界面或熱鍵預覽每個桌面上的內容并在這些桌面之間輕松地進行切換。
NTFSInfo
用 NTFSInfo 可以查看有關 NTFS 卷的詳細信息,包括主文件表 (MFT) 和 MFT 區的大小和位置,以及 NTFS 元數據文件的大小。
PortMon
通過高級監視工具監視串行端口和并行端口的活動。它能識別所有的標準串行和并行 IOCTL,甚至可以顯示部分正在發送和接收的數據。3.x 版具有強大的新 UI 增強功能和高級篩選功能。
ProcDump
這一新的命令行實用工具旨在捕獲其他方式難以隔離和重現 CPU 峰值的進程轉儲。該工具還可用作用于創建進程轉儲的一般實用工具,并可以在進程具有掛起的窗口或未處理的異常時監視和生成進程轉儲。
Process Explorer
找出進程打開了哪些文件、注冊表項和其他對象以及已加載哪些 DLL 等信息。這個功能異常強大的實用工具甚至可以顯示每個進程的所有者。
PCHunter是一款系統增強工具,可以對系統內核等實現修改以及系統其他功能微調,相當專業的功能。
下載鏈接:http://www.xuetr.com/
本工具目前初步實現如下功能:
火絨劍-互聯網安全分析軟件(HRSword),它是火絨安全軟件里的高級工具,適用Windows系統的安全分析輔助工具,具有系統動作監控、文件管理、進程管理、啟動項管理、注冊表管理、服務管理、驅動模塊、網絡管理、系統內核查看、鉤子掃描等功能。用它可以查看各類系統信息,通過監控分析系統各種行為。
下載鏈接:https://www.huorong.cn/
Process Monitor 是一種用于 Windows 的高級監控工具,它顯示 實時文件系統、注冊表和進程/線程活動。 它結合了 兩個遺留 Sysinternals 實用程序的功能, Filemon 和 Regmon ,并添加了廣泛的增強功能列表,包括豐富和 無損過濾,會話等綜合事件屬性 ID 和用戶名、可靠的進程信息、完整的線程堆棧 為每個操作提供集成符號支持,同時記錄 到一個文件,等等。 其獨特的強大功能將使 Process Monitor 是系統故障排除中的核心實用程序 惡意軟件搜尋工具包。
下載鏈接:https://docs.microsoft.com/en-us/sysinternals/downloads/procmon
Process Monitor 包括強大的監控和過濾功能, 包含:
PowerTool 一款免費強大的進程管理器,支持進程強制結束,可以Unlock占用文件的進程,查看文件/文件夾被占用的情況,內核模塊和驅動的查看和管理,進程模塊的內存的dump等功能。
下載鏈接:https://download.csdn.net/download/weixin_44895005/85044709
主要功能:
所有進程的枚舉(包括內核中隱藏的進程)
所有文件的枚舉(包括內核中隱藏的文件)
進程中所有模塊的枚舉(包括內核中隱藏的模塊)
進程的強制結束
進程中模塊的強制卸載
模塊被哪些進程加載的檢索
查看文件/文件夾被占用的情況
可以Unlock占用文件的進程
文件/文件夾的粉碎(可強刪Unlocker1.8.9/金山/超級巡警文件粉碎機無法刪除的頑固文件)
阻止文件粉碎后用還原軟件還原(采用美國國防部DOD 5220.22-m標準阻止文件還原)
用磁盤解析技術檢索硬盤數據
內核模塊和驅動的查看和管理
啟動項的查看和管理
14.系統服務的查看和管理
集成文件粉碎功能到系統右鍵菜單
16.消息鉤子的查看和卸載
SSDT/Shadow SSDT鉤子的查看和卸載
各種內核回調的查看和卸載
多國語言版本的對應(中文和英文)
暫停進程運行和恢復進程運行
進程模塊的內存的dump
進程的線程的查看和結束
進程的窗口的查看和控制
進程的定時器的查看和摘除(該功能還沒對應Windows2003)
25.內核定時器的查看和摘除
上傳文件在線掃描病毒
查看和摘除用戶層的鉤子
查看和結束內核線程
關機回調的清除
查看和摘除mini文件驅動
系統恢復功能(檢測項目包括注冊表關鍵部位,已安裝的殺毒軟件,AutoRun文件,Windows漏洞檢測,共享文件夾)
流氓快捷方式的檢測和刪除
33.鏡像劫持的檢測和刪除
文件關聯的檢測和刪除
IE相關的檢測和刪除
FSD Hook的檢測和刪除
Object Hook的檢測和刪除
部分CPU/硬盤/顯卡/主板的溫度檢測
部分硬件信息的確認
修復漏洞功能,可以下載和安裝Windows補丁
IDT鉤子的檢測和恢復
禁止進程創建,新建文件,注冊表修改等配置
注冊表功能,幾乎可以無視一切隱藏注冊表的鉤子
SPI的檢測
通過磁盤解析進行文件瀏覽
文件強制拷貝功能,可拷貝網絡視頻的緩存文件
通過磁盤解析取得和拷貝ADS流文件
添加和查看文件重啟刪除信息
Disk/Atapi驅動鉤子的檢測和恢復
進程權限的枚舉和摘除
檢測鍵盤偵聽軟件
檢測被監視的文件
IO定時器的檢測和停止
工作列線程的檢測和暫停
FAT32格式的磁盤解析
新增MBR的檢測和修復(可對抗鬼影等Bootkit和MBR Rootkit)
新增檢測被替換的或被感染的內核文件(內核文件劫持)
支持多硬盤的MBR檢測和恢復
新增可疑設備的檢測和清除
支持離線的啟動項和服務的檢測和刪除
注冊表和服務的強刪功能
啟動項和服務里新增PT注冊表和文件瀏覽器的跳轉
簡易的防止關機和重啟功能(不一定可以阻止病毒的強制重啟)
IME輸入法的管理
內存條(目前只支持DDR2/DDR3)的檢測(頻率,大小,廠商,生產日期等)
顯示器的檢測(尺寸,廠商,生產日期等)
67.電池信息的檢測
拷貝驅動模塊內存和卸載驅動的功能
AMD CPU(K8/K10)溫度的檢測
可動態顯示中/英文名硬件制造廠商
識別奸商
網絡連接查看
內核IAT/EAT鉤子檢測
對文件/文件夾重命名(包括被其他進程占用的文件)
75.隱藏賬戶或/隆賬戶的管理查看功能
對鬼影3的MBR的檢測和自動恢復功能
進程的回調表鉤子檢測
增加了硬盤讀寫過程的檢測
查看調試寄存器鉤子
查看內核入口點的鉤子
檢測并可恢復系統驅動感染
檢測BMW/Mebromi等Award的BIOS rootkit,并顯示一些BIOS信息
檢測VBR bootkit,并可上傳到VirusTotal檢測
檢測rootkit的內存欺騙/內核調試器
Event Log Explorer 是一款免費軟件,用于查看、監控和分析 Microsoft Windows NT/2000/XP/2003 操作系統的安全、系統、應用程序和其他日志中記錄的事件。
下載鏈接:https://www.eventlogxp.com/
Event Log Explorer主要特點:
多文檔用戶界面 (MDI) 一次查看多個事件日志
收藏夾計算機及其日志被分組到樹中
查看事件日志和事件日志文件
歸檔事件日志
事件描述在日志窗口中
事件列表可按任意列、任意方向排序
按任何標準(包括事件描述文本)進行高級過濾
快速過濾功能允許您在幾次鼠標點擊中過濾事件日志
按任何標準快速搜索
將事件日志發送到打印機
將日志導出為不同格式
FullEventLogView是一個Windows事件日志查看工具,能夠顯示并查看所有的Windows事件日志的詳細信息,包括事件描述,支持查看本地計算機的事件、也可以查看遠程計算機的事件,并可以將事件導出為text、csv、tab-delimited、html、xml等類型的文件。
下載鏈接:https://download.csdn.net/download/weixin_44895005/85044736
Log Parser是一個強大的通用工具,它提供對基于文本的數據(如日志文件、XML 文件和 CSV 文件)以及 Windows? 操作系統上的關鍵數據源(如事件日志、注冊表、文件系統和 Active Directory?。
下載鏈接:https://www.microsoft.com/en-us/download/details.aspx?id=24659
WinPrefetchView 是一個小型進程管理實用程序,用于讀取存儲在系統中的預取文件并顯示存儲在其中的信息。
每次在系統中運行應用程序時,Windows 操作系統都會創建一個 Prefetch 文件,其中包含有關應用程序加載的文件的信息。 通過查看這些文件,您可以了解應用程序使用了哪些文件以及在 Windows 啟動時加載了哪些文件。 預取文件中的信息用于在您下次運行應用程序時優化應用程序的加載時間。
下載鏈接:https://www.majorgeeks.com/files/details/winprefetchview.html
WifiHistoryView 是適用于 Windows 10/8/7/Vista 的簡單工具,可顯示計算機上無線網絡的連接歷史記錄。 對于計算機連接或斷開無線網絡的每個事件,都會顯示以下信息:事件發生的日期/時間、網絡名稱 (SSID)、配置文件名稱、網絡適配器名稱、 路由器/接入點的 BSSID,以及更多…
WifiHistoryView 可以從正在運行的系統或另一臺計算機的外部事件日志文件中讀取 wifi 歷史信息。
只要您以管理員身份連接遠程計算機,您還可以查看網絡上遠程計算機的 wifi 歷史記錄。
下載鏈接:https://www.nirsoft.net/utils/wifi_history_view.html
hook技術應用廣泛,如熱補丁升級技術,API劫持,軟件破解等,是一門很實用的逆向安全技術。本文就簡明的講解hook技術的基本原理,實現方法,同時送上demo實例。
一. HOOK技術的基本原理
HOOK的基本原理
Hook技術的原理的:就是修改程序的運行時PC指針,讓程序跳到我們指定的代碼中運行,運行完我們的程序,程序PC指針又回到原來程序的下一條指令。簡而言之:就篡改程序的運行路徑,來執行我們的程序。
二.Hook技術的實現
1)需求分析
Hook的基本流程
原來的程序中的test.exe調用myprintf,現在我們要實現不編譯源代碼test.exe和test_dll源代碼的前提下(你懂的,破解軟件都是拿不到源代碼的)讓test.exe去調用MyPrintf_new。
其中:
test_dll的實現:
int MyPintf(int d)
{
printf("hello,this is test ,test value is %d\n", d);
return d+1;
}
test.exe的實現:
int _tmain(int argc, _TCHAR* argv[])
{
int d = 0;
d = MyPintf(2);
printf("d %d\n", d);
getchar();
return 0;
}
我們目標要實現main函數調用MyPintf_new
int MyPintf_new(int d)
{
printf("hello,this is my hook test ,test value is %d\n", d);
return d+10;
}
其中MyPintf_new我們在hook_dll中實現。
2)關鍵代碼的實現
在hook_dll加載時篡改MyPintf的跳轉指令。
其中
GetApiEntrance()備份原來的跳轉指令,構造新函數的跳轉指令。
HookOn()用于改寫進程空間中目標函數的跳轉指令
HookOff()用于還原進程空間中目標函數的跳轉指令
void GetApiEntrance()
{
//獲取原API入口地址
HMODULE hmod = ::GetModuleHandle(L"test_dll.dll");
OldFun = (fun)::GetProcAddress(hmod, "MyPintf");
pfOldFun = (FARPROC)OldFun;
if (pfOldFun == NULL)
{
printf("獲取原API入口地址出錯");
return;
}
// OldFun(88);
#ifndef WIN64
// 將原API的入口前5個字節代碼保存到OldCode[]
_asm
{
lea edi, OldCode //獲取OldCode數組的地址,放到edi
mov esi, pfOldFun //獲取原API入口地址,放到esi
cld //方向標志位,為以下兩條指令做準備
movsd //復制原API入口前4個字節到OldCode數組
movsb //復制原API入口第5個字節到OldCode數組
}
NewCode[0] = 0xe9;//實際上0xe9就相當于jmp指令
//獲取MyPintf_new的相對地址,為Jmp做準備
//int nAddr= UserFunAddr – SysFunAddr - (我們定制的這條指令的大?。?
//Jmp nAddr;
//(我們定制的這條指令的大?。? 這里是5,5個字節嘛
//BYTE NewCode[5];
_asm
{
lea eax, MyPintf_new //獲取我們的MyPintf_new函數地址
mov ebx, pfOldFun //原系統API函數地址
sub eax, ebx //int nAddr= UserFunAddr – SysFunAddr
sub eax, 5 //nAddr=nAddr-5
mov dword ptr[NewCode + 1], eax //將算出的地址nAddr保存到NewCode后面4個字節
//注:一個函數地址占4個字節
}
#else
// JMP_X64(OldCode, pfOldFun, NewCode);
#endif
//填充完畢,現在NewCode[]里的指令相當于Jmp MyPintf_new
//既然已經獲取到了Jmp MyMessageBoxW
//現在該是將Jmp MyMessageBoxW寫入原API入口前5個字節的時候了
//知道為什么是5個字節嗎?
//Jmp指令相當于0xe9,占一個字節的內存空間
//MyMessageBoxW是一個地址,其實是一個整數,占4個字節的內存空間
//int n=0x123; n占4個字節和MyPintf_new占4個字節是一樣的
//1+4=5,知道為什么是5個字節了吧
HookOn();
}
//開啟鉤子的函數
void HookOn()
{
#ifdef WIN64
//to do it
#else
DWORD dwPid = ::GetCurrentProcessId();
//printf("pid %d\n", dwPid);
hProcess = OpenProcess(PROCESS_ALL_ACCESS, 0, dwPid);
assert(hProcess != NULL);
//printf("HookOn now,hProcess %d\n", hProcess);
DWORD dwTemp = 0;
DWORD dwOldProtect;
//修改API函數入口前5個字節為jmp xxxxxx
VirtualProtectEx(hProcess, pfOldFun, 5, PAGE_READWRITE, &dwOldProtect);
WriteProcessMemory(hProcess, pfOldFun, NewCode, 5, 0);
VirtualProtectEx(hProcess, pfOldFun, 5, dwOldProtect, &dwTemp);
#endif
printf("HookOn end\n");
}
//關閉鉤子的函數
void HookOff()
{
#ifdef WIN64
//to do it
#else
assert(hProcess != NULL);
DWORD dwTemp = 0;
DWORD dwOldProtect;
//恢復API函數入口前5個字節
VirtualProtectEx(hProcess, pfOldFun, 5, PAGE_READWRITE, &dwOldProtect);
WriteProcessMemory(hProcess, pfOldFun, OldCode, 5, 0);
VirtualProtectEx(hProcess, pfOldFun, 5, dwOldProtect, &dwTemp);
#endif
}
4)使用工具將hook_dll.dll打進test.exe導入表,讓test.exe拉起hook_dll.dll。
這樣test.exe啟動時就能加載hook_dll.dll,同時調用GetApiEntrance完成hook的初始化。
三 結果演示
原始的test.exe 演示效果
Hook之后的test.exe演示效果
對于64位hook,由于64位系統的指令系統,寄存器空間也不一樣。需要研究一下X64的指令系統以及寄存器使用?;舅悸肥且粯拥?,唯獨就是JMP那條指令實現不一樣,敬請期待。
更多更詳細信息請關注公眾號:AV_Chat