随笔分类 -  c语言

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