对Rav2005中HOOK的初步分析

流媒体影视爆款预测数据集6000部剧集电影21特征 本数据集模拟流媒体平台影视内容特征,包含6000部剧集、电影与纪录片样本、21个字段,覆盖内容类型、题材、出品国家、上映年份与月份、内容分级、是否平台原创、是否系列续集、改编来源、时长、季数、明星影响力、制作与营销预算、观众评分、社交热度等维度。提供top10_hit分类目标(进入平台榜单前十并保持4周以上)与views_28d_m回归目标(上线28天观看量),结果字段独立分离,便于练习避免目标泄漏。数据干净完整、无缺失值、无需表关联,直接可用于分类、回归、探索性分析,以及发布档期选择、题材与续集表现、单位营销成本观看效率等研究,适合影视行业分析、推荐系统与机器学习教学。说明:本数据为Python生成的合成数据,仅反映生成规则,不含真实节目与个人信息。许可:CC0公有领域,可自由使用与二次分发。 立即下载

对Rav2005中HOOK的初步分析   
MicrosoftCTO 

 
昨天升级了一下RAV2004。本以为很快就完,但升级程序却拖了近一个小时。启动后发现,RAV已经被升级到了2005。这事本应该就这么完了,但恰巧我对各种软件的内存占用非常敏感,弄了个empty.exe放在bat里,定期清理一下内存。执行了一遍bat却发现empty报错,说无法清理ravmond.exe!于是本能地觉得有名堂。赶紧分析了一下empty。
从出错信息入手,可以找到下面的代码(注释是我加的):
.text:01001603 loc_1001603:
.text:01001603                 call    sub_1001D1B
.text:01001608                 mov     eax, dword_12D3180 ; EAX里应该是PID
.text:0100160D                 test    eax, eax
.text:0100160F                 jz      short loc_100163D
.text:01001611                 push    eax
.text:01001612                 call    sub_1001F2C     ; 清理内存
.text:01001617                 test    eax, eax
.text:01001619                 jnz     short loc_1001636
.text:0100161B                 push    dword_12D3180
.text:01001621                 push    offset aCouldNotEmptyW ; "could not empty working set for process"...
.text:01001626                 call    ds:printf
.text:0100162C                 pop     ecx

  OK,到sub_1001F2C去看看:

.text:01001F2C                 push    ebp
.text:01001F2D                 mov     ebp, esp
.text:01001F2F                 push    ecx
.text:01001F30                 push    esi
.text:01001F31                 push    edi
.text:01001F32                 push    [ebp+MaximumWorkingSetSize] ; dwProcessId
.text:01001F35                 xor     edi, edi
.text:01001F37                 push    edi             ; bInheritHandle
.text:01001F38                 push    1F0FFFh         ; dwDesiredAccess
.text:01001F3D                 call    ds:OpenProcess
.text:01001F43                 mov     esi, eax
.text:01001F45                 cmp     esi, edi
.text:01001F47                 jnz     short loc_1001F4D
.text:01001F49                 xor     eax, eax
.text:01001F4B                 jmp     short loc_1001F77

首先是以PROCESS_ALL_ACCESS权限调用OpenProcess。但就是在这里,esi=edi,跳到出口loc_1001F77。

好,于是写段调用OpenProcess的程序。结果发现,对ravmond的操作结果是返回ERROR_INVALID_PARAMETER??!!但是我的参数没有写错啊!然后开始怀疑bInheritHandle参数,但改了还是一样。那么,换PID。换了SMSS的PID,说没有权限,很正常。换delphi32的PID,可以正常打开。那么,就是说,参数绝对是正确的,只是RAV玩了个花样。那样,按照系统给的PID去找就找不到了。

既然这样,那就拿RAV开刀。先翻了一下RAV的目录,有几个驱动文件引起了我的注意:

Hooksys.sys
hookbase.sys
HOOKREG.sys
HookCont.sys
HookApi.sys

难道是OpenProcess被HOOK了?于是先在HookApi里查import,没有可疑的API。hookbase?Hooksys?HookCont?都没有。

还是写程序看看……GetProcAddress却报告说没有异常。

没办法,查找ravmond吧……HOOKREG里居然有ravmond的字样!改之,重新启动RAV的服务,bingo!在任务管理器里k进程时显示没有权限!那么很明显是被HOOK了。

以前玩过rootkit(只是玩而已,写不来),本来是应该想到的……

那么反汇编HOOKREG,查找ravmond的xref……在00011BEF有一个push,向上找到函数入口,得到整个函数:

.text:00011B74 sub_11B74       proc near
.text:00011B74
.text:00011B74 var_2C          = dword ptr -2Ch
.text:00011B74 var_28          = byte ptr -28h
.text:00011B74 var_9           = byte ptr -9
.text:00011B74 var_8           = dword ptr -8
.text:00011B74 var_4           = dword ptr -4
.text:00011B74 arg_0           = dword ptr  8
.text:00011B74
.text:00011B74                 push    ebp
.text:00011B75                 mov     ebp, esp
.text:00011B77                 sub     esp, 2Ch
.text:00011B7A                 mov     [ebp+var_2C], 0
.text:00011B81                 mov     [ebp+var_28], 0
.text:00011B85                 call    ds:IoGetCurrentProcess
.text:00011B8B                 mov     [ebp+var_8], eax
//指向当前进程开头的指针
.text:00011B8E                 mov     eax, [ebp+var_8]
.text:00011B91                 add     eax, dword_12F48
//dword_12F48的真实偏移
.text:00011B97                 mov     [ebp+var_4], eax
.text:00011B9A                 mov     ecx, [ebp+var_4]
.text:00011B9D                 push    ecx
.text:00011B9E                 lea     edx, [ebp+var_28]
//缓冲的长度是$1F
.text:00011BA1                 push    edx
.text:00011BA2                 call    strcpy
.text:00011BA7                 add     esp, 8
//复制
.text:00011BAA 

我们可以看到,这个东西有点象call/pop的手法。好处就是可以不要数据段(反正特征字符串是只读的)。

那么,这只是一个判断。判断dword_12F48是否含有特定的字符串,若是RAV的核心就返回3,主程序返回2,外围程序返回4,其他返回0。

那么来看看sub_11B74的xref,有三处:11D27、119E6、115E2,对应的sub分别是sub_11D00、sub_119D0、sub_115BC。

sub_115BC有4个xref,全部是code引用,sub_119D0只有1个data引用的xref,而11D00,有3个xref,data引用。

先看11D00,xref全在start里:

.text:00010453 8B 45 08                          mov     eax, [ebp+DriverObject]
.text:00010456 C7 40 38 00 1D 01+                mov     dword ptr [eax+38h], offset sub_11D00
.text:0001045D 8B 4D 08                          mov     ecx, [ebp+DriverObject]
.text:00010460 C7 41 40 00 1D 01+                mov     dword ptr [ecx+40h], offset sub_11D00
.text:00010467 8B 55 08                          mov     edx, [ebp+DriverObject]
.text:0001046A C7 82 80 00 00 00+                mov     dword ptr [edx+80h], offset sub_11D00

下面就dump一下和DriverObject有关的代码(eax,ecx,edx都是临时使用的):

.text:00010308                   ; int __stdcall start(PDRIVER_OBJECT DriverObject)
.text:00010308                                   public start
.text:00010308                   start           proc near
.text:00010308
.text:00010308                   var_64          = dword ptr -64h
.text:00010308                   var_60          = dword ptr -60h
.text:00010308                   SymbolicLinkName= UNICODE_STRING ptr -5Ch
.text:00010308                   DeviceObject    = dword ptr -54h
.text:00010308                   DeviceName      = UNICODE_STRING ptr -50h
.text:00010308                   SourceString    = word ptr -48h
.text:00010308                   var_28          = dword ptr -28h
.text:00010308                   DriverObject    = dword ptr  8
.text:00010308
.text:00010308 55                                push    ebp
.text:00010309 8B EC                             mov     ebp, esp
.text:0001030B 83 EC 64                          sub     esp, 64h
.text:0001030E 56                                push    esi
.text:0001030F 57                                push    edi
.text:00010310 C7 45 AC 00 00 00+                mov     [ebp+DeviceObject], 0
.....
.text:0001036A 8D 55 AC                          lea     edx, [ebp+DeviceObject]
.text:0001036D 52                                push    edx             ; DeviceObject
.text:0001036E 6A 00                             push    0               ; Exclusive
.text:00010370 6A 00                             push    0               ; DeviceCharacteristics
.text:00010372 68 00 84 00 00                    push    8400h           ; DeviceType
.text:00010377 8D 45 B0                          lea     eax, [ebp+DeviceName]
.text:0001037A 50                                push    eax             ; DeviceName
.text:0001037B 6A 00                             push    0               ; DeviceExtensionSize
.text:0001037D 8B 4D 08                          mov     ecx, [ebp+DriverObject]
.text:00010380 51                                push    ecx             ; DriverObject
.text:00010381 FF 15 DC 26 01 00                 call    ds:IoCreateDevice
.....
.text:000103BD 8B 45 08                          mov     eax, [ebp+DriverObject]
.text:000103C0 8B 48 04                          mov     ecx, [eax+4]
.text:000103C3 51                                push    ecx             ; DeviceObject
.text:000103C4 FF 15 D4 26 01 00                 call    ds:IoDeleteDevice
.text:000103CA 8B 45 9C                          mov     eax, [ebp+var_64]
.....
.text:00010453 8B 45 08                          mov     eax, [ebp+DriverObject]
.text:00010456 C7 40 38 00 1D 01+                mov     dword ptr [eax+38h], offset sub_11D00
.text:0001045D 8B 4D 08                          mov     ecx, [ebp+DriverObject]
.text:00010460 C7 41 40 00 1D 01+                mov     dword ptr [ecx+40h], offset sub_11D00
.text:00010467 8B 55 08                          mov     edx, [ebp+DriverObject]
.text:0001046A C7 82 80 00 00 00+                mov     dword ptr [edx+80h], offset sub_11D00
.text:00010474 8B 45 08                          mov     eax, [ebp+DriverObject]
.text:00010477 C7 40 70 BF 1D 01+                mov     dword ptr [eax+70h], offset sub_11DBF
.text:0001047E 8B 4D 08                          mov     ecx, [ebp+DriverObject]
.text:00010481 C7 41 34 68 05 01+                mov     dword ptr [ecx+34h], offset sub_10568
就是填充PDRIVER_OBJECT,其他没有什么。这里的大概意思是创建一个内核Device,然后定义几个Function。问题是,这个驱动的Type是自定义的,而我又不懂Driver……

不过还好,119D0的xref有点意思:

.text:00010CBA                 mov     eax, ds:ZwSetValueKey
.text:00010CBF                 mov     ecx, [eax+1]
.text:00010CC2                 mov     edx, ds:KeServiceDescriptorTable
.text:00010CC8                 mov     eax, [edx]
.text:00010CCA                 mov     dword ptr [eax+ecx*4], offset sub_119D0

那么,这里是修改ServiceDescriptorTable里ZwSetValueKey的入口。联想一下,应该是不允许修改RAVMOND服务的Key。

最后看看115BC,xref对应的sub有111A0,112F0,11360和119D0。而它们都是只有一个data的xref,应该是function了:

.text:00010CD1                 mov     ecx, ds:ZwCreateKey
.text:00010CD7                 mov     edx, [ecx+1]
.text:00010CDA                 mov     eax, ds:KeServiceDescriptorTable
.text:00010CDF                 mov     ecx, [eax]
.text:00010CE1                 mov     dword ptr [ecx+edx*4], offset sub_111A0
.text:00010CE8                 mov     edx, ds:ZwDeleteValueKey
.text:00010CEE                 mov     eax, [edx+1]
.text:00010CF1                 mo
...
未完待续

 
AI大模型安全架构落地解决方案.pptx 立即下载

相关推荐

国央企创新负责人如何提升企业创新与技术合作的精准度?.docx

国央企创新负责人如何提升企业创新与技术合作的精准度?

C# Winform应用程序占用内存较大解决方法整理(转)-- SetProcessWorkingSetSize

一、C# Winform应用程序占用内存较大解决方法整理(转) 原文:  http://www.jb51.net/article/56682.htm 背景: 微软的 .NET FRAMEWORK 现在可谓如火如荼了。但是,.NET 一直所为人诟病的就是“胃口太大”,狂吃内存,虽然微软声称 GC 的功能和智能化都很高,但是内存的回收问题,一直存在困扰,尤其是 winform 程序,其主要原因

sinat_15155817的专栏 7977

科技中介服务机构在协助企业对接科研成果时,如何提升服务响应速度与专业化水平.docx

科技中介服务机构在协助企业对接科研成果时,如何提升服务响应速度与专业化水平

监控系统加载模块-猥琐流

代码: #include  #include "nt_help.h" DRIVER_INITIALIZE DriverEntry; typedef struct _OBJECT_TYPE_INITIALIZER {     USHORT Length;     BOOLEAN UseDefaultObject;     BOOLEAN CaseInsensitive; #if WINVER>

M-先生 948

啊算法撒上v的咋撒方式

啊算法撒上v的咋撒方式

科技中介服务机构如何构建更加专业化的技术服务评价体系?.docx

科技中介服务机构如何构建更加专业化的技术服务评价体系?

API hooking revealed

Download source files - 69 Kb Download demo project - 139 Kb Introduction Intercepting Win32 API calls has always been a challenging subject among most of the Windows developers and I have t

执着我一生[F.S.T] 3368

高校技术转移办公室人员如何利用智能工具简化技术成果的推介与转化流程?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

Could not set process working directory to ‘ ‘: could not set current directory (errno 3)

Could not set process working directory to ‘’: could not set current directory (errno 3) 遇到这个问题:重新构建项目解决。Reload Gradle Project, 如果遇到这个问题: Execution failed for task ‘:app:clean’. Unable to delete directory: 参靠 这篇文章 最后在从头来一遍,但是好像不能彻底解决这两个问题,大家有彻底解决的办法麻烦评论

lilenglya的博客 7518

solong 图像处理器 - v3.4 - 吾爱大佬 by 金牌软件 .exe

solong 图像处理器 _ v3.4 _ 吾爱大佬 by 金牌软件 .exe

西门子 S7 PLC 对接 MES 系统:HTTP/JSON 通信实施指南

内容概要:本文介绍了通过IGT-DSER智能网关实现西门子S7-1500 PLC(采用优化访问DB数据块)与MES系统的对接方案。重点阐述了使用S7-PLUS标签方式读取PLC变量标签数据,结合网关边缘处理能力进行数据换算与JSON封装,并通过HTTP/GET或POST方式将数据上传至MES系统的技术路径。文中详细说明了网络配置、变量映射、触发逻辑设置、JSON结构生成、联调验收流程及常见故障排查方法,强调无需修改PLC程序即可完成集成,适用于工业现场快速部署。; 适合人群:自动化工程师、MES实施工程师、工业网络与设备运维人员; 使用场景及目标:①实现西门子S7-1500等支持优化DB的PLC与MES系统高效对接;②在不改动原有PLC程序的前提下完成数据采集与上传;③通过标准化JSON格式与HTTP协议实现与各类业务平台的数据交互;④提升系统集成效率并确保数据传输的准确性与可监控性; 阅读建议:此资源以实际工程案例为基础,建议读者结合IGT-DSER网关参数管理软件操作实践,重点关注标签配置、触发条件设定与JSON字段映射的细节,并在测试环境中验证请求与响应闭环后再投入正式运行。

对Rav 2005中HOOK的初步分析

分析了半天,准备放弃了。不过因为和驱动有关,而且分析过程也和RE挂钩,所以放上来给兄弟们看看。有知道的讨论一下,没有懂NT内核的作个参考,算废物利用吧。废话几句,记得Xtreme是用驱动的……寒一个……===================================================================对Rav 2005中HOOK的初步分析昨天升级了一下RAV200

2118

PSIM-串联谐振半桥LLC开关电源+PFM变频闭环控制【仿真+计算书+参考文献】

内容概要:本文详细介绍了PSIM-串联谐振半桥LLC开关电源结合PFM变频闭环控制的设计与仿真,系统阐述了LLC谐振变换器的建模方法、软开关实现机制及基于变频控制的闭环调节策略。资源包涵盖完整的PSIM仿真模型、详细的计算书与参考文献,重点展示了在宽负载范围内通过调节开关频率实现高效能运行的技术路径。系统利用串联谐振腔的频率特性,在不同负载条件下实现零电压开通(ZVS)或零电流关断(ZCS),显著降低开关损耗;同时,闭环控制通过反馈输出电压动态调整工作频率,确保输出稳定性和动态响应性能。该设计特别适用于对高效率、高功率密度有严格要求的应用场景。; 适合人群:具备电力电子、电源设计或自动化相关背景的本科高年级学生、研究生及从事开关电源研发的工程师。; 使用场景及目标:①掌握LLC谐振变换器的工作原理及其在PSIM中的建模与仿真方法;②学习PFM(脉冲频率调制)变频控制在开关电源中的闭环实现技术;③应用于高频高效电源系统的设计与优化,如通信电源、新能源变换器、车载充电机等;④为科研项目或毕业设计提供完整的仿真参考、计算依据与技术支持。; 阅读建议:建议读者结合提供的PSIM仿真文件、计算书与参考文献同步操作,深入理解谐振参数设计、变频控制逻辑与闭环反馈的实现细节,重点关注开关频率与增益曲线的关系、谐振元件参数匹配对效率的影响,并通过改变输入电压和负载条件验证系统的稳态与动态性能表现。

图腾柱无桥PFC变换器+平均电流控制+PI电压双闭环前馈控制设计(Simulink仿真实现)

图腾柱无桥PFC变换器+平均电流控制+PI电压双闭环前馈控制设计(Simulink仿真实现)内容概要:本文详细介绍了图腾柱无桥PFC变换器的设计与Simulink仿真实现,重点围绕平均电流控制和PI电压双闭环前馈控制策略展开。通过构建完整的仿真模型,分析了系统在不同工况下的动态响应特性与稳态性能,验证了所设计控制策略的有效性与鲁棒性。文章涵盖了主电路拓扑结构、控制环路设计、关键参数计算及仿真结果分析等内容,为从事电力电子变换器研发的科研人员提供了实用的技术参考与实现路径。; 适合人群:具备电力电子与自动控制理论基础,从事新能源、电源设计或相关领域研究的研发人员及高校研究生。; 使用场景及目标:①掌握图腾柱无桥PFC变换器的工作原理与建模方法;②学习平均电流控制与双闭环前馈控制的实现技巧;③应用于高效率电源系统设计与科研项目仿真验证; 阅读建议:建议结合Simulink仿真模型同步操作,深入理解各控制模块的设计逻辑与参数整定过程,并通过调整工况测试系统性能,强化理论与实践结合能力。

国央企创新负责人在推动技术转化过程中,如何更高效地识别高质量专利并实现价值转化?.docx

科易网基于AI模型+行业大数据,在技术转移、成果转化、技术经纪、知识产权、产业创新、科技招商等垂直领域的多样化应用场景,推出科技创新领域的AI+工具与数智化解决方案,推动科技创新与产业创新智能化发展。

两相交错并联BuckBoost变换器仿真模型(Simulink仿真实现)

内容概要:本文详细介绍了两相交错并联Buck-Boost变换器的Simulink仿真模型构建与控制策略研究。该变换器采用两相交错并联拓扑结构,有效降低了输入与输出电流纹波,提升了系统效率与功率密度。文中系统阐述了其主电路拓扑、工作原理及基于状态空间平均法的小信号数学建模过程,并据此设计了电压-电流双闭环PI控制器,以实现输出电压的精确调节与优良的动态响应性能。仿真模型在Simulink中完整搭建,涵盖了主功率回路、PWM脉冲生成、驱动逻辑及闭环控制系统,通过设置负载突变等工况验证了控制策略的有效性,结果表明系统响应速度快、抗干扰能力强。此外,文档还探讨了该变换器与LLC谐振变换器、PFC电路等其他电力电子装置的协同仿真应用,凸显其在新能源发电、储能系统及电动汽车等领域的广阔应用前景。; 适合人群:具备电力电子技术基础,熟悉MATLAB/Simulink仿真环境,从事电源设计、新能源系统开发或相关领域研究的研发人员及高校研究生。; 使用场景及目标:①掌握两相交错并联Buck-Boost变换器的工作原理、建模方法与纹波抑制机制;②学习并实践基于状态空间平均法的系统建模与双闭环PI控制器的设计、参数整定技巧;③应用于储能系统、电动汽车车载充电机、光伏逆变器等需要高效、低纹波直流变换的系统仿真与原型开发。; 阅读建议:建议读者结合提供的Simulink模型文件,边操作边深入理解文档中的电路拓扑、控制逻辑与参数设置,重点关注双闭环控制的实现细节、PI参数整定过程及仿真结果分析,有条件者可进一步开展硬件在环(HIL)测试,以深化对理论与实践结合的理解。

两路半桥LLC谐振变换器软开关Simulink仿真(模拟谐振参数不同、分裂电容)

内容概要:本文介绍了“两路半桥LLC谐振变换器软开关Simulink仿真”项目,重点研究了谐振参数差异与分裂电容结构对系统性能的影响。该仿真模型基于Matlab/Simulink平台构建,旨在深入分析LLC谐振变换器在软开关条件下的工作特性,包括谐振频率匹配、零电压开通(ZVS)与零电流关断(ZCS)的实现机制,以及分裂电容对电压均衡性和系统稳定性的作用。通过调节谐振腔关键参数(如电感、电容值)和开关频率,全面评估变换器在不同负载与输入电压条件下的效率、电压增益特性及动态响应能力,进而验证软开关技术的有效性与系统设计的灵活性。; 适合人群:从事电力电子、电源变换器设计与仿真的高校研究生、科研人员及企业研发工程师,具备一定的电路理论、电力电子技术基础和Simulink仿真操作能力。; 使用场景及目标:①用于LLC谐振变换器相关的课程设计、毕业课题或科研项目的仿真验证;②深入理解软开关技术在高频高效电源转换中的应用原理;③优化分裂电容结构下的参数匹配与控制策略,以提升变换器的整体性能。; 阅读建议:在学习过程中应结合电路拓扑结构分析与仿真模型操作,重点关注谐振参数变化对软开关实现的影响,建议动手修改参数并观察关键波形的变化,以深化对LLC变换器工作机理的理解。

计算机毕业设计springboot股票模拟交易系统的设计与实现u6m959【附源码+数据库+部署+LW】

选题背景: 随着互联网和金融科技的快速发展,股票市场成为了吸引人们关注和参与的重要领域之一。越来越多的人开始对股票投资感兴趣,希望通过交易股票来获取收益。然而,对于初学者来说,股票市场的复杂性和风险往往让他们望而却步。因此,设计和实现一个股票模拟交易系统,可以帮助初学者更好地理解和掌握股票交易的规则和技巧,提高他们的投资决策能力。 意义: 股票模拟交易系统的设计与实现具有以下几个重要意义: 提供实践机会:股票模拟交易系统为投资者提供了一个实践的平台,使他们能够在真实市场环境下进行模拟交易,了解股票市场的

gp12081的博客 1762
上一篇: peid逆向记录
下一篇: 终级免杀之PcShare Vs KV2006
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值