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

sfc_os!SfcValidateDLL函数分析之SfcGetValidationData

第一部分:

NTSTATUS
SfcQueueValidationThread(
IN PVOID lpv
)
{


//
// now validate the file
//

                SfcValidateDLL( vrd, hCatAdmin );
vrd->Flags |= VRD_FLAG_REQUEST_PROCESSED;


第二部分:

0: kd> t
Breakpoint 14 hit
sfc_os!SfcValidateDLL:
001b:768378e1 55              push    ebp
0: kd> kc
#
00 sfc_os!SfcValidateDLL
01 sfc_os!SfcQueueValidationThread
02 kernel32!BaseThreadStart
0: kd> kv
# ChildEBP RetAddr  Args to Child              
00 007cf724 76838a3d 012380d0 01c0caf8 00000000 sfc_os!SfcValidateDLL (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 2201]
01 007cffb8 77e41be7 00000000 00000000 00000000 sfc_os!SfcQueueValidationThread+0x4ce (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\subsys\sm\sfc\dll\validate.c @ 1671]
02 007cffec 00000000 7683856f 00000000 00000000 kernel32!BaseThreadStart+0x34 (FPO: [Non-Fpo]) (CONV: stdcall) [d:\srv03rtm\base\win32\client\support.c @ 533]


第三部分:

BOOL
SfcGetValidationData(
IN PUNICODE_STRING FileName,
IN PUNICODE_STRING FullPathName,
IN HANDLE DirHandle,
IN HCATADMIN hCatAdmin,
OUT PIMAGE_VALIDATION_DATA ImageValData
)
{
NTSTATUS Status;
HANDLE FileHandle;

    ASSERT((FileName != NULL) && (FileName->Buffer != NULL));
ASSERT((FullPathName != NULL) && (FullPathName->Buffer != NULL));
ASSERT(   (DirHandle != NULL)
&& (hCatAdmin != NULL)
&& (ImageValData != NULL) );

    RtlZeroMemory( ImageValData, sizeof(IMAGE_VALIDATION_DATA) );

    //
// open the file
//

    Status = SfcOpenFile( FileName, DirHandle, SHARE_ALL, &FileHandle );
if (NT_SUCCESS(Status)) {

        ASSERT(FileHandle != INVALID_HANDLE_VALUE);
ImageValData->FilePresent = TRUE;
SfcGetFileVersion(FileHandle,
&ImageValData->DllVersion,
&ImageValData->DllCheckSum,
ImageValData->FileName );
} else {
//
// we don't to anything on failure since this is an expected state
// if the file was just removed.  The member variables's below are
// automatically set at the entrypoint to the function so they are
// not necessary but are present and commented out for the sake of
// clarity
//
NOTHING;
//ImageValData->SignatureValid = FALSE;
//ImageValData->FilePresent = FALSE;
}

    //
// verify the file signature
//

    if (hCatAdmin && FileHandle != NULL) {
ImageValData->SignatureValid = SfcValidateFileSignature(
hCatAdmin,
FileHandle,
FileName->Buffer,
FullPathName->Buffer);
} else {
ImageValData->SignatureValid = FALSE;
}

    //
// close the file
//

    if (FileHandle != INVALID_HANDLE_VALUE) {
NtClose( FileHandle );
}

    return TRUE;
}

第四部分:

0: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((sfc_os!_IMAGE_VALIDATION_DATA *)0x12380e0))
(*((sfc_os!_IMAGE_VALIDATION_DATA *)0x12380e0))                 [Type: _IMAGE_VALIDATION_DATA]
[+0x000] DllVersion       : 0x500020ece0000 [Type: unsigned __int64]
[+0x008] DllCheckSum      : 0xcb39 [Type: unsigned long]
[+0x00c] SignatureValid   : 0 [Type: int]
[+0x010] FilePresent      : 1 [Type: int]
[+0x014] FileName         [Type: unsigned short [32]]
0: kd> dx -id 0,0,ffffffff89ce3d88 -r1 (*((sfc_os!unsigned short (*)[32])0x12380f4))
(*((sfc_os!unsigned short (*)[32])0x12380f4))                 [Type: unsigned short [32]]
[0]              : 0x70 [Type: unsigned short]
[1]              : 0x69 [Type: unsigned short]
[2]              : 0x64 [Type: unsigned short]
[3]              : 0x67 [Type: unsigned short]
[4]              : 0x65 [Type: unsigned short]
[5]              : 0x6e [Type: unsigned short]
[6]              : 0x2e [Type: unsigned short]
[7]              : 0x64 [Type: unsigned short]
[8]              : 0x6c [Type: unsigned short]
[9]              : 0x6c [Type: unsigned short]

0: kd> db 0x12380f4
012380f4  70 00 69 00 64 00 67 00-65 00 6e 00 2e 00 64 00  p.i.d.g.e.n...d.
01238104  6c 00 6c 00 00 00 00 00-00 00 00 00 00 00 00 00  l.l.............

http://www.dtcms.com/a/339759.html

相关文章:

  • Android音频学习(十三)——音量配置文件分析
  • Python数据分析:DataFrame,reindex,重建索引。有时候整型变浮点型,有时候又不变?
  • FPGA 在情绪识别领域的护理应用(一)
  • 第二十六天:static、const、#define的用法和区别
  • Java:Assert与 Return
  • ZKmall开源商城跨境物流解决方案:让全球配送从复杂到可控的实战之路
  • 深入理解 MySQL 主从同步
  • 【弦乐教程】弦乐家族与音源解析:从乐器到音色的全面认识
  • nodejs使用
  • python matplotlib库如何使用
  • 构造:算法设计中的“魔法工具箱
  • 【C++】C++ 的护身符:解锁 try-catch 异常处理
  • IPD流程执行检查表
  • pnpm 和 npm 差异
  • Spring事务基础:你在入门时踩过的所有坑
  • MoonBit Perals Vol.06: Moonbit 与 LLVM 共舞 (上):编译前端实现
  • 【深度解析】2025年中国GEO优化公司:如何驱动“答案营销”
  • python学习DAY46打卡
  • Vulkan笔记(十)-图形管道的七个配置项
  • 微服务-07.微服务拆分-微服务项目结构说明
  • VulKan笔记(九)-着色器
  • Qt消息队列
  • MySQL深分页性能优化实战:大数据量情况下如何进行优化
  • MySQL 三大日志:redo log、undo log、binlog 详解
  • 面试题储备-MQ篇 1-说说你对RabbitMQ的理解
  • 3D检测笔记:MMDetection3d环境配置
  • 基于单片机智能手环/健康手环/老人健康监测
  • DataSourceAutoConfiguration源码笔记
  • 47 C++ STL模板库16-容器8-关联容器-集合(set)多重集合(multiset)
  • Lec. 2: Pytorch, Resource Accounting 课程笔记