Time of Update: 2018-12-05
通常發起調用的函數和被調用的函數都是位於同一個特權級的代碼中的,這種調用叫做同特權級調用,另一種情況是位於不同特權級程式碼片段中的代碼互相調用,被稱為跨特權級調用。跨特權級調用通常是通過一個所謂的調用門(Call Gate)來完成的。調用門的全稱是調用門描述符( Call-Gate Descriptor),其結構與中斷描述符非常類似,調用門描述符可以出現在GDT和LDT表中,不可以出現在IDT表中。 在調用門描述符結構中包含SegmentSelector
Time of Update: 2018-12-05
.連接埠隱藏很多人檢查自己中沒中木馬或後門,都會一些方法來查看自己本機所開的連接埠來判斷是否有木馬監聽,而有些rootkit就開始想如何隱藏連接埠了。最 簡單的枚舉當前所開放的連接埠資訊是調用iphlpapi.dll中的AllocateAndGetTcpTableFromStack和 AllocateAndGetUdpTableFromStack函數,或者AllocateAndGetTcpExTableFromStack和 AllocateAndGetUdpExTableFromStack函數。
Time of Update: 2018-12-05
我們首先做個實驗,來看windbg是否支援多進程調試, 我首先編寫一個MFC工程命名為mutiprocess,在這個工程中簡單添加一個按鈕,作用是啟動一個線程。代碼如下: // TODO: Add your control notification handler code here STARTUPINFO StartupInfo; PROCESS_INFORMATION pi; //Define as global variable, the pi must be
Time of Update: 2018-12-05
利用驅動分層技術,可以將多個驅動程式串連在一起,通過這種方式,開發人員能夠修改現有驅動程式的行為,無需重新編寫整個驅動程式。幾乎所有的硬體裝置都存在著驅動程式鏈。最底層驅動程式處理對匯流排和硬體裝置的直接存取,更高層的驅動程式處理資料格式化,錯誤碼以及高層請求轉化為更細小更有針對性的硬體操作細節。分層機制是rootkit的一個重要概念,因為在資料出入更底層硬體的移動過程中涉及分層的驅動程式,層次驅動程式不僅可以截獲資料,也可以在傳遞資料之前對其進行修改。下面介紹一個鍵盤嗅探器,分層鍵盤嗅探器的運
Time of Update: 2018-12-05
為處理READ請求而調用的常式是DispatchRead。下面具體分析該函數:NTSTAUS DispatchRead ( IN PDEVICE_OBJECT pDeviceObject, IN PIRPpIrp){
Time of Update: 2018-12-05
Musical ThemeTime Limit: 1000MS Memory Limit: 30000KTotal Submissions: 6021 Accepted: 2127DescriptionA musical melody is represented as a sequence of N (1<=N<=20000)notes that are integers in the range 1..88, each representing a key on the
Time of Update: 2018-12-05
前段日子寫過 treap 與 左偏樹, 這兩天又看了伸展樹小有心得就在此記下來以備來日參考 左偏樹是一個斜堆,而treap 是 tree 與 heap 的混合產物即是一個堆又一個二叉尋找樹,代碼量很小易調試很合適上場比賽。但有些問題比如較複雜的操作上面的這些資料結構搞不定的話我們可以換 splay 來試試。 splay作為一個二叉排序樹所具有特點用一句來概述就是“可以讓你把指的結點放在樹根的位置或者作為樹根的兒子”很多參考資料都會這麼介紹 splay
Time of Update: 2018-12-05
CDialog的OnOK虛函數控制了OK按鈕,它負責觸發資料交換以及從對話方塊中退出,然而,Enter鍵碰巧也具有同樣的效果。也許這是我們所需要的,也可能我們不需要這一功能,就是說不希望使用者在編輯框中按Enter鍵後出現關閉程式的情況。怎麼解決這一問題? 一、原因 當使用者按下Enter鍵時,Windows就會自動去找輸入焦點落在了哪一個按鈕上,當獲得焦點的按鈕的四周將被點線矩形包圍。如果所有按鈕都沒有獲得輸入焦點,Windows就會自動去尋找程式或資源所指定的預設按鈕(預設按鈕
Time of Update: 2018-12-05
由於OpenBSD官方未提供ISO,所以很多網友除了下載別人做的ISO外,只能自己定製。雖然麻煩了點,但定製ISO可以讓你真正領略到OpenBSD的“小即是美”的強大魅力,這點上OpenBSD倒把我們興趣給提起來了,害得我花了好久研究怎麼徹底做個適合自己使用的ISO,呵呵。 OpenBSD
Time of Update: 2018-12-05
//使用HDC繪圖/*HDC hdc;hdc=::GetDC(m_hWnd);MoveToEx(hdc,m_ptOrigin.x,m_ptOrigin.y,NULL);LineTo(hdc,point.x,point.y);::ReleaseDC(m_hWnd,hdc);*///所有跟視窗相關的操作都被封裝在CWnd類中//所有跟繪圖相關的操作都被封裝在CDC類中//使用CDC繪圖/*CDC
Time of Update: 2018-12-05
Gtkmm安裝1. 首先安裝dev-cpp2. 然後安裝最新的gtkmm2.4來自http://www.pcpm.ucl.ac.be/~gustin/win32_ports/index.html在安裝過程中會自動檢測到沒有gtk2.4的開發環境,安裝程式將自動下載。注意在安裝這兩個環境的時候全部安裝到dev-cpp的主目錄中,如d:/dev-cpp。3. 在命令列執行pkg-config --libs --cflags gtkmm-2.4 > pkg-config.txt
Time of Update: 2018-12-05
重複啟動關閉MDI程式的子視窗就會出現一個異常,然後就中斷到:inline _variant_t::_variant_t(IDispatch* pSrc, bool fAddRef) throw(){ V_VT(this) = VT_DISPATCH; V_DISPATCH(this) = pSrc; // Need the AddRef() as VariantClear() calls Release(), unless fAddRef // false indicates we're
Time of Update: 2018-12-05
TI 提供的為jffs2 檔案系統,實際用的時候有各種不爽,啟動時間跟牛樣的。每次開機檔案系統都要掃描全盤,這一項就花去15s,全部的開機時間達到40多秒。這玩意有法用嗎?╮(╯▽╰)╭ 為了提高開機啟動時間,增強檔案讀寫速度,最近確實做了不少工作。在網上找了下 ,沒有關於138 ubifs的資料,難道不支援,還是沒必要??反正我做了,不管那些了,直接進入正題~~~當裡個當~~~Uboot為最新版:U-boot-2010.06開發板DIM138,合眾達的核心板Linux核心:2.6.32 目的:
Time of Update: 2018-12-05
AND_CATCHAND_CATCH AND_CATCH(exception_class,exception _object_point_name)
Time of Update: 2018-12-05
1.建立一個表的映射 建立一個類,如CUserSet讓它繼承於CRecordset,建立完後VC讓選擇ODBC中的庫,然後指定表我們選擇user表,這樣這個類基本上就和表user進行了映射.一定要在UserSet.h加入#include <afxdb.h>不然會出一堆沒定義的錯誤。2.新增一條記錄CUserSet userset;//建立一個類的對象userset.Open(CRecordset::snapshot,"select * from user");userset.
Time of Update: 2018-12-05
下面來介紹中斷表的鉤子,由於每個插斷服務常式都位於不同的地址,因此每項的重入地址都是唯一的,這就需要一個跳轉模板來調用到rootkit代碼中,這種技術就稱之為跳轉模板(jump template)技術。 所有模板調用相同的rootkit代碼,函數總是返回到的它的調用者,因此不必擔心rootkit代碼中的運行時地址修正。這種技術將唯一的特定代碼作用於每個ISR(Interrupt Service
Time of Update: 2018-12-05
考慮下面的結構: struct foo { char c1; short s; char c2; int i; }; 假設這個結構的成員在記憶體中是緊湊排列的,假設c1的地址是0,那麼s的地址就應該是1,c2的地址就是3,i的地址就是4。也就是 c1 00000000, s 00000001, c2 00000003, i 00000004。
Time of Update: 2018-12-05
棧的概念:從資料結構角度來看,棧是一種儲存資料的容器(container),放入資料的操作被稱為壓入(push),從棧中取出資料的操作稱為彈出(pop),採用的是後進先出的規則,即LIFO。而從電腦系統的角度而言,棧是儲存局部變數和進行函數調用所必須不可少的連續記憶體地區。編譯器再編譯時間會將函數調用和局部變數存取編譯為合適的棧操作。作業系統在建立線程時,會為每個線程建立棧,包括分配棧所需的記憶體空間和初始有關的資料結構以及寄存器。以x86系統為例,SS(stack
Time of Update: 2018-12-05
之前介紹的都是在函數的入口處進行代碼補丁,因為在記憶體中很容易找到函數,所以這個方法很容易實現。但anti-rootkit也同樣容易檢測到這種補丁,因為它可以只檢查函數起始的20個位元組的完整性就能夠發現是否被打補丁。若將代碼改動置於初始的20個位元組之後,那麼這些軟體就無法檢測到。可以通過搜尋函數中特定的代碼位元組來進行打補丁。如果這些代碼是唯一的,那麼只需要在記憶體中搜尋它們並對其打補丁。如果代碼不是唯一的,可以參照其附件代碼中是否有唯一的,但要注意需要準確的命中,否則就不會達到你所需要的效
Time of Update: 2018-12-05
CALL指令是x86CPU中專門用作函數調用的指令,它的作用就是將當前的程式指標(EIP寄存器)值儲存到棧中(稱為linking information),然後轉移到(branch to)目標運算元所指定的函數(被調用過程)繼續執行。 根據被調用過程是否位於同一個程式碼片段,CALL調用被分為近調用(Near Call)和遠調用(Far Call)兩種。在近調用中CPU的操作如下:A. 將EIP寄存器的當前值壓入到棧中供返回時使用B.