-
-
注入汇编代码,执行到代码指令时,因为指令有写内存的操作,写内存报错
-
发表于:
2020-10-28 12:04
2616
-
注入汇编代码,执行到代码指令时,因为指令有写内存的操作,写内存报错
// 功能:通过hook目标进程GetTickCount,把时间记录下来。
MOV ECX, 7FFE0320 // Hook了目标进程GetTickCount开头的几个字节,目标进程调用GetTickCount会跳转到这里
MOV RCX, DS:[RCX]
MOV EAX, DS:[7FFE0004]
IMUL RAX, RCX
SHR RAX, 18 // 以上:直接复制的GetTickCount的代码,得到的time保存在rax中
PUSH RDX // 以下:每次程序调用 kernel32.GetTickCount时,将time即rax的值保存到指定内存。
PUSH R8
MOV RDX, 2CD0FAD0000 // 2CD0FAD0000(远程VirtualAllocEx创建的8字节内存),该地址的值,指向了一块内存区域的首地址记为"ArrayAddress"(远程VirtualAllocEx创建的0x1000大小),每次调用kernel32.GetTickCount,该地址的值+8
MOV R8, 2CD0FAD0000
MOV RDX, DS:[RDX]
MOV DS:[RDX], RAX // 执行这条指令时,目标程序会报错:"ArrayAddress 不能写", 注入到自己写的程序没这个问题,为什么呢?
ADD RDX, 8
MOV DS:[R8], RDX
POP R8
POP RDX
RET
如何解决呢?希望能得到一些思路,谢谢了。
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)