hook未导出native api的好办法

渗透测试-Frida逆向入门之native层Hook 该文章来自R0ysue书籍SO HOOk的总结 11.1 Native基础 11.1.1 NDK基础介绍: 1、安卓开发中除了java编译的dex由ART/Davilk虚拟机执行外、还存在C/C++编译的动态链接库文件由CPU执行 2、JAVA依赖SDK、C/C++需要NDK依赖库 3、NDK关键之一JNI、JNI可以完成在java调用C/C++函数。也可以在C/C++中调用java函数 4、JNI是JVM虚拟机的一部分 11.2.1 NDK开发 创建项目,会比不使用NDK的多cpp目录,c 阅读详情
昨天写的那个 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 Hook native初探 最后就是没有啥了,这篇文章只是用来熟悉JNI的,因为很多功能我们很难再java层实现,所以学习一下native对我们来说还是很有帮助的。 阅读详情

相关推荐

Android逆向之旅---Native层的Hook神器Cydia Substrate使用详解

这里网上没有好的hook代码,这里我们为了更好的查看这个工具的牛逼之处,弄一个比较实际的案例就是hook系统加载dex的函数,这样我们就可以获取到每个应用的dex文件了,这种方式对于早期加固是一个比较好的脱壳方案。这里先获取当前进程名称,然后构造dex文件名,保存dex文件,最后一定要记得返回原始的函数,不能影响正常的流程。第二件事:**需要过滤系统进程,并不是所有的进程都是我们想要hook的,而且这些进程未必有dex文件,比如鼻祖进程zygote,而这些进程过滤规则,需要我们自己打印看结果。

2501_90265210的博客 1829

frida hook未导出函数

【代码】frida hook未导出函数。

技术博客记录 381

Android逆向之旅—Hook神器Frida使用详解

一、前言 在逆向过程中有一个Hook神器是必不可少的工具,之前已经介绍了Xposed和Substrate了,在不同场景下面这两个框架工具具备各自的用途,当然Xposed现在也是我最常用的框架工具,不了解的同学可以看这两篇文章:Android中Hook神器Xposed工具介绍和Android中Hook神器SubstrateCydia工具介绍这两篇文章非常重要一个是Hook Java层的时候最...

尼古拉斯.赵四的博客 6603

windows 内核文档化API/导出但未文档化API/未导出API

导出函数:顾名思义,出现在导出表(EAT)里面的函数,可以给外部调用的函数,验证是否为导出函数的方法,熟悉逆向的朋友可以使用LordPE之类的工具查看,当然也可以使用GetProcAddress或者MmGetSystemRoutineAddress之类的函数来获取地址,如果成功的话就是导出函数。 非导出函数:这种函数是供自己调用使用的,不想提供给别人使用,当然也有方法可以获取函数地址,可以根据函

lixiangminghate的专栏 2298

看雪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.

kfyzjd2008的博客 1723

手把手教你用C#和LibUsbDotNet实现USB设备通信(含完整代码示例)

本文详细介绍了如何使用C#和LibUsbDotNet库实现USB设备通信,包括设备识别、连接建立、同步/异步数据读写等核心操作。通过完整的代码示例,开发者可以快速掌握USB通信的关键技术,适用于工业自动化、医疗设备等多种场景。重点讲解了数据读写优化和错误处理技巧,帮助提升通信效率和可靠性。

a3b4c5的博客 707

FridaHook(二)——Native层函数

下面是学习用Frida hook Native层的导出函数和未导出函数的记录。demo下载链接:https://pan.baidu.com/s/1ZCIeJXzeTpQ8uJ9Ew5nnGQ提取码:z94iHook导出函数主要是根据so文件中函数名来确定被Hook的函数,较为简单。而Hook 未导出函数是根据函数偏移量来确定被Hook的函数,但是一定要注意在使用工具反编译时要选对架构。也可以用Hook 未导出函数的方法来Hook导出函数。

0nc3的博客 2283

手把手教你用ESP32驱动MAX30102心率血氧传感器(含完整代码)

本文详细介绍了如何使用ESP32微控制器驱动MAX30102心率血氧传感器,构建智能健康监测系统。内容涵盖PPG原理、硬件连接、驱动配置、信号处理算法以及Web服务器数据可视化,提供完整代码实现,帮助开发者快速上手物联网健康设备开发。

weixin_29208077的博客 590

使用frida Hook 未导出函数

样本apk下载地址:https://pan.baidu.com/s/1QcMnrWBooGMJDHKem6kzSA 提取码: fkfi 界面如下,就是判断name和code是否输入正确。...

Python3 爬虫实战 1:应对特殊字体,爬取猫眼电影实时排行榜 4052

Label Studio + SAM2分割半自动标注与yolo11训练

Label Studio + SAM2分割半自动标注与yolo11训练

schFallingCloud 1408

DC/DC恒压输出控制原理与应用

DC/DC恒压输出控制

propor的专栏 4282

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") //.

追逐光芒,追随内心 2014

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) .

柳鲲鹏 2409

Frida Hook 入门(3)| Native 层代码 Hook 实战

在 Android 应用中,Native 层代码(通常用 C/C++ 编写)是很多安全研究和动态分析的重点领域,尤其是处理加密、解密、JNI 调用的场景。相比 Java 方法,Native 层 Hook 分析的难度更高,但 Frida 的强大功能让这一切变得简单。理解 Native 层 Hook 的基本原理使用 Frida Hook Native 函数实战案例:Hook JNI 函数Native 层 Hook 的常见挑战与解决方案。

weixin_65409651的博客 1940

30分钟搭建AI科研写作工作台:基于WorkBuddy的论文全流程加速实践

在人工智能技术日益普及的今天,如何利用智能工具提升专业领域工作效率成为关键课题。其核心原理在于通过模块化设计,将复杂的任务流程拆解为可复用、可编排的标准化技能单元,并结合精准的指令控制,实现从通用对话到深度任务执行的转变。这一技术价值在于显著降低重复性劳动强度,将人的创造力聚焦于核心决策与创新环节。在科研写作、数据分析、代码开发等场景中,这类智能工作台能有效辅助完成文献调研、内容生成、格式校验等繁琐步骤。本文以科研论文写作为具体应用场景,深入探讨如何利用WorkBuddy这一智能工作台,通过配置核心科研技能

weixin_29032489的博客 1550

CentOS7 安装天气分型软件cost733过程详解

cost733是一款天气分型软件,其内置的一些算法可以帮助气象工作者进行天气类型划分等(我也是初学者,仅仅知道一些皮毛),但是网上找到的安装办法比较少,并且总会出现一些报错,试了一晚上,终于将安装办法调通了,希望可以帮助到大家

weixin_62573024的博客 3564

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

uuty的专栏 4695

FPGA实现的AES加解密算法——Verilog源代码详解

本文将介绍基于FPGA的AES加解密算法的Verilog实现,并提供相应的源代码。根据密钥长度的不同,AES算法分为AES-128、AES-192和AES-256三种模式。对于已知的明文-密钥组合,可以使用在线的AES加解密工具计算出正确的密文,然后将该密文与FPGA加速器的输出进行比较。本文以AES-128算法为例,介绍基于FPGA的AES加解密算法的设计思路和Verilog实现。以上是基于FPGA的AES加解密算法的Verilog实现的相关内容。模块接受输入的明文和密钥,并输出加密后的密文。

HackSquad的博客 1980

android hook api

搞了好几个星期,终于有点头绪,欢迎交流。转载请注明出处http://blog.youkuaiyun.com/lingfong_cool/article/details/8109290。    android安全可以从三个层面考虑,一次是java虚拟机层,nativec层,还有linux kernel层,本次hook api是属于nativec层的。 hook api之后就可以使得程序对原有系统函数的调

2万+

visio安装包

Microsoft Office Visio 是一款专业的制图软件。利用经过更新的形状、协作工具和数据链接图表,创建专业级图表以简化复杂的信息。

霍尼韦尔SoftMaster使用说明

霍尼韦尔SoftMaster使用说明

【安卓逆向】xposed hook native 函数

xposed 集成dobby 实现 hook native 函数

weixin_44862184的博客 1万+

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...

LoopherBear的博客 826

复分析 阿尔福斯(Ahlfors) 第三版答案 英文

答案分为十章,有部分习题没有答案,全英文复分析阿尔福斯(Ahlfors) 第三版答案

Frida0B - native hook

各位读者你们好啊,今天一起讨论下hook so 中的函数的相关 api。

a5right的博客 1184

cydiaSubstrate hook java/native 研究记录

前阵子研究hook相关的东西,自己在网上搜集了一些资料,整理并记录一下,希望能给研究Android hook的小伙伴们提供一些帮助: 一、 Cydia Substrate 的概述 1. 简介: Cydia Substrate是一个代码修改平台。它可以修改任何主进程的代码,不管是用Java还是C/C++(native代码)编写的,是一款强大而实用的HOOK工具。

小蒋的博客 3075

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 表中,加载

云守护的专栏 8310

LSPosed开发进阶:LSPlant hook框架与Native API调用指南

LSPosed Framework作为Android平台上功能强大的hook框架,为开发者提供了丰富的功能扩展能力。本文将深入探讨LSPlant hook框架的核心原理与Native API调用技巧,帮助开发者快速掌握高级开发技能,轻松实现复杂的功能定制。 ## LSPlant框架核心解析 LSPlant是LSPosed框架中高效的hook实现模块,通过动态方法替换技术实现对系统和应用的深度干

gitblog_00192的博客 245
上一篇: 利用filter driver实现键盘记录
下一篇: 关于NT内核的apc机制
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值