免费注册 查看新帖 |

Chinaunix

  平台 论坛 博客 文库
最近访问板块 发新帖
查看: 1391 | 回复: 0
打印 上一主题 下一主题

linux2_4_18内核拦截 [复制链接]

论坛徽章:
0
跳转到指定楼层
1 [收藏(0)] [报告]
发表于 2004-08-10 01:01 |只看该作者 |倒序浏览
经过一周的努力,终于有眉目了!

按照以前的说法,
  LINUX2.4.18没有导出SYS_CALL_TABLE;
  必须读出IDT寄存器,得到IDTR.BASE,
  然后IDTR.BASE+0X0400(INT 80H);
  得到INT 80H的对应IDT项目(8字节);
  再然后,IDT项目的最高16位和最低16位结合;
  得到INT 80H的进入地址;
  搜索FF/14/85(CALL指令);
  其后就是SYS_CALL_TABLE了;

我按照这个说法作了,结果是 系统宕机;

没办法,我有想了个办法:
  发现REDHAT8的/PROC/KCORE对应系统内存;
  好大啊(512M字节的文件),
  我的计算机的内存是512M的条子,看来是对应了;
  执行复制命令cp /proc/kcore /root/kcore.x
  然后搜索, 找到了多个FF/14/85;
  只有一个是我要的真正的CALL *SYS_CALL_TABLE;
  它的特征是:
    3D/00/01/00/00  (比较系统调用号(256));
    0F/83/XX/XX/XX/XX  (如果大于等于,就跳转);
    FF/14/85/ZZ/ZZ/ZZ/ZZ/  (不然,CALL(系统调用表+调用号));
    89/44/24/XX/  (保存返回的数值);
    90 (nop了,空指令)
  这个(ZZ/ZZ/ZZ/ZZ)就是SYS_CALL_TABLE的地址了!!

  在内核里面也许不能使用READ函数;
  没关系,我写个用户端的搜索程序(root权限下执行);
  得到SYS_CALL_TABLE的地址以后,
  INSMOD MYHACK ZZ/ZZ/ZZ/ZZ;
  把地址用参数传入模块,INIT_MODULE()
  读取这个参数,硬性设置SYS_CALL_TABLE;
  替换原来的系统函数,从而实现系统调用的拦截!!

  这个办法不适合于"黑"别人的系统,
  这是我为了编写VOD歌库加密的,
  它拦截系统的文件读写操作,
  把数据解密后再返回给用户;
  这样,服务器上面的加密的歌曲文件,
  读入到客房计算机的VOD以后,就是解密的;
  8471解压卡的LINUX驱动,就被蒙蔽了;
您需要登录后才可以回帖 登录 | 注册

本版积分规则 发表回复

  

北京盛拓优讯信息技术有限公司. 版权所有 京ICP备16024965号-6 北京市公安局海淀分局网监中心备案编号:11010802020122 niuxiaotong@pcpop.com 17352615567
未成年举报专区
中国互联网协会会员  联系我们:huangweiwei@itpub.net
感谢所有关心和支持过ChinaUnix的朋友们 转载本站内容请注明原作者名及出处

清除 Cookies - ChinaUnix - Archiver - WAP - TOP