昨天写的那个 hook ssdt的驱动,用的是硬编码的办法,这样在不同的系统中由于NtShutdownSystem的服务号都不相同,所以在不同的操作系统上代码都要做修改,这个比较不爽.今天听老大PJF说有避免硬编码的方法,google了下,发现下面的文章,代码稍微改了改,用在我的驱动中,果然好使.文章贴在下面: ------------------------------------------------------------------------------------------- from http://www.rootkit.com Hardcoding the positions seems a poor solution, since it means after a new service pack, the rootkit may no longer work and become discovered. As I have found the code on this site extremely helpful, I think it is only fair that I return the favour ;-) I have implemented the method described in previous posts, whereby I have mapped a view of ntdll.dll into the process space of whoever loads the driver initially, and then retrieve the required function positions directly from the dll. This was relatively simple to do, and only requires knowledge of the pe file format, and a few undocumented apis. Using the function pasted below, when hooking you simply do as follows: RtlInitUnicodeString(&dllName, L"//Device//HarddiskVolume1//Windows//System32//ntdll.dll"); functionAddress = GetDllFunctionAddress(functionName, &dllName); position = *((WORD*)(functionAddress+1)); g_OriginalZwCreateProcessEx = (ZWCREATEPROCESSEX)(KeServiceDescriptorTable.ServiceTableBase[position]); and here's the function GetDllFunctionAddress: DWORD GetDllFunctionAddress(char* lpFunctionName, PUNICODE_STRING pDllName) { HANDLE hThread, hSection, hFile, hMod; SECTION_IMAGE_INFORMATION sii; IMAGE_DOS_HEADER* dosheader; IMAGE_OPTIONAL_HEADER* opthdr; IMAGE_EXPORT_DIRECTORY* pExportTable; DWORD* arrayOfFunctionAddresses; DWORD* arrayOfFunctionNames; WORD* arrayOfFunctionOrdinals; DWORD functionOrdinal; DWORD Base, x, functionAddress; char* functionName; STRING ntFunctionName, ntFunctionNameSearch; PVOID BaseAddress = NULL; SIZE_T size=0; OBJECT_ATTRIBUTES oa = {sizeof oa, 0, pDllName, OBJ_CASE_INSENSITIVE}; IO_STATUS_BLOCK iosb; //_asm int 3; ZwOpenFile(&hFile, FILE_EXECUTE | SYNCHRONIZE, &oa, &iosb, FILE_SHARE_READ, FILE_SYNCHRONOUS_IO_NONALERT); oa.ObjectName = 0; ZwCreateSection(&hSection, SECTION_ALL_ACCESS, &oa, 0,PAGE_EXECUTE, SEC_IMAGE, hFile); ZwMapViewOfSection(hSection, NtCurrentProcess(), &BaseAddress, 0, 1000, 0, &size, (SECTION_INHERIT)1, MEM_TOP_DOWN, PAGE_READWRITE); ZwClose(hFile); hMod = BaseAddress; dosheader = (IMAGE_DOS_HEADER *)hMod; opthdr =(IMAGE_OPTIONAL_HEADER *) ((BYTE*)hMod+dosheader->e_lfanew+24); pExportTable =(IMAGE_EXPORT_DIRECTORY*)((BYTE*) hMod + opthdr->DataDirectory[ IMAGE_DIRECTORY_ENTRY_EXPORT]. VirtualAddress); // now we can get the exported functions, but note we convert from RVA to address arrayOfFunctionAddresses = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfFunctions); arrayOfFunctionNames = (DWORD*)( (BYTE*)hMod + pExportTable->AddressOfNames); arrayOfFunctionOrdinals = (WORD*)( (BYTE*)hMod + pExportTable->AddressOfNameOrdinals); Base = pExportTable->Base; RtlInitString(&ntFunctionNameSearch, lpFunctionName); for(x = 0; x < pExportTable->NumberOfFunctions; x++) { functionName = (char*)( (BYTE*)hMod + arrayOfFunctionNames[x]); RtlInitString(&ntFunctionName, functionName); functionOrdinal = arrayOfFunctionOrdinals[x] + Base - 1; // always need to add base, -1 as array counts from 0 // this is the funny bit. you would expect the function pointer to simply be arrayOfFunctionAddresses[x]... // oh no... thats too simple. it is actually arrayOfFunctionAddresses[functionOrdinal]!! functionAddress = (DWORD)( (BYTE*)hMod + arrayOfFunctionAddresses[functionOrdinal]); if (RtlCompareString(&ntFunctionName, &ntFunctionNameSearch, TRUE) == 0) { ZwClose(hSection); return functionAddress; } } ZwClose(hSection); return 0; }
相关推荐
Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解
这里网上没有好的hook代码,这里我们为了更好的查看这个工具的牛逼之处,弄一个比较实际的案例就是hook系统加载dex的函数,这样我们就可以获取到每个应用的dex文件了,这种方式对于早期加固是一个比较好的脱壳方案。这里先获取当前进程名称,然后构造dex文件名,保存dex文件,最后一定要记得返回原始的函数,不能影响正常的流程。第二件事:**需要过滤系统进程,并不是所有的进程都是我们想要hook的,而且这些进程未必有dex文件,比如鼻祖进程zygote,而这些进程过滤规则,需要我们自己打印看结果。
frida hook未导出函数
【代码】frida hook未导出函数。
Android逆向之旅—Hook神器Frida使用详解
一、前言 在逆向过程中有一个Hook神器是必不可少的工具,之前已经介绍了Xposed和Substrate了,在不同场景下面这两个框架工具具备各自的用途,当然Xposed现在也是我最常用的框架工具,不了解的同学可以看这两篇文章:Android中Hook神器Xposed工具介绍和Android中Hook神器SubstrateCydia工具介绍这两篇文章非常重要一个是Hook Java层的时候最...
windows 内核文档化API/导出但未文档化API/未导出API
导出函数:顾名思义,出现在导出表(EAT)里面的函数,可以给外部调用的函数,验证是否为导出函数的方法,熟悉逆向的朋友可以使用LordPE之类的工具查看,当然也可以使用GetProcAddress或者MmGetSystemRoutineAddress之类的函数来获取地址,如果成功的话就是导出函数。 非导出函数:这种函数是供自己调用使用的,不想提供给别人使用,当然也有方法可以获取函数地址,可以根据函
看雪3万课程笔记-FRIDA高级API实用方法:Frida Hook Native层
一、使用工具: apk:攻防世界中CTF题,安装后图表显示黑客精神 xman.apk 工具:IDA,jadx 二、分析: 1、首先jadx打开app分析java代码 从上图可以看出关键判断点为MyApp中m的值,从图二可以看出MyApp的方法注册在native层。 有initSN、saveSN、work三个函数。 2、解压apk用IDA打开libmyjni.so文件。导出函数中不能直接搜索到上面三个函数,我们直接双击JNI_ONLOAD,F5查看伪代码 当我们手动更改Get.
手把手教你用C#和LibUsbDotNet实现USB设备通信(含完整代码示例)
本文详细介绍了如何使用C#和LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化和错误处理技巧,帮助提升通信效率和可靠性。
FridaHook(二)——Native层函数
下面是学习用Frida hook Native层的导出函数和未导出函数的记录。demo下载链接:https://pan.baidu.com/s/1ZCIeJXzeTpQ8uJ9Ew5nnGQ提取码:z94iHook导出函数主要是根据so文件中函数名来确定被Hook的函数,较为简单。而Hook 未导出函数是根据函数偏移量来确定被Hook的函数,但是一定要注意在使用工具反编译时要选对架构。也可以用Hook 未导出函数的方法来Hook导出函数。
手把手教你用ESP32驱动MAX30102心率血氧传感器(含完整代码)
本文详细介绍了如何使用ESP32微控制器驱动MAX30102心率血氧传感器,构建智能健康监测系统。内容涵盖PPG原理、硬件连接、驱动配置、信号处理算法以及Web服务器数据可视化,提供完整代码实现,帮助开发者快速上手物联网健康设备开发。
使用frida Hook 未导出函数
样本apk下载地址:https://pan.baidu.com/s/1QcMnrWBooGMJDHKem6kzSA 提取码: fkfi 界面如下,就是判断name和code是否输入正确。...
Label Studio + SAM2分割半自动标注与yolo11训练
Label Studio + SAM2分割半自动标注与yolo11训练
DC/DC恒压输出控制原理与应用
DC/DC恒压输出控制
Detours版HOOK 未导出的API函数CreateProcessInternalW
#include <stdio.h> //#include <tchar.h> #include <windows.h> #include "detours.h" #pragma comment(lib,"detours.lib") //以下是HOOK需要的头文件 //#include <winsock2.h> //#include <MSWSock.h> //#pragma comment(lib,"ws2_32.lib") //.
ctx->cvdl->cuvidGetDecoderCaps(&ctx->caps8) failed -> CUDA_ERROR_DEINITIALIZED: driver shutting down
ffplay -vcodec h264_cuvid sample_720p-2.h264 [quantum6@freeswitch freeswitch]$ ffplay -vcodec h264_cuvid sample_720p-2.h264 ffplay version 4.3.1 Copyright (c) 2003-2020 the FFmpeg developers built with gcc 4.8.5 (GCC) 20150623 (Red Hat 4.8.5-44) .
Frida Hook 入门(3)| Native 层代码 Hook 实战
在 Android 应用中,Native 层代码(通常用 C/C++ 编写)是很多安全研究和动态分析的重点领域,尤其是处理加密、解密、JNI 调用的场景。相比 Java 方法,Native 层 Hook 分析的难度更高,但 Frida 的强大功能让这一切变得简单。理解 Native 层 Hook 的基本原理使用 Frida Hook Native 函数实战案例:Hook JNI 函数Native 层 Hook 的常见挑战与解决方案。
30分钟搭建AI科研写作工作台:基于WorkBuddy的论文全流程加速实践
在人工智能技术日益普及的今天,如何利用智能工具提升专业领域工作效率成为关键课题。其核心原理在于通过模块化设计,将复杂的任务流程拆解为可复用、可编排的标准化技能单元,并结合精准的指令控制,实现从通用对话到深度任务执行的转变。这一技术价值在于显著降低重复性劳动强度,将人的创造力聚焦于核心决策与创新环节。在科研写作、数据分析、代码开发等场景中,这类智能工作台能有效辅助完成文献调研、内容生成、格式校验等繁琐步骤。本文以科研论文写作为具体应用场景,深入探讨如何利用WorkBuddy这一智能工作台,通过配置核心科研技能
CentOS7 安装天气分型软件cost733过程详解
cost733是一款天气分型软件,其内置的一些算法可以帮助气象工作者进行天气类型划分等(我也是初学者,仅仅知道一些皮毛),但是网上找到的安装办法比较少,并且总会出现一些报错,试了一晚上,终于将安装办法调通了,希望可以帮助到大家
3月12日,hook NAtive API
undocument 上的那段hook nAtive Api的太多也太复杂了,自己先hook个简单的,想hook一个nAtive Api,记录下调用这个API的进程的id,并返给user-mode程序,再调用真正的APi ,现在实现了第一步,hook住了,并能给扯下来,而不蓝屏(就这么屁大点儿的事儿弄了一下午,蓝了n次),下一步就是怎样在ring 0下申请下一快空间,记录id,并在user-mod
FPGA实现的AES加解密算法——Verilog源代码详解
本文将介绍基于FPGA的AES加解密算法的Verilog实现,并提供相应的源代码。根据密钥长度的不同,AES算法分为AES-128、AES-192和AES-256三种模式。对于已知的明文-密钥组合,可以使用在线的AES加解密工具计算出正确的密文,然后将该密文与FPGA加速器的输出进行比较。本文以AES-128算法为例,介绍基于FPGA的AES加解密算法的设计思路和Verilog实现。以上是基于FPGA的AES加解密算法的Verilog实现的相关内容。模块接受输入的明文和密钥,并输出加密后的密文。
android hook api
搞了好几个星期,终于有点头绪,欢迎交流。转载请注明出处http://blog.youkuaiyun.com/lingfong_cool/article/details/8109290。 android安全可以从三个层面考虑,一次是java虚拟机层,nativec层,还有linux kernel层,本次hook api是属于nativec层的。 hook api之后就可以使得程序对原有系统函数的调
visio安装包
Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。
霍尼韦尔SoftMaster使用说明
霍尼韦尔SoftMaster使用说明
【安卓逆向】xposed hook native 函数
xposed 集成dobby 实现 hook native 函数
TMS_WebGMaps_1.9.8.0_Full_Source
TMS_WebGMaps_1.9.8.0_Full_Source 全源码 delphi cbuilder
Native api hook参考资料文档
Native api hook技术分为两种类型的Hook,GOT-hook和inline-hook,以下是一些参考资料,主要针对armeabi-v7a,arm64-v8a系列CPU。 GOT-HOOK参考文档: 开源框架xhook xhook的原理是GOT-HOOK的一种称为PLT(Procedure Linkage Table)过程连接表Hook。 Github地址:https://g...
复分析 阿尔福斯(Ahlfors) 第三版答案 英文
答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案
Frida0B - native hook
各位读者你们好啊,今天一起讨论下hook so 中的函数的相关 api。
cydiaSubstrate hook java/native 研究记录
前阵子研究hook相关的东西,自己在网上搜集了一些资料,整理并记录一下,希望能给研究Android hook的小伙伴们提供一些帮助: 一、 Cydia Substrate 的概述 1. 简介: Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的,是一款强大而实用的HOOK工具。
android native hook方法
android native hook方法 主要分为: GOT HOOK 即import table hook(导入表hook) inline hook(内联hook) export table hook (导出表hook) 一、导入表(GOT HOOK) 熟悉ELF结构的读者都知道,SO引用外部函数的时候,在编译时会将外部函数的地址以Stub的形式存放在.GOT 表中,加载
LSPosed开发进阶:LSPlant hook框架与Native API调用指南
LSPosed Framework作为Android平台上功能强大的hook框架,为开发者提供了丰富的功能扩展能力。本文将深入探讨LSPlant hook框架的核心原理与Native API调用技巧,帮助开发者快速掌握高级开发技能,轻松实现复杂的功能定制。 ## LSPlant框架核心解析 LSPlant是LSPosed框架中高效的hook实现模块,通过动态方法替换技术实现对系统和应用的深度干
1829



被折叠的 条评论
为什么被折叠?



