前几天发了个帖子 可能描述的不清楚 一直没人回答.
.............................................................................
问题描述:
1.我对一个游戏线程进行 CreateRemoteThread(XXXXX);
返回成功 但是没有执行我注入的 代码.
2.使用OD attach 游戏进程 再次调用 CreateRemoteThread(); 提示调用成功 依然
没有调用我的代码 也就是没有调用 函数原型的 lpStartAddress 地址指向的代码.
..但是OD提示XXX线程退出.. (说明线程创建成功 只是没有调用我们的代码)
------
HANDLE WINAPI CreateRemoteThread(
__in HANDLE hProcess,
__in LPSECURITY_ATTRIBUTES lpThreadAttributes,
__in SIZE_T dwStackSize,
__in LPTHREAD_START_ROUTINE lpStartAddress,
__in LPVOID lpParameter,
__in DWORD dwCreationFlags,
__out LPDWORD lpThreadId
);
----------
正常情况下. 创建线程之后
1.将lpParameter入栈
2.将lpStartAddress入栈
3.调用RtlUserThreadStart
4.调用BaseThreadInitThunk
5.调用lpStartAddress指定的函数*****
6.
.
.调用 ExitThread
.
.我在前6处都下了断点都没有断下. 只有在ExitThread处才被断下 说明搞鬼了. 但是我不知道什么地方搞的鬼 于是乎 我怀疑是在创建的时候搞的鬼.
....然后我就拿出 windbg 断点 ba NtCreateThread
因为对内核不熟 我只能迷迷糊糊跟踪 NtCreateThread
一直到创建完成 我查看 ETHREAD 结构的 StartAddress 一直指向的是 RtlUserThreadStart 这个位置...说明没有问题..
我的问题描述到这里了 晕了 到底是R0有问题 还是R3 有问题....
************************************
希望各位大大们 根据自己的经验说说自己的看法
************************************
还有各位有没有查看 内核 HOOK的工具 .比如输入一个内核函数的地址 然后工具检测 call 查看是否有 HOOK 跳转到其他模块的
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课