随笔分类 - c语言
利用两个dll实现全局钩子
摘要:全局消息钩子的钩子函数一定要再dll中,然后启动安装钩子不能在dll中,要是我想在程序开始时安装钩子怎么办。很简单利用两个钩子就行了,只要安装钩子和钩子函数不在同一个dll就行了。 下面请看案例(编译 编译环境: vs2010 多字节 已在window7 32位测试通过 ) //mouseHook.
修改PE数据加载dll注意事项
摘要:如何加载dll网上有很多资料,我就不赘述了,我分享一下我在练习过程碰到的问题 1.IAT指向的地方不能为空 可能大家觉得IAT的地址是运行时系统赋予的,就指向了一个0字节的位置,但是PE装载器会认为你的IAT已经结束了,会造成这个dll加载失败 其实谁便写点什么都行 2.加载的dll一定要至少有一个
PE扩大节区的方法
摘要:PE结钩我就不多说了,网上有资料,这里只讲操作性的东西,也就是说本文适合有一定pe基础的学习者。 本次案例工具于原料有 ollydebug、CFF Explorer、WinHex以及本次用来修改的程序 下载地址:http://pan-yz.chaoxing.com/share/info/bb01f4
PE增加空白节区的方法
摘要:PE结钩我就不多说了,网上有资料,这里只讲操作性的东西,也就是说本文适合有一定pe基础的学习者。 本次案例工具于原料有 ollydebug、CFF Explorer、WinHex以及本次用来修改的程序 下载地址:http://pan-yz.chaoxing.com/share/info/bb01f4
鼠标钩子的安装及钩取函数的参数解析
摘要:一、鼠标钩子的安装 SetWindowsHookEx(WH_MOUSE,MouseProc,g_hInstance,0); WH_MOUSE 表明安装的是鼠标钩子 MouseProc 钩子函数的地址 g_hInstance 钩子函数所在dll的地址 0 为0表示是全局钩子 二、钩子函数解析 LRES
逆向工程核心原理 使用代码钩取技术钩取ZwQuerySystemInformation达到隐藏进程的目的
摘要:因为我喜欢把功能封装成函数集中放在头文件中,要导入两个我自己编写的头文件 链接: http://pan-yz.chaoxing.com/share/info/e9683ebe7126a18f 首先是注入程序 他可以将dll注入至pid>100的进程中 也可以卸载dll 隐藏进程3.c #includ
代码钩取心得
摘要:今天碰到了三个问题 第一:vs 2010 的变量要在函数的开头声明 第二: 一点要注意函数的调用方式,已经是第二次错误了 第三:VirtualProtect的权限最好用最好权限PAGE_EXECUTE_READWRITE,不然有可能会出错。 通过这个代码钩取我学到遇到问题一定要冷静 ,不要太过贪心急
WinAPI ZwQuerySystemInformation的简要分析
摘要:NTSTATUS WINAPI ZwQuerySystemInformation( _In_ SYSTEM_INFORMATION_CLASS SystemInformationClass, //枚举类型,用户输入值选择要查询的信息 _Inout_ PVOID SystemInformation,
c语言 ZwQuerySystemInformation查看进程信息
摘要:#include <stdio.h> #define STATUS_SUCCESS ((NTSTATUS)0x00000000L) #define STATUS_UNSUCCESSFUL ((NTSTATUS)0xC0000001L) #define STATUS_INFO_LENGTH_MISMA
c语言关于调用方式的不同
摘要:有些window API 是标准调用 如ZwQuerySystemInfoMation 要在函数名前加WinAPI 这样编译器就会在函数内部处理参数 有些window API 是c语言方式调用 如MessageBox 不用做特殊处理,这样编译器就会在函数调用后在外部处理参数
以类比的方式理解函数指针
摘要:函数指针对我来说一直是老大难得问题,今天我终于对于他有了一点点理解。 一般情况下,对于函数指针大多数是下面两种情况: 1.void (*PFN_SetProcName)(LPCTSTR szProcName); 2.typedef void (*PFN_SetProcName)(LPCTSTR sz
一步一步实现使用vs2010调试被注入的dll
摘要:其实调试dll的方式十分简单,你只到在dll的代码页上打断点,再用vs启动要加载dll的程序即可。 但是如果我们要调试被注入的dll怎么办呢? 假如我们要调试被注入notepad的dll怎么办呢? 第一步:在dll代码上打断点 第二步: 附加到notepad程序 点击调试 点击附加到程序 然后选择n
C++ - 纯C语言写的代码在C++中使用
摘要:此代码为转载:https://www.cnblogs.com/citrus/p/13322365.html#ifdef __cplusplus extern "C"{ #endif //C代码内容所在位置 #ifdef __cplusplus } #endif
c/c++ 生成debug函数,使用API会检查堆栈平衡
摘要:今天我使用的代码钩取的技术手段钩取了loadLibaryA,但是却报错了,查看汇编代码,发现在调用loadLibaryA后还会调用一个检查堆栈平衡的函数,这个是编译器在debug版本自动加的。 详细说明请看: 本次案例代码为钩取函数的代码,编译环境为:vs2010,字符集为unicode,运行环境w
不同进程导入的dll是否为共享
摘要:dll 中的代码是共享物理内存的, 数据是写时复制, 没有修改数据之前是共享的, 修改的时候会拷贝一份来修改, 之后就不会共享物理内存了.可以通过设置共享段来共享数据, 共享段里的数据在各个进程间共享物理内存(即使句柄不同也无所谓, 虚拟内存机制可以把不同的进程虚拟地址映射到相同的物理地址上) 详细
c语言 函数钩取的可行性
摘要:我一直觉得很奇怪,为什么仅仅是把API的前五个字节改成JMP指令就可以转到另外一个函数执行,难道另外一个函数的活动不会改变寄存器与栈从而影响程序的运行吗? 现在终于有了答案,编译器在编译函数时会自动帮我们保存和还原寄存器和栈 ,并且c语言的调用函数方式不会清理参数。这样就不会改变程序的运行状态。 详
c语言钩取函数 并奉上使用实例 2021-04-08 110
摘要:运行环境: Windows 7 32位 Visual Studio 2010 /** 名称:getAPIAddress 功能: 根据模块名称和函数名称获取函数地址 参数: TCHAR * moduleName 模块名称 TCHAR * funcName 函数名称 返回值:return 1 repre