posts - 403, comments - 310, trackbacks - 0, articles - 7
            BlogJava :: 首頁 :: 新隨筆 :: 聯系 :: 聚合  :: 管理

          Hacking the Kernel - 修改系統調用表

          Posted on 2008-02-19 14:55 ZelluX 閱讀(760) 評論(0)  編輯  收藏 所屬分類: Linux 、System
          昨天硬是沒找到正確的sys_call_table的地址,原來我之前在虛擬機上裝的ArchLinux是64位的。。
          今天在真機上成功地修改了系統調用表。
          測試環境:ArchLinux 2.6.24

          1. 2.4.20以后的內核出于安全考慮,沒有導出sys_call_table符號,所以要先通過System.map找到sys_call_table的地址
          $ cat /boot/System.map26 | grep sys_call_table
          c0375680 R sys_call_table
          另外也可以用nm工具獲得vmlinux中的所有符號
          $ nm /usr/src/linux-2.6.24-ARCH/vmlinux | grep sys_call_table
          結果一樣

          2. 以添加一個把uid改成root(0)為例,寫一個內核模塊:
          addcall.c

          對應的Makefile:

          3. 使用insmod addcall.ko載入模塊后,用dmesg可以看到the call has been added.
          4. 測試程序
          test.c

          使用gcc -o test test.c編譯

          5. 運行./test,即可看到類似的成功信息:
          Previous uid = 1002
          Current uid = 0

          6. 卸載模塊rmmod addcall,此時再次運行./test就會失敗
          主站蜘蛛池模板: 福安市| 贡嘎县| 平顶山市| 闻喜县| 荔波县| 大化| 亳州市| 徐水县| 达孜县| 沂源县| 乌兰察布市| 买车| 石城县| 大安市| 竹溪县| 屏边| 辛集市| 磐安县| 栾城县| 兖州市| 济宁市| 阿拉善右旗| 花莲市| 平泉县| 盘锦市| 拜城县| 印江| 屏山县| 平和县| 淮阳县| 绥滨县| 大安市| 永兴县| 黑河市| 石门县| 临猗县| 黑龙江省| 甘孜| 普格县| 新晃| 呼伦贝尔市|