模組的應用:讓mkdir失效

來源:互聯網
上載者:User

這一節我
們就講怎麼去捕獲系統調用,這相當於我們在DOS平台下去捕獲中斷。

  談到捕獲系統調用,我們不得不為LKM這種機制感到擔心,雖然它的本意只是
用於擴充核心功能(特別是針對一些硬體驅動程式),但是,在駭客的手上,LKM
也可以用來捕獲系統調用,甚至修改它,讓它去完成其他特別的任務。下面我們將
列出一個實際的LKM程式,一當這個程式載入到記憶體中以後,整個作業系統就會禁
止任何使用者在磁碟上建立目錄。程式如下:

#define MODULE
#define __KERNEL__

#include <linux/module.h>
#include <linux/kernel.h>
#include <asm/unistd.h>
#include <sys/syscall.h>
#include <sys/types.h>
#include <asm/fcntl.h>
#include <asm/errno.h>
#include <linux/types.h>
#include <linux/dirent.h>
#include <sys/mman.h>
#include <linux/string.h>
#include <linux/fs.h>
#include <linux/malloc.h>

 extern void* sys_call_table[];

 int (*orig_mkdir)(const char *path);

 int hacked_mkdir(const char *path)
  {
   return 0;
  }

 int init_module(void)
  {
   orig_mkdir=sys_call_table[SYS_mkdir];
   sys_call_table[SYS_mkdir]=hacked_mkdir;
   return 0;
  }

 void cleanup_module(void)
  {
   sys_call_table[SYS_mkdir]=orig_mkdir;
  }

  編譯這個LKM程式,然後運行(具體方法見前面第二章《LKM的概念及hello,
world程式》)。然後試著在磁碟上建立一個目錄,結果你就會發現你建立不了目
錄了,因為建立目錄的系統調用已經被改變,它不會做任何事情,只會給系統返回
一個代表“完成”的“0”,呵呵。因為我們沒有在這裡列印任何資訊,所以也不
會出現錯誤提示。當然,再卸載此LKM後,我們又可以建立目錄了。

  現在你應該發現,我們僅僅對系統調用表某些條目作了相應的改動,就可以捕
獲特定的系統調用了。總結一下捕獲系統調用這類程式的一般步驟:

在你的系統調用表中找到相應的條目(/sys/syscall.h)
將老的系統調用儲存起來(把sys_call_table[X]儲存在一個函數指標中)
將系統調用表中的相應條目改變為你的新的系統調用。
  儲存老的系統調用的函數指標是非常有用的,因為在新的系統調用中也許仍然
會用到老系統調用完成的功能。那麼,現在我們面對的問題是:為了做成某件事,
我該去捕獲哪個調用呢?請繼續關注本文。

聯繫我們

該頁面正文內容均來源於網絡整理,並不代表阿里雲官方的觀點,該頁面所提到的產品和服務也與阿里云無關,如果該頁面內容對您造成了困擾,歡迎寫郵件給我們,收到郵件我們將在5個工作日內處理。

如果您發現本社區中有涉嫌抄襲的內容,歡迎發送郵件至: info-contact@alibabacloud.com 進行舉報並提供相關證據,工作人員會在 5 個工作天內聯絡您,一經查實,本站將立刻刪除涉嫌侵權內容。

A Free Trial That Lets You Build Big!

Start building with 50+ products and up to 12 months usage for Elastic Compute Service

  • Sales Support

    1 on 1 presale consultation

  • After-Sales Support

    24/7 Technical Support 6 Free Tickets per Quarter Faster Response

  • Alibaba Cloud offers highly flexible support services tailored to meet your exact needs.