原创 當心你的終端輸入緩衝區裏遺留的炸彈!

來看一個程序: #include <stdio.h> int main (int argc, char **argv) { char buf[1]; //syscall(0, 0, buffer, 1); read(0,

原创 Linux內核jump label與static key的原理與示例

jump label機制進入Linux內核已經很多很多年了,它的目的是 消除分支。 爲了達到這個目的,jump label的手段是 修改分支處的代碼。 ~把代碼當做數據,代碼和數據在馮諾伊曼計算機中得到了統一~ 本質上,jump

原创 Linux用戶態進程監控內存寫排查踩內存

高鐵北京回杭州的路上,想到一個簡單的話題。 在一個複雜的程序中,發生踩內存是一件非常噁心的事情,很難通過什麼線索直到誰在哪個函數中往哪個地址寫了什麼,比方說數組越界寫什麼的。 去年,我曾經長篇大論了一篇: https://blog

原创 從一道初等幾何題目聊聊作爲工具的數學

作爲一個在杭州的流民,每週末才能回家,早上例行家務,做完後例行刷10分鐘手機,在朋友圈看到一個有意思的幾何題,原題如下: 哈哈,這正是我的菜,一直都是,遂放下手機,拿了幾張打印紙,開始比劃。 這等題目背後一定暗藏着某種奇技淫巧,

原创 手工處理int3實時監控Linux系統鍵盤輸入

上週寫了一篇Linux系統監控鍵盤輸入的文字: https://blog.csdn.net/dog250/article/details/106425811 事後想了下,能不能不用標準的5字節32位相對地址跳轉實現inline h

原创 面向效果處理int3實時監控Linux系統鍵盤輸入

前文手工處理了int3中斷,實現了監控Linux系統鍵盤輸入的效果: https://blog.csdn.net/dog250/article/details/106481123 但是還是太複雜了。在這篇文章中,我深深地知道, i

原创 x86_64平臺SingleStep單步調試原理和示例

先看一個程序: // simple.c int value = 0; int main(int argc, char **argv) { value ++; value ++; value ++; value ++; v

原创 int3和SingleStep聯合實現Linux系統鍵盤監控(kprobe原理)

就着Linux系統鍵盤監控這個話題,再寫點什麼。 前面已經寫了三篇,可以一起彙總着看,算是一個簡單的一題多解吧: 標準inline hook的方法: https://blog.csdn.net/dog250/article/de

原创 Linux系統調試之return probe原理和示例

前面談了kprobe的原理,其實uprobe也差不多: https://blog.csdn.net/dog250/article/details/106520658 那麼return probe如何實現呢? 我們知道,hook一個

原创 Linux內核實時監控鍵盤輸入

剛畢業那會兒,VC6學習MFC,總得來點兒好玩的東西才能繼續下去,畢竟不是科班出身,得完全靠意義去驅動…那個時候認識了鍵盤鉤子,鼠標鉤子之類: https://blog.csdn.net/dog250/article/detail

原创 Linux系統演示更優雅的return probe示例程序

我演示了Linux系統中return probe的原理並給出了一個相當簡單的示例程序: https://blog.csdn.net/dog250/article/details/106547963 在文章最後,我提到全文描述的方法

原创 用匯編語言編寫Linux內核模塊

我不喜歡被當今互聯網產業吹噓到比冥王哈迪斯還該死的所謂業務邏輯,我只喜歡機器本身,所以我不會編程,是的,這是報應。 我只會C語言和彙編,但是並不很。 但我覺得C語言編譯器自動生成的那些push RBP之類的指令簡直糟糕透了,所以我

原创 dump出Linux內核所有的slab對象緝拿內核Rootkit

前面的文章介紹了很多種隱藏進程,隱藏TCP連接,隱藏內核模塊的方法,總結起來和大多數網上介紹Rootkit的文章種介紹的方法不同點在於: 網上大多數文章均是hook procfs來達到隱藏對象的目的。 我的方法則是直接將對象從鏈

原创 int3斷點指令的原理和示例

今天有人讓我解釋一下斷點調試的原理,我就想先解釋一下int3指令,就寫了一篇短文。 單字節指令int3的二進制碼是0xcc,它的效果是: 處理器執行到0xcc時,會陷入內核,執行int3的異常處理代碼,比如給當前進程發送一個SI

原创 竊取Linux內核page以構建窩藏自己的Rootkit

竊取內核的page?是的,偷page意味着我們繞過page分配的一切規則和接口,直接從freelist中摘取一個空閒的page來用。 直接看個POC吧,我來模擬一個task_struct的分配過程: #include <linux