原创 Linux內核系統調用劫持之kallsyms

1.通過kallsyms方式 基於Linux 5.0/Linux5.3 的X86-64系統. 1. 通過kallsyms_lookup_name查找sys_call_table地址. 2. 關閉寫保護 3. 修改sys_call_tabl

原创 QEMU-KVM使用總結

1. Linux kvm初始化入口: kvm_init 2. qemu -monitor stdio //啓動後,默認進入qemu monitor模式 3. qemu -enable-kvm //啓動後,開啓kvm硬件虛擬化 4. qem

原创 Linux進程管理之pid namespace

路徑: kernel/pid.c kernel/pid_namespace.c kernel/nsproxy.c   未完待續.....todo

原创 Linux多線程編程總結

1. pthread_join和pthread_detach理解 pthread_detach表示主線程不等待線程退出, 線程資源在線程退出時自動回收(鎖,條件變量,信號量,文件描述符) pthread_join:等待線程退出,並回收進程

原创 Linux X86_64 內核態缺頁處理

 Linux X86針對meltdown漏洞開啓了頁表隔離(PTI)功能,PTI使用兩組PGD來表示整個進程空間.在進程陷入內核態時,CR3會相應的切換到進程內核態的PGD頁表. 假如進程調用了vmalloc分配內存,此時會進行頁表映射,

原创 Linux X86 LBR和BTS功能分析與實現

X86 處理器支持最近分支記錄(Last branch record),也就是記錄CPU的跳轉記錄(jmp,jcc,call,ret等指令,中斷和異常). 通過操作MSR寄存器(model specific register)來配置分支記

原创 insmod加載分析

原创 CFS調度器負載計算

     /******以下結論和代碼分析都是基於最新Linux master分支(Linux5.0)******/ 1. 負載結構體 每個調度實體都有一個負載結構,用來跟蹤調度實體對系統的負載貢獻 struct sched_entity

原创 Linux內核4.4打開kasan功能並替換內核編譯器

基於高通820,Linux4.4內核使能kasan功能   1. 打開宏定義 CONFIG_KASAN=y CONFIG_KASAN_INLINE=y //GCC 5.0以上支持,主要優化執行效率 CONFIG_KCOV=y CONFIG

原创 shell 數組添加方法

  array_name[@]表示數組大小 向Shell數組添加元素有多種方法,每種方法在使用時都有一些需要注意的地方,沒有見過這方面的總結資料,所以自己總結一下。 直接下標添加 array_name[index]=value  最簡單的

原创 Linux幾種檢測rootkit隱藏進程的方法

Rootkit通常會隱藏進程,隱藏文件和網絡連接。這裏主要記錄幾種對隱藏進程的檢測方法 一. 隱藏進程的方法 1.1 用戶級Rootkit 通過LD_PRELOAD來hook libc庫,從而過濾/proc/pid目錄 1.2 內核級ro

原创 Linux hook內核函數

在內核中,如果要hook某個函數,只要把函數開頭的5個字節替換成call/jmp指令. 步驟 1. 保存orig 函數的前5個字節指令. 2.定義一個stub函數,用於跳轉回orig函數. 3.在新函數中,調用stub函數.   具體實

原创 Linux ELF文件格式

1. ELF header結構體 主要定義了文件的類型,程序頭表位置,大小和個數,節頭表位置,大小和個數 typedef struct {                unsigned char e_ident[EI_NIDENT];/

原创 Linux內核線程實時獲取調度狀態的方法

   最近在做項目中,需要線程實時的知道自身被sched out 和sched in. 查看了schedule()函數實現,發現內核提供了對應的notifier機制. 1.進程sched out流程 schedule->__schedul

原创 linux ARM64開啓kaslr地址轉換

開啓kaslr後,kernel image 在vmalloc區域. 運行地址與鏈接地址會有一個offset   addr_run = addr_link + offset //開啓KASLR addr_run = addr_link +