zoukankan      html  css  js  c++  java
  • hook笔记①

    汇编中push 0x*** retn表示跳转到某个地址继续执行

    取消hook时会在多线程环境中可能被检测

    去掉函数框架可以规避寄存器cpu前后状态监测

    #pragma comment(linker,"/SECTION:.text,ERW") //编译器允许代码可写
    
    #include <iostream>
    #include <Windows.h>
    
    //游戏功能函数
    void func1()
    {
        MessageBoxA(0, "正常消息", "提示", MB_OK);
    }
    
    void hookedproc()
    {
        MessageBoxA(0, "hook消息", "提示", MB_OK);
    }
    
    
    void hookedproc1()
    {
    
        BYTE* lpfunc1 = (BYTE*)func1;
    
        lpfunc1[0] = 0x68;
    
        *(ULONG_PTR*)&lpfunc1[1] = (ULONG_PTR)hookedproc;
    
        lpfunc1[5] = 0xc3;
    
    
    }
    
    //void unhook用到了memcpy。入口函数恢复成原来状态即可。
    
    void __declspec(naked) hookentry() //使hook前后cpu和寄存器的状态不变,规避检测。但是仍然不足,因为汇编代码已改变,即使unhook,也可能因为多线程调用函数而被检测
    {
        __asm
        {
            Pushfd
            Pushad
    
            call hookedproc1
    
            popad
            popfd
    
            jmp func1
        }
    }
    
    
    //默认为游戏入口函数
    int main()
    {
    
        hookentry();
    
        return 0;
    }
    View Code
  • 相关阅读:
    用Fiddle跟踪调试移动表单
    查找指定表、字段上面的默认值约束
    sql跳过非工作日(周末和节假日)
    python学习(一)
    charles抓包
    jemeter简单压测
    jemeter接口测试
    postman接口测试
    接口测试基础知识学习
    定期小结
  • 原文地址:https://www.cnblogs.com/MiraculousB/p/12741198.html
Copyright © 2011-2022 走看看