精华内容
参与话题
问答
  • hook

    千次阅读 2012-10-14 23:32:46
    KiFastcallEntry路过各函数hook. SwapContext路过IDT/GDT hook. OD附加发现卡死.DbgkpProcessDebugPortMutex其中几字节被改.自已创建一个,hook几个函数使用新的搞定. OD再次附加发现下断卡死,线程被隐藏,直接xxx...
    KiFastcallEntry路过各函数hook.
    SwapContext路过IDT/GDT hook.
    OD附加发现卡死.DbgkpProcessDebugPortMutex其中几字节被改.自已创建一个,hook几个函数使用新的搞定.
    OD再次附加发现下断卡死,线程被隐藏,直接xxx.
    OD附加模块窗口如果出现模块不断加载卸载是因为还有四个四个字节的hook,直接xxoo就好了.
     
    展开全文
  • Hook

    万次阅读 2016-11-17 23:59:47
    Hook 钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许...

    Hook

    钩子(Hook),是Windows消息处理机制的一个平台,应用程序可以在上面设置子程以监视指定窗口的某种消息,而且所监视的窗口可以是其他进程所创建的。当消息到达后,在目标窗口处理函数之前处理它。钩子机制允许应用程序截获处理window消息或特定事件。钩子实际上是一个处理消息的程序段,通过系统调用,把它挂入系统。每当特定的消息发出,在没有到达目的窗口前,钩子程序就先捕获该消息,亦即钩子函数先得到控制权。这时钩子函数即可以加工处理(改变)该消息,也可以不作处理而继续传递该消息,还可以强制结束消息的传递。

             可以输入监控、API拦截、消息捕获等方面。

             DOS时代的HOOK技术就是修改中断向量表中的中断地址。

             HOOK技术会涉及到DLL相关知识。

    展开全文
  • HOOK

    千次阅读 2016-02-17 10:14:30
    HOOK是一种通过更改程序的数据结构或代码结构从而改变程序运行路线的一种方法。其中包括用户模式的HOOK和内核模式的HOOK(Windows 64bit 系统有SG保护,有些HOOK不能这样简单的实现,此处仅仅记录方法)。 用户层...

    HOOK是一种通过更改程序的数据结构或代码结构从而改变程序运行路线的一种方法。其中包括用户模式的HOOK和内核模式的HOOK(Windows 64bit 系统有SG保护,有些HOOK不能这样简单的实现,此处仅仅记录方法)。


    用户层的HOOK:IAT-HOOK,  远程线程DLL注入,远程线程代码注入,内联HOOK(可用mHOOK库)

    其中IAT-HOOK主要是修改程序PE文件中的IAT表,改变函数的调用位置,但用的比较多的还是DLL注入的方法。DLL注入的方法主要是通过创建远程线程的方法将自定义的DLL文件通过系统函数LoadLibrary加载到目标进程,然后可以通过使用热键的方式,启动和关闭目标进程的HOOK。


    内核层的HOOK:SSDT-HOOK, IDT-HOOK,INLINE-HOOK

    SSDT--- 系统服务描述符表

    IDT--- 中断描述符表

    INLINE--- 内联

    其实HOOK的思想都是差不多的,基本上都是

    1、先保存要HOOK位置原来的数据。

    2、修改内存访问属性。

    3、写入HOOK数据到要HOOK的位置。

    其实HOOK就是跟二进制的机器码打交道,所以还需要懂得一些机器码的基本知识。E8---call E9----jmp 等等。。


    其实学习内核HOOK主要是为了学习使用windbg的内核调试,在驱动编写时难免会出现这样那样的问题,windbag可谓是驱动调试的一把利剑。同时也学习一些hook的基本思路和方法。(内核HOOK在xp系统下)

    首先内核HOOK必须在内核模式下,所以用驱动来实现HOOK。此处采用NT模式驱动,实现OpenProcess的SSDT-HOOK 。

    一、驱动编写的框架

    #pragma code_seg("INIT")
    extern "C" NTSTATUS DriverEntry(PDRIVER_OBJECT pDriverObj, PUNICODE_STRING pRegistryPath)
    {
    //	__asm int 3
    	NTSTATUS status = STATUS_SUCCESS;
    
    	//注册驱动函数及其他入口
    	pDriverObj->DriverUnload = UnloadDriver;
    
    	pDriverObj->MajorFunction[IRP_MJ_CREATE] = DispatchRoutine;
    	pDriverObj->MajorFunction[IRP_MJ_READ]	 = DispatchRoutine;
    	pDriverObj->MajorFunction[IRP_MJ_WRITE] = DispatchRoutine;
    	pDriverObj->MajorFunction[IRP_MJ_CLOSE] = DispatchRoutine;
    
    	pDriverObj->MajorFunction[IRP_MJ_DEVICE_CONTROL] = DeviceIoControlRoutine;
    	//nt 式的驱动中需要在DriverEntry中创建设备对象
    
    	status = CreateDevice(pDriverObj);
    
    	//HookNtOpenProcess();//此处实现HOOK
    	KdPrint(("Driver Load Success! +++++++\n"));
    	return status;
    }

    此处为驱动的入口函数,类似于main函数,加载驱动的时候首先会调用此函数。然后注册相应的IRP对应的函数调用例程,类似于回调函数或者消息相应的函数更为贴切。其中IRP_MJ_DEVICE_CONTROL是通过IOCTROL的方式来与应用层进行通信。所以HOOK函数最简单的实现方式就是写在这个函数里面。

    二、HOOK函数

    1、通过OD跟踪或者KD或者xuetr等工具都可以查找到OpenProcess在SSDT表的index为257,所以就直接用了

    2、KeServiceDescriptorTable是xp系统已经导出的结构

    3、UserOpenProcess是我自己定义的HOOK函数

    4、NtOpenProcessAddr是保存原先函数地址的全局变量

    void HookNtOpenProcess()
    {
    	ULONG index = 257;
    	PULONG SSDTOpenProcessAddr;
    
    	ULONG UserOpenProcessAddr = (ULONG)UserOpenProcess;
    	__asm
    	{
    		push eax
    			push ebx
    			mov eax, KeServiceDescriptorTable
    			mov ebx, [eax]
    			mov eax, index
    			lea eax, [ebx + 4*eax]
    			mov SSDTOpenProcessAddr, eax
    			pop ebx
    			pop eax
    	}
    
    	//去掉页面保护
    	__asm 
    	{
    		cli
    			mov eax, cr0
    			and eax, not 10000h //and eax,0FFFEFFFFh
    			mov cr0, eax
    	}
    	NtOpenProcessAddr = *SSDTOpenProcessAddr;
    	*SSDTOpenProcessAddr = UserOpenProcessAddr;
    	//恢复页面保护
    	__asm
    	{
    		mov     eax, cr0
    			or     eax, 10000h
    			mov     cr0, eax
    			sti
    	}
    	KdPrint(("Hook NtOpenProcess\n"));
    }
    到此出已经实现了一个简单的SSDT-HOOK,要想UNHOOK只需要把原先的地址再写入到相应的SSDT中即可。


    三、思考 怎样就可以知道SSDT是否被HOOK呢
    有一个内核函数MmGetSystemRoutineAddress可以得到原先函数的地址,与SSDT中得到的函数地址比较,一致则表示没有被SSDT-HOOK,有了这些知识,那么INLINE-HOOK的实现就简单许多了。








    展开全文
  • useState 使用也和react一样,其他也一样就不多举例 import React, { Component, useState } from 'react'; import { View, Text, StyleSheet, Button } from 'react-native'; ...export default function Flex () ...

    useState 使用也和react一样,其他也一样就不多举例

    import React, { Component, useState } from 'react';
    import {
      View,
      Text,
      StyleSheet,
      Button
    } from 'react-native';
    
    export default function Flex () {
      const [count, setCount] = useState(0)
      const addCount = () => {
        let newCount = count
        setCount(newCount += 1)
      }
      handelClick = () => {
        alert('dianji')
      }
      return (
        <View style={styles.container}>
          <Text style={[styles.text, { backgroundColor: 'red', textAlign: 'center' }]}>{count}</Text>
          <Button title="增加" onPress={addCount}></Button>
          <Button title="点击" onPress={this.handelClick} color="#841584"></Button>
            <ActivityIndicator
              size="large"
              animating={true}
              color="#841584"
            ></ActivityIndicator>
            Image source={require('./img/dask.gif')} style={{ width: 300, height: 300 }}></Image>
            <Image source={{ uri: 'https://ss0.bdstatic.com/94oJfD_bAAcT8t7mm9GUKT-xh_/timg?image&quality=100&size=b4000_4000&sec=1590671406&di=d041102044a03c687bdbee360807c96a&src=http://cdn.duitang.com/uploads/item/201410/04/20141004070754_NFWSQ.jpeg' }}
              style={{ width: 100, height: 100 }}
            ></Image>
            <SafeAreaView style={{ flex: 1, backgroundColor: '#fff' }}>
            <View style={{ flex: 1 }}>
              <Text>Hello World!</Text>
            </View>
          </SafeAreaView>
          <WebView
            source={{ uri: 'https://www.baidu.com' }}
            style={{ marginTop: 20 }}
          />
        </View>
      )
    }
    
    const styles = StyleSheet.create({
      container: {
        width: 100,
        height: 100,
        margin: 10,
        backgroundColor: 'gray'
      },
      text: {
        fontSize: 20, margin: 20
      }
    })
    
    展开全文
  • React Hook之Effect Hook

    万次阅读 2019-06-11 09:02:49
    Effect Hook概念性内容介绍: Effect Hook可以让你在函数组件中执行副作用操作。 PS:副作用操作包括: 数据获取 设置定义 手动更改React组件中的DOM 。。。 Effect Hook可以把它当作是componentDidMount,...
  • Just a Hook

    2017-08-17 01:53:07
    In the game of DotA, Pudge’s meat hook is actually the most horrible thing for most of the heroes. The hook is made up of several consecutive metallic sticks which are of the same length. Now ...
  • hook api,hook CreateFile,hook CloseHandle,hook ReadFile,hook WriteFile,hook LoadLibrary
  • 了解react-hook以及State Hook

    万次阅读 2019-05-18 23:28:00
    react更新到16.8版本后最主要的内容就是增加了hook这个特性,它的主要作用可以理解为对react的函数组件进行了一次升级,使react的函数组件拥有了和react类组件一样的功能(关于以前版本react的组件的介绍可以移步到...
  • 线程注入、HOOK APIs(附VC6源码)

    千次下载 热门讨论 2013-01-13 01:57:11
     工作关系,想HOOK并修改一些API,使得不支持某些设备的第三方工具可以正常运行,因此花时间写了这么个工具。比如ReadFile时,某些设备不支持指定的缓存大小(如512KB),可以HOOK ReadFile,把缓存大小修改为更小...
  • c++ hook,jmp无法写入

    2019-03-31 16:39:02
    //需要HOOK的地址 DWORD hookAddr = winBaseAddr + offsetAddr; //组装数据 BYTE jmpData[HOOK_LEN] = { 0 }; //表示汇编jmp jmpData[0] = 0xE9; //要跳转的地址-HOOK地址-5 *(DWORD*)&jmpData[1] =...
  • HOOK编程

    千次阅读 2015-01-10 21:55:17
    安装一个HOOK过程,称为钩子过程。操作系统在消息时,将我们感兴趣的消息先传递给HOOK过程,在此函数中进行检查或者抓取消息。  下面看一个简单的示例: //定义钩子过程函数 LRESULT CALLBACK KeyBoardProc(int ...
  • DetoursHook

    千次阅读 2013-04-09 11:29:57
    DetoursHook Detours是微软开发的一个函数库,主要用于动态Hook运行中的程序,其具体介绍参见http://research.microsoft.com/en-us/projects/detours/。 在游戏或外挂分析中,可以利用Detours库提供的接口来动态...
  • 3.修改上面的DLL,不Hook MessageBox了,而改为Hook CopyFileW和Hook CopyFileA,这时,电脑上的复制粘贴都没有被Hook,自己写程序调用CopyFileW也没有被Hook,但是,在调用CopyFileW前调用一次MessageBoxW,后面的...

空空如也

1 2 3 4 5 ... 20
收藏数 40,756
精华内容 16,302
关键字:

hook