远程线程的实现

远程线程的实现

先申明哈本人是菜鸟,下面发表自己对远程线程的学习认识,如有不完善的地方,还忘高人指教:

1.在windows32位的系统下,各个进程之间都是受到保护的,各个进程拥有自己的私有地址空间,使得要想访问其他进程有一定的难度,但是微软还是给大家留了一首哈哈...........那就是通过远程线程可以实现。现在我们一起来学习以下怎么样通过远程线程访问其他进程,包括一些系统进程。

2.上面提到了win32下的各个进程是受保护的,所以我们在打开其他进程前就必须先把自己的进程的权限提升。提升本地进程的权限是有函数可以实现的:OpenProcessToken|()  LookupPrivilegeValue()     |     AdjustTokenPrivileges().   通过这3个函数即可。函数的具体使用大家可以参考msdn........我把自己的代码贴在下面供大家参考:

    HANDLE           hToken;

    TOKEN_PRIVILEGES tp = { 0 };

LUID  id;

    HANDLE hProcess = GetCurrentProcess();

    if (!OpenProcessToken(hProcess, TOKEN_ADJUST_PRIVILEGES | TOKEN_QUERY,

                          &hToken))

        return;

    if (!LookupPrivilegeValue(NULL, SE_DEBUG_NAME, &id))

    {

        CloseHandle(hToken);

        return;

    }

    tp.PrivilegeCount = 1;

tp.Privileges[0].Luid=id;

    tp.Privileges[0].Attributes = SE_PRIVILEGE_ENABLED;

    AdjustTokenPrivileges(hToken, FALSE, &tp, sizeof(TOKEN_PRIVILEGES),

                          NULL, NULL);

2.现在已经把权限提升了,仅接到做什么呢?

  那就是打开目标进程,在目标进程内划分一块空间给我们自己写的代码使用:

我们使用函数CreateToolhelp32Snapshot()给当前的进程列表创建一个快照,

Processentery32   pe32;

Handle hsnap=CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0)    第一个参数表示对当前的进程快照,参考msdn可以看到还有其他参数。Process32first(shnap,&pe32);

这个函数是对快照的进程列表的第一个进程查找,然后使用prcocess32next(shnap,&pe32)

对下一个查找。知道找到目标进程,pe32.th32ProcessID;获得目标进程的id号。

然后使用openprocess()函数打开目标进程并获得目标进程的句柄,接到用VirtualAllocEx()函数在目标进程中划分空间,他的第一个参数就是目标进程的句柄,如果为NULL的话,就是在本进程中划分空间大小。

目标进程打开了,空间大小划分了,但是咋个在目标进程中写东写了?????????

呵呵。。。。。

我们可以这样来:先在自己的程序中写好,考到我们刚刚划分的那个空间中去(这里就要用到memcpy()这个函数),这里用说名一点的是,空间大下一定要大于我们准备写的代码(写到目标进程中去的)。

最后就是使用CreateRemoteThread()这个函数这目标进程中创建一个线程,这个函数很好,值得大家认真学习一哈。

最后在说一哈,这个技术当中最麻烦的地方是们,那就是在目标进程划分出的空间中写代码是最麻烦的。为啥这样说呢?这里就涉及到地址的处理。我们通常这样来,#define beep_addr           0xAAAAAAAA

先宏定义。然后在本进程中获得要调用的函数的地址,列入Beep(),这个函数,

Hmodul  hg=getmodulehandle(“kernel32”);

Handle   mm=getprocaddress(hg,“Beep”);

把handle放到我们beep_addr中去。

说到这里也差不多了,哈哈。。。小弟实属菜鸟。。学习,忘高人不要见笑!!!!!

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值