随笔分类 -  windows编程

摘要:早上在调一个程序的时候感觉非常奇怪,就是数据在初始化的时候会失败,后来发现是获取一个数据的时候出错了 假设我们又一个config.lib,sql.dll和main.exe 1. 因为数据库在打开数据库的时候需要一个路径配置,这个配置在config.lib库里面 2. main.exe初始化设置con 阅读全文
posted @ 2016-11-05 20:24 linyilong 阅读(169) 评论(0) 推荐(0) 编辑
摘要:windows如何管理字体 windows的字体管理在注册表的windows/font这部分(具体路径忘记了),这里会记录字体的名称和名称,如果有具体指出路径,windows启动的时候会从这个路径去加载字体,没有的话则在 系统盘/windows/font 这个文件夹里面,加载失败则忽略 如果在安装字 阅读全文
posted @ 2016-11-05 20:22 linyilong 阅读(261) 评论(0) 推荐(0) 编辑
摘要:一个驱动对象(DRIVER_OBJECT)可以对应多个设备对象(DEVICE_OBJECT)DEVICE_OBJECT有点类似于应用层的窗口,IRQ则是消息,只有有DEVICE_OBJECT,我们才可以接收IRQ来自为知笔记(Wiz) 阅读全文
posted @ 2014-03-20 11:25 linyilong 阅读(244) 评论(0) 推荐(0) 编辑
摘要:int main(void){ HANDLE hFile = CreateFile("D:\\Shipyard.exe", GENERIC_READ, FILE_SHARE_READ, NULL, OPEN_EXISTING, FILE_ATTRIBUTE_NORMAL, ... 阅读全文
posted @ 2013-07-24 09:48 linyilong 阅读(886) 评论(0) 推荐(0) 编辑
摘要:在前面的注入代码的章节中,我们利用了VirtualAllocEx来在对方的进程开辟了一块内存,并且将代码复制进对方进程的内存里面,从而执行那段内存的代码,但是这里有一个问题,就是代码不是执行在我们进程内的,所以我们无法像在本进程编程那样直接利用返回值或者传入指针来获取计算结果,这个时候我们可能需要到很多通讯手段,但是这样将会让我们的注入代码变得非常复杂,所以我自己想了一个方法,就是利用VirtualAllocEx开辟的内存区域来进行通讯整体的步骤是这样的:1.在对方的内存开始一块内存,2.复制代码进去3.根据代码计算出我们的结果应该放在哪里,比如我们申请了100字节的内存,其中50字节是代码, 阅读全文
posted @ 2013-06-23 14:04 linyilong 阅读(1173) 评论(0) 推荐(0) 编辑
摘要:从WINDOWS VISITA开始以后,windows已经开始支持随机基址的关系,也就是说以前我们的进程基址都是从0x40000开始的,如果一个变量在我们第一次运行的时候地址为0x50000,那么以后也都会在这个位置而VS2008后开始提供随机基址的功能,在WINDOWS VISITA后的版本也都支持这个功能,这样进程的基址将不会再固定从一个地方开始,变量的地址也会随着基址的不同而不同,加大了我们对一个进程修改的难度,我们每次修改一个变量不能再将变量写死,而是要根据基址+数据偏移量来算出数据的地址,那么,我们怎么去获得一个进程的基址呢??在我们程序运行的时候,我们进程自己的HINSTANCE或 阅读全文
posted @ 2013-06-20 22:35 linyilong 阅读(6291) 评论(3) 推荐(1) 编辑
摘要:有使用过外挂的朋友应该知道,我们在玩游戏的时候,有很多辅助功能给你使用,比如吃药,使用物品等功能,这个时候我们就是使用注入代码的技术,简单的来将就是我们让另外一个进程去执行我们想让它执行的代码,这中间的关键函数是CreateRemoteThreadHANDLE WINAPI CreateRemoteThread( _In_ HANDLE hProcess, _In_ LPSECURITY_ATTRIBUTES lpThreadAttributes, _In_ SIZE_T dwStackSize, _In_ LPTHREAD_START_ROUTINE lpStartA... 阅读全文
posted @ 2013-06-17 22:39 linyilong 阅读(19222) 评论(16) 推荐(10) 编辑
摘要:在windows下,不管是进程还是句柄或者文件,他们都可以抽象为一个HANDLE,如果有接触过linux编程的都知道,linux下一切皆文件,对进程,文件,socket的操作都是通过int来标识的,windows下的HANDLE概念也跟linux下的int概念差不多,都可以归结为类似与ID的数据类型,只是表示形式不一样,我们对于所有对象的操作都需要通过这个标识来传递当然在WINDOWS下还包括HICON,HWND等,大部分都是UI相关的,我们值需要知道HWND是操作窗口的标识符,HICON是图标的标识符,我们后面将会讲到如何通过窗口来操作其他进程如果我们要操作其他的进程,首先需要的肯定是要能够 阅读全文
posted @ 2013-06-12 16:46 linyilong 阅读(6314) 评论(0) 推荐(1) 编辑
摘要:1.需要用到的函数学过Windows编程的应该都知道,Windows的核心机制是消息机制,消息是操作系统告诉应用程序发生了什么事情,比如当用户移动了鼠标或者按键后,操作系统会通知应用程序实际上在Windows下,我们可以监控操作系统发送给另外一个进程的消息,然后决定对这个消息怎么处理,比如继续发送,或者改变消息,或者不让这个消息发给应用程序,也可以让应用程序处理完消息后通知监控的进程 这些都依赖一个API,SetWindowsHookExHHOOK WINAPI SetWindowsHookEx( _In_int idHook, _In_HOOKPROC lpfn, _In_HINSTA... 阅读全文
posted @ 2013-06-09 16:40 linyilong 阅读(3920) 评论(1) 推荐(1) 编辑
摘要:所谓异步IO,就是当线程向设备驱动程序发送一个IO请求后,线程不会等待处理,而是继续执行,设备驱动程序去完成实际的IO操作,再通过其他方式通知程序注意:如果我们发送一个异步IO请求给设备驱动程序,设备驱动程序不一定会以异步处理IO请求,有时候会选择以同步的方式来请求。当我们IO请求发送后,操作系统检查我们的数据是否在系统的缓存中,如果在缓存中,那么操作系统不会把这个请求发送给设备驱动程序,而会直接将数据从高速缓存中复制给我们的程序,直接完成IO请求如果IO操作是以同步方式执行的,那么ReadFile和WriteFile将会返回非0值,如果是以异步的,或者发生了错误,那么将会返回FALSE1.O 阅读全文
posted @ 2012-12-26 19:22 linyilong 阅读(3586) 评论(0) 推荐(0) 编辑
摘要:什么是dll:dll只是一组源代码的模块,每个模块包含一些可供应用程序或者其他dll调用的函数,在应用程序调用一个dll里面的函数的时候,操作系统会将dll的文件映像映射到进程的地址空间中,这样进程中所有的线程就可以调用dll中的函数了dll加载完成后,这个时候dll对于进程中的线程来说只是一些被放在地址进程空间附加的代码和数据,操作系统为了节省内存空间,同一个dll在内存中只有一个,也就是说如果你的的两个应用程序都需要加载user32.dll,那么操作系统也只会加载一次user32.dll到内存中因为代码段在内存中的权限都是为只读的,所以当多个应用程序加载同一个dll的时候,不用担心应用程序 阅读全文
posted @ 2012-12-24 13:10 linyilong 阅读(10710) 评论(0) 推荐(1) 编辑
摘要:int main(void){ BOOL fOk = FALSE; HANDLE hFileSrc = CreateFile(_T("test.txt"),GENERIC_READ,FILE_SHARE_READ,NULL, OPEN_EXISTING,FILE_FLAG_OVERLAPPED,NULL); HANDLE hFileDest = CreateFile(_T("cpy_test.txt"),GENERIC_WRITE,0,NULL,CREATE_ALWAYS, FILE_FLAG_OVERLAPPED,NULL); if (h... 阅读全文
posted @ 2012-05-03 13:17 linyilong 阅读(2317) 评论(1) 推荐(1) 编辑