吾爱破解 - LCG - LSG |安卓破解|病毒分析|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 17591|回复: 23
收起左侧

[系统底层] x64 win7 KeInsertQueueApc结束进程

[复制链接]
msx2009 发表于 2014-12-26 12:14
x64 win7 KeInsertQueueApc结束进程
    插apc结束进程已不是什么新鲜事,x86 xp 下插apc网上也有很多demo,但是64win7下在网上却找不到,我们来实现一下。
先看一下32位平台和64平台下插apc不同的地方,插apc需要获取eprocess中的几个偏移地址,关键在于偏移地址的改变:
第一个是线程数量的偏移地址,x64 win7ActiveThreads偏移是0x328, x86 xp下是 0x1a0,所以线程数量的获取如下:
num=(ULONG)*(ULONGLONG *)(epro+0x328);
第二个是ThreadListHead 的偏移量: Head=epro+0x308; //x64 win7List_entry偏移是0x308x86 xp下是 0x190
第三个是线程地址的偏移量:
address=Head-0x428; //win7 x64下是0x428x86 xp下是 0x22c
QQ截图20141226120114.png
代码如下:
VOID  KillThreadRoutine(IN PKAPC Apc,
                              IN OUT PKNORMAL_ROUTINE *NormalRoutine,
                              IN OUT PVOID *NormalContext,
                              IN OUT PVOID *SystemArgument1,
                              IN OUT PVOID *SystemArgument2)
{
        ExFreePool(Apc);  //释放APC
        PspExitThread(STATUS_SUCCESS);//根据PspTerminateThreadByPointer定位PspExitThread地址
}
VOID  KillProcessWithApc(ULONGLONG epro)
{
  BOOLEAN status;
  PKAPC ExitApc=NULL;
  PEPROCESS eprocess;
  PETHREAD  ethread;
  ULONGLONG i;
  ULONG num;   //线程数量
  ULONGLONG Head;  //链表头
  ULONGLONG address;//地址
  num=(ULONG)*(ULONGLONG *)(epro+0x328); //x64 win7ActiveThreads偏移是0x328, x86 xp下是 0x1a0
  DbgPrint("[RecordThreadAddress] num: 0x%llx\n",num);    //打印线程数量
  Head=epro+0x308; //x64 win7List_entry偏移是0x308x86 xp下是 0x190
  for(i=0;i<num;i++)
  {   
    //记录线程地址
    Head=(ULONGLONG)((PLIST_ENTRY)Head)->Flink;
        address=Head-0x428; //win7 x64下是0x428x86 xp下是 0x22c
    DbgPrint("[ThreadAddress] address: 0x%llx\n",address);      //打印线程地址
    ethread=(PETHREAD)address;                                  //转换成线程指针
    ExitApc=(PKAPC)ExAllocatePoolWithTag(NonPagedPool,sizeof(KAPC),MEM_TAG);
    if(ExitApc==NULL)
    {
      DbgPrint("[KillProcessWithApc] malloc memory failed \n");
      return;
    }
    KeInitializeApc(ExitApc,
      ethread,                        
      OriginalApcEnvironment,
      KillThreadRoutine,
            NULL,
            NULL,
            KernelMode,
            NULL);//为线程初始化APC
    status=KeInsertQueueApc(ExitApc,ExitApc,NULL,2);   //插入Apc到线程队列
  }
         
}
PspExitThread 自己需要定位实现
完整代码看demo KillProcessByInsertApc(win7x64).rar (94.42 KB, 下载次数: 200)

免费评分

参与人数 1威望 +1 收起 理由
Hmily + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| msx2009 发表于 2015-4-30 14:19
huangai93 发表于 2015-4-26 00:23
address=Head-0x428; //win7 x64下是0x428,x86 xp下是 0x22c 428怎么来的能说一下吗?》

dt一下 内核中线程对应的结构体,xp和win7下线程对应的结构体是不一样的,差异就在结构体里
Hmily 发表于 2015-1-24 21:52
我是用户 发表于 2015-1-24 13:50
...眼花了...编程区果然是死区,一点人气都没有

版主有不可逃避的责任啊,脱壳破解区需要有人来答复疑问啊,要来帮忙吗?
asd9988 发表于 2014-12-26 12:47
X64的东西还是很少的,也不能说没有,总之谢谢分享心得和技术。
a1598 发表于 2014-12-26 12:51
什么东西啊俺看不懂
demon1385 发表于 2014-12-28 18:20
看看 学习一下。。。。。。。。
crack001 发表于 2015-1-21 11:28
学习一下x64下面的apc注入
我是用户 发表于 2015-1-21 18:00
编程区易语言满天飞,总算见过一个不是易的了

点评

你看错了吧,这是软件调试区。。。  详情 回复 发表于 2015-1-21 23:35
Hmily 发表于 2015-1-21 23:35
我是用户 发表于 2015-1-21 18:00
编程区易语言满天飞,总算见过一个不是易的了

你看错了吧,这是软件调试区。。。
我是用户 发表于 2015-1-24 13:50
Hmily 发表于 2015-1-21 23:35
你看错了吧,这是软件调试区。。。

...眼花了...编程区果然是死区,一点人气都没有

点评

版主有不可逃避的责任啊,脱壳破解区需要有人来答复疑问啊,要来帮忙吗?  详情 回复 发表于 2015-1-24 21:52
l38413811 发表于 2015-1-24 18:28
小白路过,~看见帖子顶一顶。。。
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则 警告:本版块禁止灌水或回复与主题无关内容,违者重罚!

快速回复 收藏帖子 返回列表 搜索

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-4-26 07:38

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表