一种Object hook的思路和实现过程

IAT HOOK IAT Hook的实现 阅读详情
 作 者: sudami
时 间: 2008-08-08,20:34
链 接: http://bbs.pediy.com/showthread.php?t=70329

<一种Object hook的思路和实现过程>
 
作者:sudami [sudami@163.com]
时间:2008/08/08 
主题:NtClose相关逆向
关键词:Object/type/hook/OkayToCloseProcedure
 
------------------------------------------------------
    本来不准备写出来污染眼球的,因为最终没有完全实现.但觉得思路可行,之前也没人具分析过,于是匆匆的写点儿文章,给大家提供些资料参考,也许有兴趣的同学能够进一步的深入...
写的很菜,老鸟飘过  . =.=|
 
    今天上午在坛子看到一帖,关于 "抹掉所有进程中自己的Handle",来防止炉子的LzOpenProcess,防dump等作用.主要思路就是NtClose;其实那个古老的RK-- FUTO_enhanced的code中已经实现的更加完善. 抽点儿时间想了想,于是就有了下面的一些分析:
 
lkd> u NtClose
nt!NtClose:
8056f9e9 8bff  mov  edi, edi
8056f9eb 55  push  ebp
8056f9ec 8bec  mov  ebp, esp
8056f9ee 64a124010000  mov  eax, dword  ptr  fs:[00000124h]
8056f9f4 0fbe8040010000  movsx  eax, byte  ptr [ eax+140h]
8056f9fb 6a00  push 0  ;比WRK中多一个参数
8056f9fd 50  push  eax
8056f9fe ff7508  push  dword  ptr [ ebp+8]
8056fa01 e85bffffff  call nt!ObpCloseHandle (8056f961)
;ObpCloseHandle(Handle, KeGetCurrentThread()->PreviousMode, 0);
 
8056fa06 5d  pop  ebp
8056fa07 c20400  ret 4
8056fa0a 90  nop
8056fa0b 90  nop
8056fa0c 90  nop
8056fa0d 90  nop
8056fa0e 90  nop
-------------------------------------------------------------------
lkd> u ObpCloseHandle l 20
nt!ObpCloseHandle:
8056f96c c645ff00  mov  byte  ptr [ ebp-1],0
8056f970 64a124010000  mov  eax, dword  ptr  fs:[00000124h]
8056f976 8b4d08  mov  ecx, dword  ptr [ ebp+8]  ;ecx = Handle
8056f979 8bf0  mov  esi, eax
8056f97b 8b5e44  mov  ebx, dword  ptr [ esi+44h]  ;ebx = PsGetCurrentProcess();
8056f97e b800000080  mov  eax,80000000h
8056f983 23c8  and  ecx, eax
8056f985 3bc8  cmp  ecx, eax
;/* Check if we're dealing with a kernel handle */
;#define KERNEL_HANDLE_FLAG (1 << ((sizeof(HANDLE) * 8) - 1))
; return (BOOLEAN)((ULONG_PTR)Handle & KERNEL_HANDLE_FLAG);
 
8056f987 0f84ccf00000  je nt!ObpCloseHandle+0x28 (8057ea59)  ; -->Is a kernel handle
8056f98d 8bbbc4000000  mov  edi, dword  ptr [ ebx+0C4h] 
;edi = HandleTable = Process->ObjectTable;
;其他的判断会跳到这里
 
8056f993 ff7508  push  dword  ptr [ ebp+8]  ;
8056f996 ff8ed4000000  dec  dword  ptr [ esi+0D4h] ;/* Disable Kernel APCs */
;Thread->KernelApcDisable--; 
8056f99c 57  push  edi
8056f99d e88bf6ffff  call nt!ExMapHandleToPointer (8056f02d)
;eax = HandleTableEntry = ExMapHandleToPointer(HandleTable, Handle);
8056f9a2 85c0  test  eax, eax
8056f9a4 0f844e210200  je nt!ObpCloseHandle+0xbc (80591af8)  ;-->failed,很多处理...
8056f9aa ff7510  push  dword  ptr [ ebp+10h]  ;比WRK中多一个参数
8056f9ad 6a00  push 0
8056f9af ff750c  push  dword  ptr [ ebp+0Ch]
8056f9b2 ff7508  push  dword  ptr [ ebp+8]
8056f9b5 50  push  eax
8056f9b6 57  push  edi
8056f9b7 e853000000  call nt!ObpCloseHandleTableEntry (8056fa0f)
; /* Now close the entry */
;ObpCloseHandleTableEntry( HandleTable,HandleTableEntry,Handle,
; AccessMode,FALSE,0 );
8056f9bc ff86d4000000  inc  dword  ptr [ esi+0D4h] ;/* Enable Kernel APCs */ 
;Thread->KernelApcDisable++; 
 
-------------------------------------------------------------------
lkd> u 8057ea59 l 20  ;-->Is a kernel handle
nt!ObpCloseHandle+0x28:
8057ea59 807d0c00  cmp  byte  ptr [ ebp+0Ch],0
8057ea5d 0f852a0fffff  jne nt!ObpCloseHandle+0x5c (8056f98d)
8057ea63 837d08fe  cmp  dword  ptr [ ebp+8],0FFFFFFFEh
8057ea67 0f84200fffff  je nt!ObpCloseHandle+0x5c (8056f98d)
8057ea6d 837d08ff  cmp  dword  ptr [ ebp+8],0FFFFFFFFh
8057ea71 0f84160fffff  je nt!ObpCloseHandle+0x5c (8056f98d)
8057ea77 314508  xor  dword  ptr [ ebp+8], eax
;#define ObKernelHandleToHandle(Handle) /
; (HANDLE)((ULONG_PTR)(Handle) & ~KERNEL_HANDLE_FLAG)
;Handle = ObKernelHandleToHandle(Handle);
 
8057ea7a a154965680  mov  eax, dword  ptr [nt!PsInitialSystemProcess (80569654)]
8057ea7f 3bd8  cmp  ebx, eax
;/* Check if we're not in the system process */
8057ea81 8b3d388c5680  mov  edi, dword  ptr [nt!ObpKernelHandleTable (80568c38)]
8057ea87 0f84060fffff  je nt!ObpCloseHandle+0x62 (8056f993)
8057ea8d 8d4de4  lea  ecx,[ ebp-1Ch]
8057ea90 51  push  ecx
8057ea91 50  push  eax
8057ea92 e8fe8af7ff  call nt!KeStackAttachProcess (804f7595)
8057ea97 c645ff01  mov  byte  ptr [ ebp-1],1
8057ea9b e9f30effff  jmp nt!ObpCloseHandle+0x62 (8056f993) ;attach到system进程后跳回去
--------------------------------------------------------------
 
;继续进到ObpCloseHandleTableEntry函数中:
nt!ObpCloseHandleTableEntry:
8056fa17 8b7d0c  mov  edi, dword  ptr [ ebp+0Ch]
8056fa1a 8b37  mov  esi, dword  ptr [ edi]
8056fa1c 83e6f8  and  esi,0FFFFFFF8h
;esi = ObjectHeader = ObpGetHandleObject(HandleEntry);
;#define ObpGetHandleObject(x) /
; ((POBJECT_HEADER)((ULONG_PTR)x->Object & ~OBJ_HANDLE_ATTRIBUTES))
 
8056fa1f 8b4e08  mov  ecx, dword  ptr [ esi+8]
;nt!_OBJECT_HEADER +0x008 Type : Ptr32 _OBJECT_TYPE
;ecx = ObjectType = ObjectHeader->Type;
8056fa22 83b9a800000000  cmp  dword  ptr [ ecx+0A8h],0
; nt!_OBJECT_TYPE +0x060 TypeInfo : _OBJECT_TYPE_INITIALIZER
; nt!_OBJECT_TYPE_INITIALIZER +0x048 OkayToCloseProcedure
;
8056fa29 8d5618  lea  edx,[ esi+18h]  ; edx=Body=&ObjectHeader->Body;
8056fa2c 894dfc  mov  dword  ptr [ ebp-4], ecx
8056fa2f 89550c  mov  dword  ptr [ ebp+0Ch], edx
8056fa32 0f85e4ab0100  jne nt!ObpCloseHandleTableEntry+0x25 (8058a61c)
;-->正是跳到我们关心的地方.
 
------------------------------------------------------------------------
lkd> u 8058a61c
nt!ObpCloseHandleTableEntry+0x25:
8058a61c 64a124010000  mov  eax, dword  ptr  fs:[00000124h]
8058a622 ff7514  push  dword  ptr [ ebp+14h]  ;AccessMode
8058a625 ff7510  push  dword  ptr [ ebp+10h]  ;Handle
8058a628 52  push  edx  ;Body
8058a629 ff7044  push  dword  ptr [ eax+44h]  ;PsGetCurrentProcess()
8058a62c ff91a8000000  call  dword  ptr [ ecx+0A8h]
; if (!ObjectType->TypeInfo.OkayToCloseProcedure(
; PsGetCurrentProcess(),Body,Handle,AccessMode)) {
; /* 让其返回denny,直接拒绝关我们的句柄 */
; return STATUS_HANDLE_NOT_CLOSABLE;
; }
;
; ---- 要做手脚 ----
;典型的Object hook(MJ0011以前写过一篇文章,即是关于这个的[干涉注册表的hook];
;想必MJ跟踪了这些类似函数的流程,发现了这种隐蔽的hook)
;替换掉这个函数,在我们的fake函数中做处理,是我们自己要保护的handle,就拒绝之
; sudami[sudami@163.com] 2008/08/08
;
8058a632 84c0  test  al, al
8058a634 0f85fe53feff  jne nt!ObpCloseHandleTableEntry+0x52 (8056fa38)
8058a63a e929490700  jmp nt!ObpCloseHandleTableEntry+0x3f (805fef68)  ; --->
8058a63f c3  ret
--------------------------------------------------------------------
lkd> u 805fef68 l 10
nt!ObpCloseHandleTableEntry+0x3f:
805fef68 57  push  edi
805fef69 ff7508  push  dword  ptr [ ebp+8]
805fef6c e802d7f6ff  call nt!ExUnlockHandleTableEntry (8056c673)
805fef71 b8350200c0  mov  eax,0C0000235h
; #define STATUS_HANDLE_NOT_CLOSABLE ((NTSTATUS)0xC0000235)
805fef76 e9260bf7ff  jmp nt!ObpCloseHandleTableEntry+0x158 (8056faa1)
 
lkd> u 8056faa1 l 10
nt!ObpCloseHandleTableEntry+0x158:
8056faa1 5f  pop  edi
8056faa2 5e  pop  esi
8056faa3 c9  leave
8056faa4 c21800  ret 18h
 
---------------------------------------------------------------------
ps:或者你可以进到 ExDestroyHandle函数中,从这里思考其他思路
--> ExpLookupHandleTableEntry-->InterlockedExchangePointer(&HandleTableEntry->Object, NULL);
 
/////////////////////////////////////////////////////////////////////
继续原来的话题;关键就是patch掉那个函数,看看它的原型:
 
typedef NTSTATUS
(NTAPI * OB_OKAYTOCLOSE_METHOD)(
IN PEPROCESS Process OPTIONAL,
IN PVOID Object,
IN HANDLE Handle,
IN KPROCESSOR_MODE AccessMode
);
 
在fake函数中:
引用:
 
1. 处理参数2 - Object;若其type是进程/线程,且和我们关心的相匹配,return 0;
2. 处理参数3 - Handle;ObRefenceObjectByHanlde得到EPROCESS,判断之
 
以上思路具体实现后,便可以防止被其他程序关闭自身句柄.作用如下:
    1. 文件保护 -- 若部分ARK尝试关掉你进程的所有句柄后,删除你的"站炕"文件
[yykingking牛的那种站炕],即使发IRP,也会failed.
    2. 进程相关 -- 可能恶意程序想关掉CSRSS中的自身句柄,来防止被dump;你可以用此种方式保护之
    3. [...]
 
部分关键code如下:

//安装HOOK
void InstallHook()
{
    NTSTATUS status;
     PVOID CureentProcess;
    CureentProcess = ( PVOID)PsGetCurrentProcess();

     __asm
    {
         push  eax
         mov  eax,CureentProcess
         mov  eax,[ eax-0x10]
         mov EprocessObjectType, eax
         pop  eax
    }

    DbgPrint( "Eprocess Object Type :%08x /n" , EprocessObjectType );
    Old_OkayToCloseProcedure = EprocessObjectType->TypeInfo.OkayToCloseProcedure;
    DbgPrint( "Eprocess OkayToCloseProcedure routine :%08x /n ", Old_OkayToCloseProcedure );
    DbgPrint( "DeleteProcedure routine :%08x /n ", 
                EprocessObjectType->TypeInfo.DeleteProcedure);
     if (!MmIsAddressValid(Old_OkayToCloseProcedure)) {
        DbgPrint( "!MmIsAddressValid");
         return ;
    }
    EprocessObjectType->TypeInfo.OkayToCloseProcedure = fake_OkayToCloseProcedure;
    g_bObjectHook =  TRUE;
     return ;
}

NTSTATUS
fake_OkayToCloseProcedure(    
    PEPROCESS Process OPTIONAL,
     PVOID Object,
     HANDLE Handle,
    KPROCESSOR_MODE AccessCheckMode
    )
{
    NTSTATUS stat ;
     PVOID ProcessObject;
    
    stat = ObReferenceObjectByHandle(Handle,
        GENERIC_READ,
         NULL,
        KernelMode,
        &ProcessObject,
        0);
     if (!NT_SUCCESS( stat )) {
        dbg( "ObReferenceObjectByHandle failed!/n");
         goto _orig_;
    }
     // 若操作的对象是我们关心的进程,且是其他进程在操作
     // 拒绝之
     if ( ( DWORD)g_target_eprocess == ( DWORD)ProcessObject &&
        ( DWORD)g_target_eprocess != ( DWORD)Process ) {
        DbgPrint( "%d :denny it /n", ( DWORD)Process);
         return 0 ;
    }
    
     ///////////////////////////////////////////////////////////////////
_orig_:
     __asm
    {
         push  eax
         movzx  eax, AccessCheckMode
         push  eax
         push Handle
         push Object
         push Process
         call Old_OkayToCloseProcedure
         mov stat,  eax
         pop  eax
    } 
     return stat ;
} 
 
名称:  1.jpg
查看次数: 464
文件大小:  41.1 KB
名称:  2.jpg
查看次数: 466
文件大小:  39.4 KB
名称:  3.jpg
查看次数: 466
文件大小:  25.3 KB
名称:  4.jpg
查看次数: 466
文件大小:  20.7 KB
名称:  5.jpg
查看次数: 466
文件大小:  21.5 KB
名称:  6.jpg
查看次数: 464
文件大小:  42.7 KB
名称:  7.jpg
查看次数: 464
文件大小:  30.7 KB
名称:  8.jpg
查看次数: 465
文件大小:  15.5 KB
名称:  9.jpg
查看次数: 463
文件大小:  35.5 KB
名称:  10.jpg
查看次数: 460
文件大小:  25.5 KB
名称:  11.jpg
查看次数: 460
文件大小:  16.2 KB
名称:  12.jpg
查看次数: 461
文件大小:  40.7 KB
名称:  13.jpg
查看次数: 459
文件大小:  7.3 KB
 
附件是完整的object type hook的源码 和 调试笔记
上传的附件
文件类型: txtNtClose相关逆向.txt (2008-08-08 20:33, 10.7 KB, 89 次下载)
文件类型: rarsudami.ObjectHook.code.rar (2008-08-08 20:33, 14.3 KB, 86 次下载)
Hook技术:IAT Hook详细讨论修改IAT地址和恢复 IAT Hook是Ring3层常用的Hook之一,主要思路大家都知道,就是修改IAT中的函数地址。 阅读详情

相关推荐

Inline Hook

Inline Hooking的实现

enjoy5512的博客 6841

PspCidTable概述

PspCidTable也是一个句柄表,其格式与普通的句柄表是完全一样的.但它与每个进程私有的句柄表有以下不同:1.PspCidTable中存放的对象是系统中所有的进线程对象,其索引就是PID和TID2.PspCidTable中存放的直接是对象体(EPROCESS和ETHREAD),而每个进程私有的句柄表则存放的是对象头(OBJECT_HEADER)3.PspCidTable是一个独立的句柄表,而每

yaneng的专栏 1461

微信app hook修改剪刀石头布以及骰子思路

该方法很简单,本次记录是为了加深对安卓hook技术的学习,以及进一步熟悉frida和objection的使用

云舒的博客 3958

PspCidTable进程枚举

-------------------------------------这是分割线--------------------------------------- Windows句柄表格式 句柄是Windows对象管理中引入的一个东西,它的实际意义是对象在句柄表中的索引。Windows2000使用的是固定的三层句柄表,而WindowsXP和Windows2003都是使用的动态可扩展的

rongwenbin的专栏 1681

Hook简述以及Hook AMS 实现统一登录

什么是hook? hook 翻译成中文是 名词钩子、挂钩,动词 钩住的意思。 在程序中 Hook 是一种技术,也成为钩子函数。 实际上,一个处理消息的程序段,通过系统的调用,把它挂入系统。 在系统没有调用到该函数之前,钩子程序先捕获该消息,先得到控制权,然后加工处理,然后再扔给系统做后续的处理。 比如说,有一辆货车 每天从A仓库拉货(一个集装箱的苹果) 到 B 水果分发站。 我们的钩子函数...

派派的生活 1924

API+HOOK技术思路讲解

远程注入参考文档:http://blog.youkuaiyun.com/ithzhang/article/details/7042613 apihook参考文档:http://blog.youkuaiyun.com/friendan/article/details/12222651 推荐书籍:《windows核心编程》   技术概述 API HOOK技术包括两个主要的技术。1、远程注入API技术, 2、APIH

jizhi84305445的博客 1340

[内核安全3]内核态Rootkit之Object Hook

Object Hook是通过挂钩OBJECT_HEADER其中一些字段来实现的。在Windows中通过对象管理器来管理所有对象,可以使用WinObj来观察一下WinXP SP3下的对象类型: Windows中包含三种对象: 执行体对象 内核对象 GDI/User对象 这里我们挂钩的就是执行体对象。 这里实验机器是WinXP SP3, 首先来看一下进程对象的数据结构: 然后随便找一个进程对象,寻找他的对象结构体,比如之前打开的WinObj进程, 通过!object命令查找到了其进

輚至消亡 845

hook入门篇

#引子 Hook技术在android开发领域算是一项黑科技,那么一个新的概念进入视线,我们最关心的3个问题就是,它是什么,有什么用,怎么用 本系列将由浅入深 手把手讲解这三大问题 本文是第一篇,入门篇 #正文大纲 #####一. hook的定义 #####二. 实用价值 #####三. 前置技能 #####四. Hook通用思路 #####五. 案例实战 #####六. 效果展示 #Demo地址 https://github.com/18598925736/OnClickListene

AndroidYingZi的博客 2947

FUTo: Bypassing Blacklight and IceSword

By: petersilberman  This article was released in the Uninformed Journal Vol 3. It is important to remember that this article displays Proof of Concept (POC) ideas and code. FUTo may result in spec

1万+

js逆向-hook专题

摘要:Hook(钩子)技术通过拦截和修改JavaScript函数执行流程,实现代码行为的监控与分析。其核心原理包括利用函数一等公民特性、对象属性可变性、原型链机制和元编程API(如Object.defineProperty和Proxy)。常见应用场景包括网络请求拦截(XMLHttpRequest)、Cookie监控(document.cookie)、函数追踪(eval)及反调试(debugger)。典型实现方式包括重写原生方法、属性劫持和定时器拦截等,为动态分析和逆向工程提供关键技术手段。

xiyun_nkma的博客 1699

windbg !htrace 学习总结

windbg-!htrace(跟踪句柄泄漏) http://blog.youkuaiyun.com/hgy413/article/details/7631187 !htrace !htrace(Handle Trace) 扩展用于显示一个或多个句柄的堆栈回溯信息。 直接用!htrace -?可以看到简单使用说明: [cpp] view plain copy 0:000> !

bcbobo21cn的专栏 2913

Windows Hook原理与实现

Windows Hook原理与实现 教程参考自《逆向工程核心原理》 1.概述 Hook技术被广泛应用于安全的多个领域,比如杀毒软件的主动防御功能,涉及到对一些敏感API的监控,就需要对这些API进行Hook;窃取密码的木马病毒,为了接收键盘的输入,需要Hook键盘消息;甚至是Windows系统及一些应用程序,在打补丁时也需要用到Hook技术。接下来,我们就来学习Hook技术的原理...

安全杂货铺 4万+

【scp】Windows 下scp报错 bad permissions

Windows 下使用 SSH 连接报 Bad owner or permissions on C:\\Users\\Administrator/.ssh/config 错误问题解决 C:\Users\Administrator>scp -P 66666 D:\1111.pdf zzd@58.213.45.xx:/home/zzd/ @@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@@ @ WARNING:...

走在搬砖的路上! 4154

一种简单的java函数hook思路

一种简单的java函数hook思路 总结 本文取自《深入理解android java虚拟机art》第10章,在读书过程中总结的一些能让自己豁然开朗的点,通过这些点我发现了hook java函数的方法,有了此文。 LinkCode LinkCode函数当中有个重要的过程,就是GetEntryPointFromQuickCompiledCode函数,他的返回值也就是quick_code为空的话代表该方法没有进行编译,在oat文件当中没有对应的汇编代码,需要进入解释执行模式而不是jit,这里有一个分支,如果Art

大数据安全技术学习 2292

混合部署 操作系统混合部署

在openEuler Embedded 22.03中,已经集成了OpenAMP相关支持,并与openEuler的SIG Zephyr合作实现了openEuler Embedded与实时操作系统Zephyr在QEMU平台上的混合部署。具体的混合部署方式取决于设备的硬件和软件支持。例如,可以使用虚拟机软件(如VirtualBox)在Linux操作系统上运行Android虚拟机,从而实现Linux和Android的混合部署。需要注意的是,混合部署涉及到设备的硬件和软件兼容性,以及操作系统的配置和管理。

dianqicyuyan的博客 1763

Geant4学习——入门(基本概念、Geant4工具包的结构、强制类、可选类)

Geant4是由欧洲核子研究组织基于C++面向对象技术开发的蒙特卡罗应用软件包,用于模拟粒子在物质中输运的物理过程。由于具有良好的通用性和扩展能力,Geant4在涉及微观粒子与物质相互作用的诸多领域获得了广泛应用。 第一部分 Geant4的基本概念 HEP中的模拟是“虚拟现实”。仿真既可用于在研发阶段帮助设计探测器,又可用于物理研究中了解探测器的响应。为了创建这样的虚拟现实,我们需要对粒子间的相互作用,几何形状和材料进行建模,以便将基本粒子传播到检测器中。我们还需要描述检测器生成原始数据的灵敏度。 Gea

M_M-铭的博客 2万+

【Android 插件化】Hook 插件化框架 ( Hook 实现思路 | Hook 按钮点击事件 )

一、Hook 实现思路、 二、Hook 按钮点击事件、 1、按钮点击事件、 2、熟悉底层源码、 3、获取 View 的 ListenerInfo mListenerInfo 成员、 4、分析 Hook 点、 5、反射 ListenerInfo 并设置新的 OnClickListener 监听器、 三、完整代码示例、 四、博客资源、

让 学习 成为一种 习惯 ( 韩曙亮 の 技术博客 ) 2788

电路保护设计实战:保险丝选型、I²t计算与多级协同方案

电路保护是电子系统可靠性的基石,其核心原理是在发生过流或过压等异常情况时,及时切断故障回路,防止能量持续灌入导致元器件损坏甚至安全事故。从技术价值看,优秀的保护设计能显著提升产品寿命、安全性和市场口碑,尤其在快充、电动汽车等高功率密度应用中,保护器件已成为不可或缺的安全屏障。在众多保护器件中,保险丝作为最基础的过流保护元件,其正确选型与应用直接关系到保护效果。本文聚焦于保险丝选型的实战细节,深入解析了I²t(电流平方时间积)这一关键参数,它定义了熔断所需的能量阈值,是匹配被保护半导体器件耐受能力、实现有效保

weixin_42662171的博客 309

hook api 反OD调试的一种思路

hook api 反OD调试的一种思路by蓝云本程序在backer的耐心指导下完成,非常感谢backer的帮助!!!关于OD怎样在程序中下断点相信大家都知道,就是用WriteProcessMemory函数在要下断点的地方写入0xCC,也就是int 3的中断,如果我们挂钩OD的WriteProcessMemory函数不让它下断点是不是就可以让OD不能正常跟踪了呢?有了这个思路,下面就是实践了。

蓝云......思...... 1162

【LOGO动态替换】记录一次关于LOGO动态替换引发的uboot代码分析及其实现

文章目录1.前言2.实现2.1 新增logo分区2.2 制作logo分区镜像2.2.1 查看logo.bmp和logo_kernel.bmp的文件大小。2.2.2 按规则将bmp写入logo.img3.分析3.1 uboot的启动分析3.2 uboot bmp load 显示部分3.2.1 rockchip_show_logo3.2.2 load_bmp_logo3.2.3 load_bmp_logo3.3 uboot bmp read部分3.3.1 read_logo_bmps3.3.1 read_bmp

wang 恒 的博客 1212

C#部署YOLO三种方案深度实测:OpenCV DNN vs ONNX Runtime vs TensorRT

在工业视觉项目落地阶段,C#生态下部署YOLO模型主要有三条技术路线。很多开发者仅凭经验选型,往往在部署后期踩中性能瓶颈、兼容故障、维护成本超标的坑。本文基于工控机常见硬件配置,针对YOLOv8系列模型做控制变量实测,从推理性能、部署难度、工业稳定性、综合成本等多个维度做横向对比,给出可直接落地的选型结论。

这里只有干货:从 Modbus 通信到 MES 对接,从 YOLO 训练到工控机部署,带你搞定工业软件开发全流程。 464

一种注册表沙箱的思路、实现——Hook Nt函数

        Nt函数是在Ring3层最底层的函数了,选择此类函数进行Hook,是为了提高绕过门槛。我的Hook方案使用的是微软的Detours。(转载请指明出处)        Detours的Hook和反Hook的写入如下:DetourTransactionBegin(); DetourUpdateThread(GetCurrentThread()); DetourAttach(lpOriF...

方亮的专栏 6078

ABAP CDS 实体权限控制,从 DCL 到 PFCG 的完整运行逻辑

本文探讨了SAP S/4HANA开发中CDS View的权限控制机制。核心观点如下: CDS access control通过DCL语言实现数据实例级权限控制,而非替代传统PFCG权限体系,二者形成互补关系:PFCG控制功能入口权限,DCL控制数据可见性。 DDL定义数据结构,DCL定义访问规则。DCL通过角色映射将数据字段与PFCG授权对象关联,运行时自动将权限条件注入SQL查询,实现数据过滤。 访问控制行为特点: 无DCL role不会默认拒绝访问 权限检查通过减少结果集而非抛出错误实现 需配合@Acc

2007 年 ~ 2025 年,深耕 SAP 技术 18 年 100

Ajax-hook原理解析及使用思路

针对神器ajax-hook做一个介绍和实践。ajax-hook可以拦截所有ajax请求并允许修改请求数据和响应数据。实际项目中它可以用于请求添加统一签名、协议自动解析、接口调用统计等。 1.Ajax-hook整体思路 Ajax-hook实现的整体思路是实现一个XMLHttpRequest的代理对象,然后覆盖全局的XMLHttpRequest,这样一但上层调用 new XMLHttpRequest这样的代码时,其实创建的是Ajax-hook的代理对象实例。具体原理图如下: 上图中...

sizhi_xht的博客 4128

大中型超市收银系统(可直接运行)

光步前台收银系统系统功能:商品销售、商品退货、挂单、收银员权限、会员销售、单品取消、整单取消、商品查询、脱机销售、脱机数据上传,基本资料下载,开钱箱、小票打印、收款结算,支持多币种付款方式(现金、储值卡、礼券、微信等),支持多种促销。运行环境:.net 4.0登陆信息用户名:1001 密码:123456内置商品信息,商品编码可输入00001000 - 00010000,测试效果相关功能键F5 结算 F9挂单 F11商品查询 F8退货 Insert单品取消 Del整单取消 F12开钱箱F2 会员 Ctrl+Z退出系统 Home 锁屏 相关源码待公开

RU DOS版、EFI版32bit/64bit BIOS常用工具

DOS版、EFI版的RU工具,可用来查看IO、MEM、PCI、SMBIOS等资源。亲测在EFI SHELL下可用。

HOOK这是一种思想

一、H 0 0 K: 不知道什么时候开始,我不喜欢叫这些知识为技术,喜欢把这些知识叫做思想。技术只是实现思想的一种行为。 HOOK这是一个很古老的话题,我见过最早的帖子日期在2004年左右,而我2018年才学习,不变的是思想。  二、用户层: windows下用户层被泛指三环,上层社会,比较高端繁华的地方,让人向往,确实很棒。  三、内核层: windows下内核层泛指零环,底层社会,硬件、驱动设...

weixin_34268169的博客 680

华为的C语言编程规范.pdf

华为技术有限公司内部技术规范。本规范制定了编写C语言程序的基本原则、规则和建议。从代码的清晰、简洁、可测试、安全、程序效率、可移植各个方面对C语言编程作出了具体指导。

上一篇: 保护干涉文件
下一篇: shellcode的一种ascii编码方法
iiprogram
博客等级 码龄25年 1068粉丝 1515原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

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

抵扣说明:

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

余额充值