查看: 280|回复: 0

[原创图文] 第一个窗口程序分析

[复制链接]
发表于 2020-11-30 16:10:55 | 显示全部楼层 |阅读模式
本帖最后由 天象独行 于 2020-12-3 19:21 编辑

第一个窗口程序分析
作者:天象独行
时间:20201130


一;事件驱动
       窗口程序是事件驱动,接下来我们用如下图来对比一下事件驱动和过程驱动(过程驱动是Dos时期经常采用的方式)。

第一个窗口程序分析

第一个窗口程序分析

       如上图,过程驱动的“文件名”需要按照过程顺序输入,事件驱动则不一样,用户可以随意选择先输入哪个文件名。用户的操作相当于发送了一个消息,这些消息没有任何顺序关系。
二;窗口框架
       这里需要说明几个成员(也可称呼为函数API)它们是协助计算机来处理程序的。
2.1;USER32.DLL
       USER32.DLL文件可以用来从程序消息队列中取出消息,调用各种消息在不同角色之间相互传递。
2.2;GetMessage函数
       该函数在USER32.DLL文件当中,从消息列队中取出消息。(每个Window程序都维护一个消息列队,当应用程序没有取消息时候,消息保存在消息列队当中)。
2.3;DispatchMessage函数
       DispatchMessage函数可以协助应用程序处理取出来的消息。该函数来调用窗口过程。
2.4;PostMessage函数
       PostMessage函数可以协助进程之间相互传递消息。
2.5;框架说明
       详细如下图,首先消息通过键盘,鼠标等其他设备产生保存在系统消息队列当中。该消息队列是由Window操作系统维护的。当程序执行到GetMessage函数的时候,GetMessage函数所在的USER32.DLL从消息队列中取出消息,然后反馈给相关应用程序。GetMessage获取消息的时候,如何处理该消息则需要请DispatchMessage函数来取协调处理。如果在将消息传送给DispatchMessage之前需要对消息进行加工,则需要其他函数帮忙,比如:TranalateMessage。

第一个窗口程序分析

第一个窗口程序分析


三;代码分析程序如附件
       3.1;程序入口
       编程语言程序入口一般在start 位置。我们来定位到相关位置,且查看内容。从下图位置我们可以了解到。入口程序调用了子程序_WinMain,然后将ExitProcess推出函数执行。

第一个窗口程序分析

第一个窗口程序分析
       3.2;子程序“_WinMain”       _WinMain程序主要分为几个功能部分:注册窗口类,建立并显示窗口,消息循环。在执行这些部分之前首先需要获取应用程序句柄。使用GetModuleHandle函数来获取,详细如下图:

第一个窗口程序分析

第一个窗口程序分析

       3.2.1;注册窗口类       注册窗口类部分执行了一个LoadCursor函数以及RegisterClassEX函数。其中LoadCursor函数作用是载入鼠标。RegisterClassEX函数的作用是注册窗口类,其参数是WNDCLASSEX结构数据。

第一个窗口程序分析

第一个窗口程序分析

       3.2.2;建立并显示窗口

       首先使用函数CreateWindowEx函数来创建窗口,函数ShowWindow显示窗口功能,UpdateWindow函数刷新窗口。

第一个窗口程序分析

第一个窗口程序分析
       3.2.3;消息循环       万事具备,接下来我们使用一个死循环来执行消息获取处理的过程。首先执行GetMessage函数来获取消息,通过TranslateMessage函数来对消息进行加工,DispatchMessage来协调回调函数来处理不同的消息。

第一个窗口程序分析

第一个窗口程序分析

       3.2.4;_ProcWinMain       该程序是有个回调函数,它是由操作系统所调用的。具体是通过DispatchMessage函数来协调使操作系统来调用该函数。四;逆向分析     4.1.;程序入口       我们通过IDA打开程序,找到程序入口,程序入口运行了标号sub_401089处的代码,还有ExitProcess函数。

第一个窗口程序分析

第一个窗口程序分析

     4.2;标号sub_401089       接下来,我们分析一下标号sub_401089处的代码

第一个窗口程序分析

第一个窗口程序分析

第一个窗口程序分析

第一个窗口程序分析




Win32汇编学习.zip

2.37 KB, 下载次数: 1, 下载积分: 学币 -3

分析程序

温馨提示:
1.如果您喜欢这篇帖子,请给作者点赞评分,点赞会增加帖子的热度,评分会给作者加学币。(评分不会扣掉您的积分,系统每天都会重置您的评分额度)。
2.回复帖子不仅是对作者的最好奖励,还可以获得学币奖励,请尊重作者的劳动成果,拒绝做伸手党!
3.发广告、灌水回复等违规行为一经发现直接禁言,如果本帖内容涉嫌违规,请点击论坛底部的举报反馈按钮,也可以在【投诉建议】板块发帖举报。
学逆向论坛-免费的逆向学习论坛
微信扫一扫即可使用手机论坛
快速回复 返回顶部 返回列表