
windows
尚书左仆射
我喜欢按照不按套路出牌的套路出牌。
展开
-
Windows下向指定窗口模拟发送键盘消息
在操作系统中,鼠标和键盘的操作会被转换为相应的系统消息,窗口过程在接收到消息后会进行对应的处理。发送消息,我们可以使用SendMessage()和PostMessage(),所以,只要使用这两个函数来发送鼠标和键盘的相关消息就可以了。此外,还可以通过keybd_event()和mouse_event()两个专用的函数进行鼠标和键盘按键的模拟操作。下面是一个简单的向指定窗口发送消息的例子:1原创 2016-05-18 21:10:24 · 27376 阅读 · 1 评论 -
Windows注册表操作
注册表是Windows操作系统中一个重要的数据库,其中保存着操作系统和各种软件的重要信息。注册表是如此的重要,所以也是病毒和反病毒软件的兵家必争之地。注册表是Windows系统管理和维护的配置较为复杂的信息数据库,它以树状形式存储信息。可以通过“开始”->“运行”,在运行窗口中输入“regedit”,来打开Windows提供的“注册表编辑器”窗口。如下图所示:注册表由若干部分组原创 2016-07-09 11:42:56 · 4800 阅读 · 2 评论 -
DLL的简单实现及调用
DLL(Dynamic Link Library,动态连接库)是一个可以被其他应用程序调用的应用模块,其中封装了可以被调用的资源或函数。DLL属于可执行文件,他符合Windows系统的PE文件格式,不过他的运行是依附于EXE文件创建的进程来执行的,不能单独运行。一个DLL文件可以被多个进程所装载调用。DLL是动态连接库,相对应的,是静态连接库。动态连接库是在EXE文件运行时被加载执行的,而静原创 2016-05-14 16:47:16 · 2828 阅读 · 0 评论 -
windows消息发送与接收
Windows开发中一个重要的概念就是消息。能搞清楚消息的传递和处理,相信可以使我们对Windows程序有更深的理解。先把消息划分为3类:发送消息(Incomingsent message)、投递消息(Post message)、输入消息(Input message)。其中发送消息是非队列消息,而后两种是队列消息。在线程的消息队列中并不包括非队列消息,而只有队列消息才会在线程的消息队列中。原创 2016-07-02 21:37:01 · 7389 阅读 · 0 评论 -
实现DLL的注入与卸载
在Windows系统下,为了避免各个进程相互影响,每个进程的地址空间都是被隔离的。在执行DLL注入时需要通过创建“远程线程”来实现。所谓“远程线程”,并不是跨计算机,而是跨进程的。简而言之,就是进程A在进程B中创建一个线程,这个线程就叫“远程线程”。要向其它进程中“注入”DLL就需要在目标进程中调用相应的API函数(LoadLibrary),可是目标进程不会自己“乖乖地”调用加载函数,这时候要原创 2016-05-15 19:10:53 · 9641 阅读 · 4 评论 -
实现远程代码注入
前面我写过DLL的注入代码(详见:DLL注入与卸载),但是也并非就一定要另外实现一个动态链接库再注入我们的所需操作。这次我们就直截了当一点,直接在目标进程中注入我们所需的代码来实现操控。要在目标进程中完成一定的功能,当然需要调用相关的API函数了,只是这次我们要使用的API出现在不同的DLL中。Kernel32.dll文件在每个进程中的地址是相同的,但这并不代表其他DLL文件在每个进程中的地址原创 2016-08-28 16:39:09 · 1431 阅读 · 2 评论 -
WM_PAINT消息详解
原文地址:http://blog.sina.com.cn/s/blog_5344089201009whk.htmlWM_PAINT是Windows窗口系统中一条重要的消息,应用程序通过处理该消息实现在窗口上的绘制工作。1. 系统何时发送WM_PAINT消息? 系统会在多个不同的时机发送WM_PAINT消息:当第一次创建一个窗口时,当改变窗转载 2016-08-06 22:26:01 · 1042 阅读 · 0 评论 -
Windows钩子的使用
我们知道Windows中的窗口程序是基于消息,由事件驱动的,在某些情况下可能需要捕获或者修改消息,从而完成一些特殊的功能(MFC框架就利用Windows钩子对消息进行引导)。对于捕获消息而言,无法使用IAT或Inline Hook之类的方式去进行捕获,这就要用到接下来要介绍的Windows提供的专门用于处理消息的钩子函数。1. 挂钩原理Windows下的应用程序大部分都是基于消息机原创 2016-08-08 17:21:44 · 16125 阅读 · 1 评论 -
windows下的内联hook实现
HOOK技术正如其名,就像是代码中放下的一个“钩子”,它在静静地等待捕获系统中的某个消息或动作。在编程技术中,钩子技术在DOS时代就已经存在了。在windows下,钩子按照实现技术的不同和挂钩位置的不同,其种类也是越来越多,但是设置钩子的本质却是始终不变的。那么钩子究竟有什么用?它能干的事非常多,例如输入监控、API拦截、消息捕获、改变程序执行流程等。杀毒软件会用HOOK技术钩住一些API函数原创 2016-05-19 18:17:51 · 6431 阅读 · 5 评论 -
TranslateMessage函数
本文是关于TranslateMessage官方文档的相关翻译,拿走不谢。TranslateMessage函数将虚拟键消息转换成字符消息。该字符消息又被发送给对应线程(调用TranslateMessage的线程)的消息队列,当线程再次调用GetMessage函数或函数的PeekMessage获取消息的时候被读取。函数原型:BOOL TranslateMessage(翻译 2016-06-09 23:02:53 · 4261 阅读 · 0 评论 -
win32程序概况
学习MFC之前朋友建议我先学Windows编程,的确还是有道理的,毕竟MFC把自己“裹得太严实”,如果有win32的编程经验势必可以更好地掌握MFC。所以喽,文中和大家一起分享我学习win32部分后的总结。Windows程序和操作系统之间的爱恨纠葛请看下图:1中表示的是系统消息队列。当操作系统启动并初始化时,线程Raw Input Thread(RIT)就会启动,并创系统硬件输原创 2016-07-16 22:00:05 · 1748 阅读 · 0 评论 -
DispatchMessage函数
DipatchMessage函数的功能是将消息派送给窗口过程。通常情况下被用来派送GetMessage函数获得的消息。函数原型:LRESULT DispatchMessage( const MSG *lpmsg);参数说明:lpmsg:指向含有消息的MSG结构的指针。返回值:返回值是指定窗口过程的返回值。虽然这意味着返回值依赖于消息的分派,但通翻译 2016-06-10 10:23:08 · 11136 阅读 · 0 评论 -
SendMessage函数
SendMessage函数发送指定消息到一个或多个窗口。它将调用指定窗口的窗口处理过程,并且直到窗口过程处理完该消息才返回。要发送消息后马上返回,可以使用SendMessageCallback函数或SendNotifyMessage函数。要投递一个消息到线程消息队列并马上返回,可以使用PostMessage函数或PostThreadMessage函数。函数原型:LRESULT Send翻译 2016-06-11 22:17:06 · 2888 阅读 · 0 评论 -
PostMessage函数
PostMessage函数放置(投递)消息到创建指定窗口的线程所关联的消息队列中,并且不会等待相应线程处理消息,而直接返回。要将消息投递到线程所关联的消息队列,可以使用PostThreadMessage函数。函数原型:BOOL PostMessage( HWND hWnd, UINT Msg, WPARAMwParam, LPARAM翻译 2016-06-12 10:21:35 · 5775 阅读 · 0 评论 -
Windows服务编程
先说明,本文不是编写服务,而是编程控制已有的服务。服务是一种程序类型,它在后台运行,服务程序通常可以在本地和通过网络为用户提供一些功能。服务程序可能是EXE程序,具有其单独的进程,也有可能是DLL文件依附于某个进程,更有可能是SYS文件而处于系统的内核之中。在Windows下,可以在“我的电脑”上单击鼠标右键,然后再弹出的菜单上选择“管理”,打开“计算机管理工具”,单击左面树形列表的“原创 2016-07-12 16:36:19 · 2892 阅读 · 0 评论 -
PeekMessage函数
PeekMessage函数分发到来的“发送消息”(非队列消息),在线程消息队列中查找“投递消息”,并返回找到的消息(如果有的话)。函数原型:BOOL PeekMessage( LPMSG lpMsg, HWND hWnd, UINT wMsgFilterMin, UINT wMsgFilterMax, UINT wRemov翻译 2016-06-11 11:13:51 · 4983 阅读 · 0 评论 -
GetMessage函数
GetMessage函数从调用线程的消息队列中获取一个消息。该函数派送“发送消息”(非队列消息),直到取得一个可用的投递消息。PeekMessage与GetMessage不同,PeekMessage不会等待有消息被投递才返回(言下之意就是,GetMessage函数会一直等待直到有消息被投递才有返回值)。函数原型:BOOL GetMessage( LPMSG lpM翻译 2016-06-10 16:11:44 · 16904 阅读 · 1 评论 -
Windows进程控制
在Windows系统中,应用程序都以进程的形式存在于内存中。当运行一个程序的时候,操作系统就会将这个程序装入内存,并分配各种运行程序所需的资源,为进程创建主线程。系统也提供了任务管理器,可供我们使用。管理进程的界面如下:其中包含的内容一目了然,就没有必要讲解了。直接进入常用API。1. 进程的创建UINT WinExec( LPCSTR lpCmdLine,//指向原创 2016-07-14 19:30:39 · 5045 阅读 · 1 评论 -
Windows多线程初探
线程是进程中的一个执行单位(每个进程至少有一个主线程),一个进程可以有多个线程,而一个线程只存在于一个进程中。在数据关系上属于一对多的关系。线程不占有系统资源,它所使用的资源全部由所属进程向系统申请。在多处理器中,不同的线程可以同时运行在不同的CPU上,这样可以提高程序的运行效率。除此之外,有些时候必须使用多线程。例如,杀毒软件在查杀病毒的时候,它需要一边扫描相关的磁盘文件,一边显示当前的扫描原创 2016-07-15 15:05:01 · 1615 阅读 · 0 评论 -
线程同步实现
线程同步是指同一进程中的多个线程相互协调工作达到一致性。当我们编写程序时,有时会使用多个代码段同时读取或修改相同地址空间中的共享数据。此时,操作系统中可能会出现一个代码段在读取数据,而另一个代码段却在修改数据的情况。这样的情况会导致程序发生读写错误,这显然不是我期望看到的。为了避免出现类似的情况,我们需要用到线程同步技术。即当一个线程对资源正在进行读写时,其它的线程则需等待。线程的同步常用的有原创 2016-08-07 16:27:40 · 594 阅读 · 0 评论