首页
社区
课程
招聘
[原创]内核内存问题……
发表于: 2009-2-19 21:38 4249

[原创]内核内存问题……

2009-2-19 21:38
4249
各位大牛。。。
我在内核里 可以读取某个地址的数据 但是我不能写入是怎么回事啊????
我操作都是用户态的 不涉及内核的内存……
RtlCopyMemory无法修改……
用汇编直接修改也无效。。。。。

求救啊……

[培训]科锐逆向工程师培训第53期2025年7月8日开班!

收藏
免费 0
支持
分享
最新回复 (5)
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
你要问问题也要先放代码,没有代码也要尽量说详细点吧。

最鄙视这种拿到别人的代码就乱编译一通又不成功的还遮遮掩掩的做WG的人,看雪里面几乎成了这些人乱叫的乐园了
2009-2-19 22:57
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
BOOLEAN flag=TRUE;
        dprintf("进入WriteProcessMemory\n");
        PEPROCESS  pstKProcess = NULL;
        PEPROCESS  pstCurrent = NULL;
        ULONG ulPDT = 0;
        ULONG ulOldCr3 = 0;
        dprintf("pstKProcess初始化,得到PCB\n");
        pstKProcess =pstEProcess;
        dprintf("pstKProcess :0x%08X\n",pstKProcess);
        dprintf("ulPDT初始化,得到DirectoryTableBase[0]\n");
        ulPDT =*(ULONG*) ((ULONG)pstKProcess+0x18);//->DirectoryTableBase[0];
        dprintf("ulPDT :0x%08X\n",ulPDT);
        dprintf("开始汇编\n");
        //load cr3
        _asm
        {
                cli;
                mov eax, cr3;
                mov ulOldCr3, eax;
                mov eax, ulPDT;
                mov cr3,eax
        }
        _asm sti;
        dprintf("开始写入内存\n");
        dprintf("====================\n");
        dprintf("Address  :0x%08X.\n",address);
        dprintf("Value Address :0x%08X.\n",Value);
        dprintf("Value  :%d.\n",*((UINT16*)Value));
        dprintf("Size Value : %d\n",2);
        dprintf("====================\n");
        ULONG addreslong=(ULONG)address;
        dprintf("Address Asm : 0x%08X\n",addreslong);
        ULONG valueasm=(ULONG)(*((UINT16*)Value));
        dprintf("Value Asm : %d\n",valueasm);
        __try{
                __asm{
                 
                                mov eax, addreslong
                                mov ebx ,valueasm
                                mov [eax],ebx
                         
                }
        //RtlCopyMemory( address,Value, 2); //直接复制内存
        dprintf("修改成功!!!!!!!!!!!!!!!!!!!!!n");
        }
        __except(1)
        {
        dprintf("修改失败!!!!!!!!!!!!!!!!!!!!!n");
        flag=FALSE;
        }
        dprintf("完成写入内存,开始还原DirectoryTableBase\n");
        _asm cli;
        _asm
        {
                mov eax, ulOldCr3;
                mov cr3,eax;
                sti;
        }
        dprintf("还原DirectoryTableBase结束\n");
         dprintf("WriteProcessMemory函数结束\n");
         if(flag)
         {
        return STATUS_SUCCESS;
         }
         else
         {
        return STATUS_UNSUCCESSFUL;;
         }

误会了。。。纯粹菜鸟自娱自乐。。。
想学点东西而已
2009-2-19 23:03
0
雪    币: 272
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
晕,直接切换CR3,还是用 ke***切换吧

切换后你还敢调用dprintf
2009-2-19 23:12
0
雪    币: 8833
活跃值: (2419)
能力值: ( LV12,RANK:760 )
在线值:
发帖
回帖
粉丝
5
切了未必好用,对于进程内存要Attach,但是光Attach还不能保证copy成功,还需再做些余外的操作,简单方法用Zw系列函数工作多么好啊~
2009-2-20 00:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
额。。。不直接切CR3就没法用了。。
2009-2-20 12:11
0
游客
登录 | 注册 方可回帖
返回