-
-
[讨论]R3函数重写3-ReadProcessMemory
-
发表于:
2023-3-24 10:49
5983
-
[讨论]R3函数重写3-ReadProcessMemory
原函数参数数值
寻找syscall:
下断
前四个参数一致
第五个参数有点奇怪
对这个参数下断
可以判定ntdll.zwreadvirtalmomry的第五个参数是放在了堆栈rsp+78里,但是ntdll.zwreadvirtalmomry第五个参数跟readvirtalmomry第五个参数不一样
在ret下断观察实际读取大小的值,
返回3环实际读取大小的值放在rsp+38
单步走出call,可以看到拿rsp+30也就是实际读取大小(单浮点是四字节)的值给了rcx,rcx就给了rdx里面的地址,rdx刚才分析过是原先函数五个参数的地址。
可得ntdll.zwreadvirtalmomry跟
readvirtalmomry前四个参数一样,
#include<Windows.h>
#include<stdio.h>
EXTERN_C void myFuntion(HANDLE handle, PVOID address, float* buffer, int b, PVOID c);
PVOID address =(PVOID) 0x227AEAE5BC0;//6ABBB01060
HANDLE handle = 0;
float A = 0;
SIZE_T B = 0;
int main() {
handle = OpenProcess(PROCESS_ALL_ACCESS, false, 0x1EF4);
if (handle <= 0) {
printf("OpenProcess ERROR\n");
return 0;
}
printf("myFuntion%p\n", myFuntion);
while (1)
{
myFuntion(handle, (PVOID)0x9B59D59058, &A, 4,&B);//B没有接收到实际读取大小的值
printf("buffer is%f\n", A);
Sleep(1000);
}
}
.CODE
myFuntion PROC
mov r10,rcx
mov eax,63
syscall
ret
myFuntion ENDP
END
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)