南强小屋 Design By 杰米

之所以命名为闲谈集,就是因为所讲内容均为闲谈,没有技术含量,也不精准,或许还错误百出,
但唯一的好处就是通俗易懂,便于新人们理解。
我们接着闲谈。
上一集,你应该基本清楚一个可执行文件(PE文件)是如何运行的。
简单归纳一下,就是
1、PE文件有特殊的结构,其数据是分区放置的,当PE文件执行的时候,操作系统把PE文件的数据对应映射到内存中不同的区域中(代码段、数据段、资源段等)。
2、PE文件运行的时候,操作系统根据PE文件结构,找到文件的main函数的位置(程序入口点,或叫OEP),然后等待用户操作。
3、用户对窗口软件(PE文件格式)进行操作的时候(比如鼠标左键点击按钮、输入文字、窗口变大变小、移动等),就发生了一个事件,然后把这个事件构造成为一个消息的结构体(比如鼠标左键按下的消息常量值是十六进制的201,还有鼠标的位置等内容)
看下图所示:
闲谈集——破解基础思维之三
红色箭头是这个小程序的登录按钮。如果你用鼠标点了一下这个登录按钮,会发生什么呢?
看一下蓝色箭头指的位置。
这时,操作系统就会发送一个消息给这个小程序,通知它有用户点击了你的登录按钮,这个消息是一个结构体,其中的消息常量值是201。如果是其他操作,消息的常量值是不一样的数值。
4、操作系统中有一个消息中心,这个中心的功能就是监控各种窗口事件产生的消息,进行捕获和发送。
5、用户程序中有专门的消息接收和处理的函数,用于处理对自己的窗口发生的各类事件产生的消息(比如鼠标消息、键盘消息等)。
假设还是上面的小程序,那么当它接收到刚才的消息结构体,它就执行按钮事件的那一段代码。
闲谈集——破解基础思维之三
闲谈集——破解基础思维之三
这下应该更清楚了吧。
简言之,windows系统上的应用软件的运行机制是:事件驱动——消息传递——消息处理。
好了,我们继续进行。
如果我们同时打开两个应用软件,比如A和B,在电脑桌面上有两个不同的窗口。
你有没有想过以下两个问题?
第一个问题是如果我用OD分别分析A软件和B软件,是不是都有可能有401000这个地址上的数据,这两个数据是一样的吗?
我们都知道计算机的物理内存,也就是插在计算机的主板上的内存条是固定的,可能是8G、16G、32G或者64G的。
我们以前的课程说过,你运行一个应用程序,操作系统就会把这个应用程序的数据拷贝到内存里。那么如果你打开100个或者更多,那内存条上的数据不就满了吗?
其实,操作系统对内存的管理是有特殊的解决方法的。
因为是新人朋友,我们就不讲这么深入了,你就记得一条,在32位操作系统下,系统给每个应用程序分配的内存空间的大小是4G,这4G空间是公用的,操作系统会根据用户对不同软件的操作自动切换执行。
也就是说,这一刻401000处的数据是A程序的,下一刻这个地址上的数据可能是B程序的。
那么操作系统怎么分辨是哪个程序的数据呢?
是根据进程来区分的。
每个应用程序执行后,都会产生一个进程,进程就是这个应用程序在内存中的资源总和,每个进程都有不同的编号,叫做进程ID,根据进程ID就可以访问不同的数据和资源。
举个例子,我现在如果做一个植物大战僵尸的辅助,就是对这个游戏的阳光数量的地址写入99999,那么我们可以这么编程。
闲谈集——破解基础思维之三
看红色箭头指的位置,只要我们知道这个游戏的进程ID,就可以在这个进程中的某个地址里读写数据。
第二个问题是操作系统如何知道用户操作了哪个窗口?
你可能会说,是不是根据不同窗口在电脑桌面上的位置来区分。
不是,那如果你移动窗口,窗口的位置变了,怎么办?
真实的情况是,操作系统会给当前运行的每个窗口分配一个窗口句柄,也就是窗口的一个编号,这个编号是独一无二的。
我们看下图:
闲谈集——破解基础思维之三
红色箭头指的66716就是这个小软件里面的登录按钮(也是窗口)的窗口句柄。
窗口的所有操作都依赖于这个窗口句柄。
不同的窗口句柄,表明是不同的窗口。
如果你想做一个辅助工具,比如鼠标连点器,就是对登录这个按钮进行持续的点击,那么你就需要先获取这个登录按钮控件的窗口句柄。
闲谈集——破解基础思维之三
如果你用易语言编程,就用这个函数就可以了,把窗口句柄填入。
我们再来简单总结下:
1、操作系统通过进程来区分不同的运行程序,进程ID是做辅助或者是注册机的前提,有了进程ID你就可以对这个进程中的内存地址进行读写操作,也就是可以修改数据。
2、操作系统通过窗口句柄来区分不同的程序窗口,所有的消息也是基于不同的窗口句柄来实现传递,有了窗口句柄你就可以对这个窗口进行操作,比如模拟点击按钮,或者模拟输入文字。
就先写到这里吧,希望能让大家对软件运行的内部有更清晰的理解。
如果您觉得确实有帮助,请给支持,我会继续努力写下去,谢谢!
标签:
闲谈集——破解基础思维之三

南强小屋 Design By 杰米
广告合作:本站广告合作请联系QQ:858582 申请时备注:广告合作(否则不回)
免责声明:本站文章均来自网站采集或用户投稿,网站不提供任何软件下载或自行开发的软件! 如有用户或公司发现本站内容信息存在侵权行为,请邮件告知! 858582#qq.com
南强小屋 Design By 杰米

评论“闲谈集——破解基础思维之三”

暂无闲谈集——破解基础思维之三的评论...

《魔兽世界》大逃杀!60人新游玩模式《强袭风暴》3月21日上线

暴雪近日发布了《魔兽世界》10.2.6 更新内容,新游玩模式《强袭风暴》即将于3月21 日在亚服上线,届时玩家将前往阿拉希高地展开一场 60 人大逃杀对战。

艾泽拉斯的冒险者已经征服了艾泽拉斯的大地及遥远的彼岸。他们在对抗世界上最致命的敌人时展现出过人的手腕,并且成功阻止终结宇宙等级的威胁。当他们在为即将于《魔兽世界》资料片《地心之战》中来袭的萨拉塔斯势力做战斗准备时,他们还需要在熟悉的阿拉希高地面对一个全新的敌人──那就是彼此。在《巨龙崛起》10.2.6 更新的《强袭风暴》中,玩家将会进入一个全新的海盗主题大逃杀式限时活动,其中包含极高的风险和史诗级的奖励。

《强袭风暴》不是普通的战场,作为一个独立于主游戏之外的活动,玩家可以用大逃杀的风格来体验《魔兽世界》,不分职业、不分装备(除了你在赛局中捡到的),光是技巧和战略的强弱之分就能决定出谁才是能坚持到最后的赢家。本次活动将会开放单人和双人模式,玩家在加入海盗主题的预赛大厅区域前,可以从强袭风暴角色画面新增好友。游玩游戏将可以累计名望轨迹,《巨龙崛起》和《魔兽世界:巫妖王之怒 经典版》的玩家都可以获得奖励。