能力值:
( LV8,RANK:130 )
|
-
-
2 楼
终于让LZ发现了
|
能力值:
( LV4,RANK:50 )
|
-
-
3 楼
发现了什么???
|
能力值:
( LV3,RANK:20 )
|
-
-
4 楼
如果你处于内核下.你对4GB内存地址空间有绝对的访问权(前提是地址有效).
但是.这4GB内存地址空间想必你也知道它被分了高2GB内核用和低2GB应用层程序用(一般情况下.3GB选项和XGB选项未考虑)...所谓的读取目标进程地址空间的内存.如果读的地址大于0x80000000.那属于内核地址.各个进程的都一样.都是那一份.无需切换地址空间直接读.如果读低2GB地址.则需要先切换进程地址空间.(最简单的方式是KeAttachProcess或者KeStackAttachProcess到目标进程)..然后直接访问这个地址.就可以了..如果写代码.框架代码几行就差不多了.[为什么需要切换地址空间?主要是CR3的问题.具体参考windows内存管理相关书籍.虚拟内存地址转换等.)
NTSTATUS
ReadMemory(
IN ULONG ProcessId,
IN PVOID AddressToRead,
IN ULONG LenthToRead,
IN OUT PVOID BufferToRecviveData
)
{
NTSTATUS status = STATUS_UNSUCCESSFUL;
PEPROCESS ProcessPointer = NULL;
BOOLEAN IsAttached = FALSE;
__try
{
//检查参数啥的.都省了...你注意添加..
status = PsLookupProcessByProcessId((HANDLE)ProcessId,&ProcessPointer);
if (!NT_SUCCESS(status))
{
__leave;
}
ObDereferenceObject(ProcessPointer);
//挂靠到目标进程地址空间
KeAttachProcess(ProcessPointer);
IsAttached = TRUE;
//请在这里检查地址.确保要读的地址有效.
//读取数据
RtlCopyMemory(BufferToRecviveData,AddressToRead,LenthToRead);
status = STATUS_SUCCESS;
}
__finally
{
if (IsAttached)
{
KeDetachProcess();
IsAttached = FALSE;
}
}
return status;
}
临时写的.未经详细测试..
|
能力值:
( LV4,RANK:50 )
|
-
-
5 楼
NTSTATUS ReadMemory(进程ID,要读取的地址,要读取的长度,接收读取到的数据)
{
PEPROCESS EPROCESS结构指针
BOOLEAN 是否已经附加
PsLookupProcessByProcessId(通过进程ID,获取EPROCESS结构)
ObDereferenceObject(这个函数不知道是做什么的)
KeAttachProcess(附加到目标进程) 疑惑:MSDN 让使用他KeStackAttachProcess为什么?
成功附加
RtlCopyMemory(接收读取到的数据,读取的地址,读取的长度) 内存拷贝
}
高人指教我理解滴正确吗? 还有一个重要滴问题。。。我不知道如何获取PID
这个函数滴大前提就是需要手里有PID才能进行下去
|
能力值:
( LV3,RANK:20 )
|
-
-
6 楼
两个功能一样..KeStackAttachProcess 是KeAttachProcess的升级版.好处之一在于已经挂靠到一个进程之后并且可以在Detch之前可以再次挂靠别的进程.而KeAttachProcess不行..PsLookupProcessByProcessId会增加目标进程EPROCESS对象的引用计数.ObDereferenceObject来减少引用计数.不然会造成一点麻烦..例如僵死进程..
我只是举例.程序是可以写活的.关键是思路问题.你没有发觉吗.使用PID只是为了尝试通过PID尝试获取目标进程EPROCESS指针..因为只有获取了这个指针.才能下一步切换地址空间.实际上.获取目标进程EPROCESS指针方法一大堆..比如遍历EPROCESS链表匹配进程名..再比如.知道对方进程中某个线程的ID.得到它线程ETHREAD.然后通过ETHREAD获取进程EPROCESS..等...
Ps:我不是高人..我也是菜鸟...只是比你多翻了几页书而已.
|
能力值:
( LV4,RANK:50 )
|
-
-
7 楼
能帮助新人滴就都是高人啦。。。
十分感谢高人能抽出时间来指教我。。。代码很清晰。对我有很大滴帮助。
|
|
|