slwqw
驱动大牛
驱动大牛
  • 注册日期2002-07-18
  • 最后登录2016-01-09
  • 粉丝0
  • 关注0
  • 积分7分
  • 威望197点
  • 贡献值0点
  • 好评度147点
  • 原创分0分
  • 专家分0分
阅读:2574回复:2

VanCheer版主,听说你对汇编极其熟悉,能否帮一下忙?

楼主#
更多 发布于:2003-06-06 15:06
在Windows 2000平台上,通过这段代码,可以在不编写驱动程序的前提下直接操作系统空间内存(诸如写0xFFDDEEEE等),但是不太明白其中的原理。先给50分,如果答案令人满意,再加50分。当然拉,你也许不对分感兴趣,我这样做只是为了肯定你的付出。呵呵~~~


void __declspec(naked) ModifyPrivilegeStub()
{
    __asm
    {
        //
        // Prolog
        //
        PUSHAD
        PUSHFD
        PUSH FS

        MOV     EBX,00000030h
        MOV     FS,BX
        SUB     ESP, 50h
        MOV     EBP,ESP

        //
        // Setup the exception frame to NULL
        //
        MOV     EBX,DWORD PTR CS:[0FFDFF000h]
        MOV     DWORD PTR DS:[0FFDFF000h], 0FFFFFFFFh
        MOV     DWORD PTR [EBP],EBX

        //
        // Save away the existing KSS EBP
        //
        MOV     ESI, DWORD PTR CS:[0FFDFF124h]
        MOV     EBX,DWORD PTR [ESI+00000128h]
        MOV     DWORD PTR [EBP+4h],EBX
        MOV     DWORD PTR [ESI+00000128h],EBP

        //
        // Save away the kernel time and the thread mode (kernel/user)
        //
        MOV     EDI,DWORD PTR [ESI+00000137h]
        MOV     DWORD PTR [EBP+8h],EDI

        //
        // Set the thread mode (kernel/user) based on the code selector
        //
        MOV     EBX,DWORD PTR [EBP+7Ch]
        AND     EBX,01
        MOV     BYTE PTR [ESI+00000137h],BL

        STI

        //
        // 执行自己的代码=========================================================
        //
        ..................
    
        //
        // 结束执行自己的代码=====================================================
        //

        // Epilog

        //
        // Restore the KSS EBP
        //
        MOV     ESI,DWORD PTR CS:[0FFDFF124h]
        MOV     EBX,DWORD PTR [EBP+4]
        MOV     DWORD PTR [ESI+00000128h],EBX

        //
        // Restore the exception frame
        //
        MOV     EBX,DWORD PTR [EBP]
        MOV     DWORD PTR FS:[00000000],EBX

        //
        // Restore the thread mode
        //
        MOV     EBX,DWORD PTR [EBP+8h]
        MOV     ESI,DWORD PTR FS:[00000124h]
        MOV     BYTE PTR [ESI+00000137h],BL
        ADD     ESP, 50h
        POP     FS
        POPFD
        POPAD

        RETF
    }
}
VanCheer
驱动老牛
驱动老牛
  • 注册日期2002-02-21
  • 最后登录2003-08-28
  • 粉丝0
  • 关注0
  • 积分-20分
  • 威望-10点
  • 贡献值0点
  • 好评度0点
  • 原创分0分
  • 专家分0分
沙发#
发布于:2003-06-07 15:48
水区已回答
[img]http://www.driverdevelop.com/forum/upload/VanCheer/2003-03-21_mon.gif[/img][img]http://www.driverdevelop.com/forum/upload/VanCheer/2002-12-07_smallbaby.jpg[/img]
wowocock
VIP专家组
VIP专家组
  • 注册日期2002-04-08
  • 最后登录2016-01-09
  • 粉丝16
  • 关注2
  • 积分601分
  • 威望1651点
  • 贡献值1点
  • 好评度1227点
  • 原创分1分
  • 专家分0分
板凳#
发布于:2003-09-15 16:34
不会吧,看你的代码你已经通过CALLGATE进入RING0了,当然可以访问系统地址空间啊.
花开了,然后又会凋零,星星是璀璨的,可那光芒也会消失。在这样 一瞬间,人降生了,笑者,哭着,战斗,伤害,喜悦,悲伤憎恶,爱。一切都只是刹那间的邂逅,而最后都要归入死亡的永眠
游客

返回顶部