首页
社区
课程
招聘
[求助]求问下获取PspTerminateAllThreads地址的问题
发表于: 2013-9-6 14:57 5134

[求助]求问下获取PspTerminateAllThreads地址的问题

2013-9-6 14:57
5134
刚在逆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指向一个随便的地方.就可以导致我这样杀会蓝屏..

该怎么避免呢..

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 371
活跃值: (72)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
2
如果想获取未导出的函数,貌似最保险的办法是PDB文件解析,直接ring3调用几个api就行了.
2013-9-6 20:07
0
雪    币: 220
活跃值: (117)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
解析固然好。但是如果是rootkit的话。或者一些内核攻防。这会很蛋疼
2013-9-7 10:45
0
游客
登录 | 注册 方可回帖
返回
//