-
-
[求助]求问下获取PspTerminateAllThreads地址的问题
-
-
[求助]求问下获取PspTerminateAllThreads地址的问题
刚在逆NtTerminateProcess时候 发现一个好玩的函数
PspTerminateAllThreads
这个函数从字面上很好理解.干掉所有线程.
但是NtTerminateProcess自身会PspTerminateThreadByPointer
我之前写的GetPspTerminateThreadByPointerAddress函数 也是通过PsTerminateSystemThread这个简短的函数的{0x50,0xe8}特征
push eax
call XXXX
获取E8后面的4字节.得到偏移 然后
RetAddress = FunAddress + ( FeatureAddress + 1 - 5 );
//FeatureAddress是特征码在内存中的首地址
得到真实地址,然后通过
Kill_process->ThreadListHead
得到这个LIST_ENTRY
然后通过
Kill_process->ThreadListHead - 0x224
得到PETHREAD
然后调用PspTerminateThreadByPointer
现在有个这个看起来狠NB的函数.想来可以直接用他了..
但是这个的地址怎么才能稳定的获取呢..
这个特征不明显.用硬编码偏移的话.又各种不兼容(NtTerminateProcess每个系统都不一样)
所以来求助了
对了 顺便问下下面的代码
while (true)
{
if (This_Thread_ThreadListHead != NULL)
{
This_Thread = This_Thread_ThreadListHead.Flink - 0x224;
//获取下一个线程的结构体
This_Thread_ThreadListHead = This_Thread_ThreadListHead.Flink;
//保存下一个线程的LIST_ENTRY结构地址
MyPspTerminateThreadByPointer(This_Thread,EXIT_SUCCESS,FALSE);
}else
{
break;
}
}
之前有个同学说.将最后一个线程的This_Thread_ThreadListHead.Flink指向一个随便的地方.就可以导致我这样杀会蓝屏..
该怎么避免呢..
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课