不用api获取进程ID和线程ID
作者:admin 日期:2009-08-29
在网上看到的代码,在Ring3层获取PID和TID,很有意思,转过来:
______________________________________________________
PID:
mov pid,fs:[0x20];
TID:
mov tid,fs:[0x24];
______________________________________________________
利用了在用户态下,fs始终与TEB对齐这个事实。
那GetCurrentProcessId是不是也是利用读取TEB里的CLIENT_ID来实现的呢?
看看逆向代码吧:
_GetCurrentProcessId@0:
7C8099C0 mov eax,dword ptr fs:[00000018h]
7C8099C6 mov eax,dword ptr [eax+20h]
7C8099C9 ret
7C8099CA nop
7C8099CB nop
7C8099CC nop
7C8099CD nop
7C8099CE nop
果然很直接。
做了个实验,把GetCurrentProcessId误导了:
#include <windows.h>
#include <stdio.h>
int main(){
_asm mov dword ptr fs:[0x20], 4;
DWORD pid = GetCurrentProcessId();
printf("pid:%d\n",pid);
return 0;
}
______________________________________________________
PID:
mov pid,fs:[0x20];
TID:
mov tid,fs:[0x24];
______________________________________________________
利用了在用户态下,fs始终与TEB对齐这个事实。
那GetCurrentProcessId是不是也是利用读取TEB里的CLIENT_ID来实现的呢?
看看逆向代码吧:
_GetCurrentProcessId@0:
7C8099C0 mov eax,dword ptr fs:[00000018h]
7C8099C6 mov eax,dword ptr [eax+20h]
7C8099C9 ret
7C8099CA nop
7C8099CB nop
7C8099CC nop
7C8099CD nop
7C8099CE nop
果然很直接。
做了个实验,把GetCurrentProcessId误导了:
#include <windows.h>
#include <stdio.h>
int main(){
_asm mov dword ptr fs:[0x20], 4;
DWORD pid = GetCurrentProcessId();
printf("pid:%d\n",pid);
return 0;
}
评论: 1 | 查看次数: 10694