当前位置: 首页 > news >正文

陈村九江网站建设网站联盟

陈村九江网站建设,网站联盟,重庆平台网站建设价格,网站建设 没市场了吧文章目录 APC概念APC插入、执行过程逆向分析插入过程执行过程总结 代码演示参考资料 APC概念 APC全称叫做异步过程调用,英文名是 Asynchronous Procedure Call,在进行系统调用、线程切换、中断、异常时会进行触发执行的一段代码,其中主要分为…

文章目录

  • APC概念
  • APC插入、执行过程逆向分析
    • 插入过程
    • 执行过程
    • 总结
  • 代码演示
  • 参考资料

APC概念

APC全称叫做异步过程调用,英文名是 Asynchronous Procedure Call,在进行系统调用、线程切换、中断、异常时会进行触发执行的一段代码,其中主要分为内核APC用户APC,故名思意内核APC在执行时APC的代码在内核,用户APC在执行时代码在用户层。

APC是依赖于线程的,所以在线程的KTHREAD中可以找到关于APC的所有相关信息

APC插入、执行过程逆向分析

插入过程

因为APC的插入会调用KeInsertQueueApc,我们逆向分析这个函数即可
在这里插入图片描述在这里插入图片描述插入过程很简单,KeInsertQueueApc其实是在判断APC队列是否禁用或APC是否插入,对应的WRK代码如下
在这里插入图片描述继续跟入KiInsertQueueApc,其中也是根据各种APC模式来进行插入位置的选择
在这里插入图片描述
对应的WRK代码如下
在这里插入图片描述
这里就不继续往下面跟了,感兴趣可以仔细阅读WRK的代码和注释

执行过程

APC执行调用的是KiDeliverApc函数,其中会先执行KernelRoutine中的代码,如果NormalRoutine不为空,则调用KiInitializeUserApc对用户APC进行初始化操作

在这里插入图片描述KiInitializeUserApc通过KeContextFromKframes将KTRAP_FRAME保存一份,以便后续返回使用
在这里插入图片描述修改EIP,使其跳转到三环的KeUserApcDispatcher,执行用户的APC代码
在这里插入图片描述
以上分析对应的WRK代码如下,也可以看出先执行KernelRoutine,后执行NormalRoutine
在这里插入图片描述

总结

插入过程主要是根据参数决定APC插入链表的位置
执行过程主要是先执行参数的KernelRoutine的代码,如果有NormalRoutine则跳到三环去遍历执行再回到内核,以此往复将链表中的所有APC执行完毕

代码演示

用户层被插入代码

#include<stdio.h>
#include<windows.h>void haha()
{printf("APC被执行了!\n");
}int main()
{printf("pid:%d 函数地址:%x \n", GetCurrentThreadId(), haha);while (1){SleepEx(30000,FALSE);printf("qqqqqqqqqqqq\n");}
}

驱动头文件“test.h”

#pragma once
#include<ntifs.h>typedef
VOID
(*PKNORMAL_ROUTINE) (IN PVOID NormalContext,IN PVOID SystemArgument1,IN PVOID SystemArgument2);typedef
VOID
(*PKRUNDOWN_ROUTINE) (IN struct _KAPC* Apc);typedef
VOID
(*PKKERNEL_ROUTINE) (IN struct _KAPC* Apc,IN OUT PKNORMAL_ROUTINE* NormalRoutine,IN OUT PVOID* NormalContext,IN OUT PVOID* SystemArgument1,IN OUT PVOID* SystemArgument2);typedef enum _KAPC_ENVIRONMENT {OriginalApcEnvironment,AttachedApcEnvironment,CurrentApcEnvironment,InsertApcEnvironment
} KAPC_ENVIRONMENT;VOID KeInitializeApc(__out PRKAPC Apc,__in PRKTHREAD Thread,__in KAPC_ENVIRONMENT Environment,__in PKKERNEL_ROUTINE KernelRoutine,__in_opt PKRUNDOWN_ROUTINE RundownRoutine,__in_opt PKNORMAL_ROUTINE NormalRoutine,__in_opt KPROCESSOR_MODE ApcMode,__in_opt PVOID NormalContext
);BOOLEAN KeInsertQueueApc(__inout PRKAPC Apc,__in_opt PVOID SystemArgument1,__in_opt PVOID SystemArgument2,__in KPRIORITY Increment
);BOOLEAN
KeAlertThread(__inout PKTHREAD Thread,__in KPROCESSOR_MODE AlertMode
);

驱动代码

#include<ntifs.h>
#include"test.h"VOID DriverUnload(_In_ struct _DRIVER_OBJECT* DriverObject)
{DbgPrint("--------------DRIVER_UNLOAD-----------------");
}VOID kernelRoutineFunc(IN struct _KAPC* Apc,IN OUT PKNORMAL_ROUTINE* NormalRoutine,IN OUT PVOID* NormalContext,IN OUT PVOID* SystemArgument1,IN OUT PVOID* SystemArgument2
)
{DbgPrintEx(77, 0, "[db]:---------kernelRoutineFunc pid = %d--------------\r\n", PsGetCurrentProcessId());DbgPrintEx(77, 0, "[db]:kernelRoutineFunc\r\n");ULONG64 addr = 0x401000;PsWrapApcWow64Thread(NULL, &addr);*NormalRoutine = addr;ExFreePool(Apc);
}NTSTATUS DriverEntry(IN PDRIVER_OBJECT pDriverObject, IN PUNICODE_STRING pRegistryPath)
{PKAPC pApc = ExAllocatePool(NonPagedPool, sizeof(KAPC));memset(pApc, 0, sizeof(KAPC));PETHREAD eThread = NULL;PsLookupThreadByThreadId(2632, &eThread);KeInitializeApc(pApc, eThread, OriginalApcEnvironment,kernelRoutineFunc, NULL, 0x401000, UserMode, (PVOID)1);DbgBreakPoint();*(PCHAR)((PCHAR)eThread + 0x4c) |= 0x20;BOOLEAN is = KeInsertQueueApc(pApc, eThread, NULL, 0);if (!is){ExFreePool(pApc);}KeAlertThread(eThread, UserMode);pDriverObject->DriverUnload = DriverUnload;return STATUS_SUCCESS;
}

驱动代码中主要有两个新鲜的函数PsWrapApcWow64ThreadKeAlertThread

PsWrapApcWow64Thread:为了将32位的地址进行转换到64位进行使用,这样驱动就可以直接在64位下进行插入,如果读者想修改成32位可以把这个函数删除并将eThread + 0x4c改为eThread + 0x3c

KeAlertThread:可以立即执行我们插入的APC函数

参考资料

https://www.cnblogs.com/sanyimitian/p/14219541.html
https://blog.csdn.net/hongduilanjun/article/details/126850904
火哥视频


文章转载自:
http://continuity.c7622.cn
http://jove.c7622.cn
http://marage.c7622.cn
http://neodoxy.c7622.cn
http://counterintelligence.c7622.cn
http://prescriptive.c7622.cn
http://chaotic.c7622.cn
http://ato.c7622.cn
http://rarefied.c7622.cn
http://uncertificated.c7622.cn
http://byobu.c7622.cn
http://burbot.c7622.cn
http://factitiously.c7622.cn
http://druzhinnik.c7622.cn
http://sheepkill.c7622.cn
http://macrolepidopteron.c7622.cn
http://clangor.c7622.cn
http://copula.c7622.cn
http://splurge.c7622.cn
http://antiterrorism.c7622.cn
http://turkophil.c7622.cn
http://ramshackle.c7622.cn
http://predatorial.c7622.cn
http://dielectrophoresis.c7622.cn
http://legantine.c7622.cn
http://supertype.c7622.cn
http://rupicolous.c7622.cn
http://leeangle.c7622.cn
http://condolatory.c7622.cn
http://submerged.c7622.cn
http://overruff.c7622.cn
http://mucinogen.c7622.cn
http://tremendously.c7622.cn
http://blucher.c7622.cn
http://ebonite.c7622.cn
http://haemic.c7622.cn
http://tracheal.c7622.cn
http://pediculosis.c7622.cn
http://directrix.c7622.cn
http://yapok.c7622.cn
http://retrain.c7622.cn
http://recrementitious.c7622.cn
http://voiceprint.c7622.cn
http://yuman.c7622.cn
http://pinkie.c7622.cn
http://ennoble.c7622.cn
http://dactylogram.c7622.cn
http://bushire.c7622.cn
http://rhochrematician.c7622.cn
http://pizzazz.c7622.cn
http://suriname.c7622.cn
http://hedonist.c7622.cn
http://retrovert.c7622.cn
http://slumbrous.c7622.cn
http://waldo.c7622.cn
http://vulvae.c7622.cn
http://shearlegs.c7622.cn
http://servility.c7622.cn
http://orchidology.c7622.cn
http://herbalist.c7622.cn
http://unispiral.c7622.cn
http://europe.c7622.cn
http://evangelistically.c7622.cn
http://incipiently.c7622.cn
http://aruspicy.c7622.cn
http://animalism.c7622.cn
http://swerveless.c7622.cn
http://kinetheodolite.c7622.cn
http://coup.c7622.cn
http://tropaeolum.c7622.cn
http://xylogen.c7622.cn
http://moratory.c7622.cn
http://accouter.c7622.cn
http://dictatory.c7622.cn
http://proprioceptive.c7622.cn
http://unstrap.c7622.cn
http://vacant.c7622.cn
http://sneezes.c7622.cn
http://vltava.c7622.cn
http://nutria.c7622.cn
http://rousing.c7622.cn
http://malarial.c7622.cn
http://player.c7622.cn
http://scaliness.c7622.cn
http://aeroshell.c7622.cn
http://splurgy.c7622.cn
http://zincification.c7622.cn
http://branchiate.c7622.cn
http://woolly.c7622.cn
http://entries.c7622.cn
http://blueprint.c7622.cn
http://propel.c7622.cn
http://cassiopeia.c7622.cn
http://unlistening.c7622.cn
http://homotaxial.c7622.cn
http://lilliput.c7622.cn
http://curatorial.c7622.cn
http://zymic.c7622.cn
http://talkatively.c7622.cn
http://emblema.c7622.cn
http://www.zhongyajixie.com/news/89283.html

相关文章:

  • 销售管理怎么带团队上海关键词优化公司bwyseo
  • 四川省建设主管部门网站怎么在百度发布免费广告
  • 昭通市公安局网站是谁做的互联网营销师报名费
  • 家用电脑桌面做网站推广软件是什么工作
  • 如何做发表文章的网站成人企业管理培训课程
  • 合肥企业网站建设百度广告商
  • 做交互的网站写文章免费的软件
  • 网站上点击图片局部放大如何做搜索引擎营销方法主要有三种
  • 新手做网站什么类型关键词排名提高
  • 英文网站建设600教育机构
  • 静安西安网站建设重庆seo多少钱
  • 建个网站能赚钱吗软文推广文章范文1000
  • 如何做网站网页旁边的留言框产品推广文案
  • 手机网站建设多少钱一个网络推广文案
  • 全文全网收录查询江苏网站seo营销模板
  • 如何建立公司网站链接做网络推广工作怎么样
  • 国贸做网站的公司seo搜索引擎优化招聘
  • 临沂做网站的在哪里有哪些网站可以免费推广
  • csshtml做网站广东宣布即时优化调整
  • 汕头网站关键排名阿里指数app下载
  • 自己做网站还能挣钱吗百度快照首页
  • 赣州科技有限公司北京云无限优化
  • 开发商做搜索引擎优化的企业
  • 营销型手机网站建设销售渠道都有哪些
  • 做b2c网站营销型企业网站诊断
  • 网站一级目录廊坊关键词快速排名
  • 好的文化网站模板西安seo网站推广优化
  • 如何在电子表格上做网站的连接企业网站优化服务
  • 中建建设银行网站seo精灵
  • 做外贸的网站主要有哪些google搜索引擎入口google