我来我网
https://5come5.cn
 
您尚未 登录  注册 | 菠菜 | 软件站 | 音乐站 | 邮箱1 | 邮箱2 | 风格选择 | 更多 » 
 

本页主题: 刚刚找了个用户态执行内核态程序的源码 显示签名 | 打印 | 加为IE收藏 | 收藏主题 | 上一主题 | 下一主题

依然随意



性别: 帅哥 状态: 该用户目前不在线
等级: 前途无量
家族: ⊙JAY菊爱园⊙
发贴: 5922
威望: 0
浮云: 760
在线等级:
注册时间: 2006-09-25
最后登陆: 2022-10-30

5come5帮你背单词 [ hut /hΛt/ n. 小屋,棚屋 ]


刚刚找了个用户态执行内核态程序的源码

找了一个在用户态锁定键盘的程序(不是使用钩子hook实现的),碍于源码稍大,一个人分析不知道要到什么时候去了,拿出来有兴趣的都来看一下,然后大家分享一下心得。(补充一下,代码编译的时候要装sdk,如果编译器是vc6,要装platform sdk,代码里嵌的有汇编,感觉自己主要是保护模式下线性地址空间,分页调度,中断机制不懂,懂的蝈蝈分享一下哈)


[ 此帖被依然随意在2007-12-21 23:12重新编辑 ]
附件: 锁定键盘.rar (85 K) 下载次数:35

本帖最近评分记录:
  • 浮云:5(est) 引发讨论
  • 顶端 Posted: 2007-12-21 22:39 | [楼 主]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ aspect /'æspekt/ n. 样子,面貌,(问题、事物等的)方面 ]


    这个程序太牛B了
    等明天好好看~
    顶端 Posted: 2007-12-21 23:46 | [1 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ enter /'entə/ v. 进入,加入,参加 ]


    真的好牛
    我第一次真正见识了程序自己构造调用gate

    我觉得它牛B的地方:
    未公开API的调用,那么随意,飘逸!
    对物理内在的操作,那么简洁,
    自己修改GDT,对保护模式好熟识!


    不过这个程序并没有真正地修改IDT,他只是在GDT里加了一个描述符。

    真正修改IDT的代码在lkbr0.cpp里,不过不知道为什么他并没有使用这份代码(把lkbr0.cpp删了程序也能正常编译和运行)。

    而且它没有真正的查询页表的操作,转物理内在的操作是靠VirtualToPhysicalAddress这个函数完成的(神奇的函数

    我印象中,好像看过有资料说GDT、IDT、页目录表等等重要的表都是不会被切换出物理内存的(即不会被切换到硬盘上去),但不知为什么
    Copy code
    DWORD VirtualToPhysicalAddress( DWORD dw_virtual_address )
    {
        if( dw_virtual_address<0x80000000 || dw_virtual_address >= 0xA0000000 )
        {
            return 0;
        }
        else
        {
            return dw_virtual_address&0x1FFFF000;
        }
    }

    这么简单的转换居然可以正常工作。


    跟这个程序没必要使用WinDbg,我用VC跟了一遍,gdt等内核东东的地址都是可以看到的。
    顶端 Posted: 2007-12-22 10:58 | [2 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ zoology /zou'oləd3əi/ n. 动物学 ]


    Quote:
    引用第8楼依然随意于2007-12-22 11:39发表的  :
    GDT表可以在用户态改吗?


    本来是不可以的,
    但它调用了SetPhyscialMemorySectionCanBeWrited这个函数之后就可以了
    顶端 Posted: 2007-12-22 12:04 | [3 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ utter /'Λtə/ vt. 说,发出(声音),说出,说明,表达;a. 完全的,十足的,彻底的 ]


    不过SetPhyscialMemorySectionCanBeWrited里用到的API貌似都是公开的,我不知道它为啥要用自己的CallFunc而不直接调用那些API
    顶端 Posted: 2007-12-22 12:20 | [4 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ nominal /'nominl/ a. 名义上的,(指金额)极小的 ]


    Quote:

    段间呼叫gdt,为什么要call  fword  ptr  [MyGateSelector]这样用


    Quote:

    一个基本的调用不适用与这种定位于ring0而实际在ring3的callgate程序。我们需要进行"far  call"   
      (inter-privilege  level  call),  因此为了调用callgate,必须这样做:   
       
      short  farcall[3];   
      farcall[0  -->  1]  =  offset  from  the  target  operand.  This  is  ignored  when  a   
      callgate  is  used   
       
      farcall[2]  =  callgate  selector   
       
        ----"IA-32  Intel  Architecture  Software  Developer's  Manual  (Volume  2)"  (see  [5]).   


    Quote:

    FWORD=6  BYTE 
      QWORD=8  BYTE


    Quote:

    补充Areslee(易水)   
      fword  =  6  byte 
      但是以8字节对齐


    引自CSDN---http://topic.csdn.net/t/20031227/13/2608876.html
    顶端 Posted: 2007-12-22 12:26 | [5 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ chase /teis/ v. & n. 追赶,追逐 ]


    Quote:
    引用第12楼依然随意于2007-12-22 12:29发表的  :
    果果真是强人,赞一个,以后有问题就问你了


    这个程序我还有很多不懂的地方
    可能写这个程序的人都不敢自称强
    我就更加是小菜了
    顶端 Posted: 2007-12-22 12:31 | [6 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ magazine /mægə'zi:n/ n. (对妇女的尊称)女士,夫人 ]


    Quote:
    引用第9楼yinx于2007-12-22 12:04发表的  :


    本来是不可以的,
    但它调用了SetPhyscialMemorySectionCanBeWrited这个函数之后就可以了


    我错了~~

    Copy code
            status = ntdll.CallFunc( "ZwOpenSection",
                &m_hSection,
                SECTION_MAP_READ|SECTION_MAP_WRITE,
                &objectAttributes );

            if(status == STATUS_ACCESS_DENIED)
            {
                status = ntdll.CallFunc( "ZwOpenSection",
                    &m_hSection,
                    READ_CONTROL|WRITE_DAC,
                    &objectAttributes );

                if( status == STATUS_SUCCESS )
                {
                    SetPhyscialMemorySectionCanBeWrited(m_hSection);
                    ntdll.CallFunc( "ZwClose", m_hSection );
                    status = ntdll.CallFunc( "ZwOpenSection",
                        &m_hSection,
                        SECTION_MAP_WRITE|SECTION_MAP_WRITE,
                        &objectAttributes );
                }
            }


    他是先调用ZwOpenSection,如果返回STATUS_ACCESS_DENIED再调用SetPhyscialMemorySectionCanBeWrited的。

    我调试的时候调用ZwOpenSection就已经成功的了,程序没有再去调用SetPhyscialMemorySectionCanBeWrited
    顶端 Posted: 2007-12-22 12:49 | [7 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ evidence /'evidəns/ n. 根据,证据,迹象 ]


    Quote:
    引用第16楼blulove于2007-12-22 12:50发表的  :
    主要的流程大概是这样: 
      1:高地址虚拟空间转换为物理空间,RING3不可见
    2:重新映射获得的物理空间到低地址虚拟空间,这下RING3可见了赛
    3:添加GDT描述符,完事


    第2项不懂,蝈蝈教我一下~
    它是用哪些语句完成第2项的?
    顶端 Posted: 2007-12-22 12:54 | [8 楼]
    yinx



    性别: 帅哥 状态: 该用户目前不在线
    等级: 人见人爱
    家族: 丢丢
    发贴: 2333
    威望: 0
    浮云: 1260
    在线等级:
    注册时间: 2006-09-15
    最后登陆: 2009-05-11

    5come5帮你背单词 [ preset /'pri:'set/ v. 预先装置,预先调整 ]


    Quote:
    引用第20楼blulove于2007-12-22 13:03发表的  :
    里面应该有VirtualAddrToPhysicAddr这样的函数的,不然没有办法操作嘛


    确实是有这样的函数,
    不过你说的第二步是把物理空间映射到低虚拟空间,
    我不知道要用什么语句完成映射这个操作
    顶端 Posted: 2007-12-22 13:07 | [9 楼]
    我来我网·5come5 Forum » 程序员之家

    Total 0.016708(s) query 6, Time now is:11-22 11:50, Gzip enabled
    Powered by PHPWind v5.3, Localized by 5come5 Tech Team, 黔ICP备16009856号