商朝子的破解教学第三章

简介:
第三章—Windows程序 
这一章我都不知道该如何写了,呵呵~~ 
毕竟,Win32是一个非常深奥的系统,目前还容不得我这种小辈在这儿说三道四,不过,我既然是要写给那些入门阶段的朋友们看的,又不是写给那些搞程序设计老鸟看的,所以,我也犯不着怕被人背后指着骂 本章的名字就叫《Windows程序》而不是《Windows程序设计》所以,我只是讲一些关于Windows程序运作的原理: 
Windows为什么叫Windows,相信所有用过的朋友都可以明白,那桌面上一个一个的窗口,就是它名字的由来。也就是这一个又一个窗口的出现,使计算机的使用一下子简单了巨多。几年前接触过电脑的朋友一定知道DOS吧,不知道的话,去问加解密工具下载版的版主老哥,让他跟你解释 你还记的DOS下那黑乎乎的窗口吧,没见过的哥们儿可以在开始菜单中找出来看看。DOS通过一系列的命令来进行相应的操作,如进入一个目录,删除一个目录等等等等。那种工作方式就叫做命令提示符方式,也即命令行。 
现在国内不懂电脑的人还老爱说要想学电脑,必须要英语过关。(就是这个,吓跑了多少仅仅是想学习一些基本操作的朋友)可能也就是源自DOS的原因吧。 
后来,随着硬件的支持以及技术上的提高,当然还有为了使电脑更方便的服务与人,慢慢的就有了所谓的视图操作系统,从此,你不用再记忆那些大堆的指令了,而且操作上,也有了相大的提高,可以说操作系统发展到今天的份儿上,操作已经够简单了,去看看那些在网吧里一把鼻涕的小孩子们吧… 
当然,就像当年DOS之于命令提示行一样,今天的Windows仍和当年一样,占据着大部分的用户群。 
(场外:一观众扔来一烂柿饼,你是唐僧啊,这么多废话) 
马上转入正题,Windows之所以好用,除了不用背N多的命令外,一个原因就是因为它本身提供了大量的标准Windows GUI函数。所以对于用户,面对的是同一套标准的窗口,对这些窗口的操作都是一样的,所以使用不同的应用程序时无须重新学习操作。不用像当年在DOS下面那样一安装新程序,就要马上看帮助,看说明。 
而Windows GUI函数,只不过是微软提供给程序开发人员的API(Application Programming Interface 应用编程接口)中的一小部分而以。Windows API是一大组功能强大的函数,它们本身驻扎在 Windows 中供人们随时调用。这些函数的大部分被包含在几个动态链接库(DLL)中,譬如:kernel32.dll、 user32.dll 和 gdi32.dll。 Kernel32.dll中的函数主要处理内存管理和进程调度;user32.dll中的函数主要控制用户界面;gdi32.dll中的函数则负责图形方面的操作等等。 
你可能多多少少听说过API函数,如果你不太清楚到底是怎么一回事的话,我尽量给你解释的清楚一点。 
不知道你有没有想过,Windows中的那一个又一个窗口是怎么画出来的呢?呵呵,你可能用VB、Delphi编过程序,你有没有想过你写的程序中的那些窗口是怎么形成的?是控件变成的。倒...呵呵,相信你当初学VB或Delphi的时候,所看的书上一定对可视化编程环境大肆赞扬了一番吧,是不是也提到过比VC++怎么怎么方便?怎么怎么不用再为生成程序的界面而花费大量无用时间了等等。 
(台下上来一东北民工:小子,你找抽啊,还讲不讲了) 
马上开说,其实我只是想告诉你,所有你用的Windows下的程序,都是通过调用一个又一个的Windows API来执行相应任务的,没有API,你的程序什么也做不了。用VB、Delphi以及MFC的朋友也许会说我根本没有调用什么API啊!其实这些API都是由你所用的开发环境自动进行相应的转换的。比如说你用Delphi新建一程序,什么也不用动就直接按F9来运行它,是不是出现一个空白的窗体?这就是个标准的Windows程序,它有Windows程序所具有的一切特征,如最大化按钮、最小化按钮、关闭按钮…你可以通过鼠标来移动它。 
但是如果你想用VC++或MASM32来写这样一个程序,那么你有两种方法,在VC++中,你可以用MFC或直接调用API,而在MASM32中,你就只有直接调用API这一种方法。所谓直接调用API,就是指所有的操作都通过最原始的API来完成。通过直接调用API来生成这样一个程序,你必须要先注册窗口类(除非您使用 Windows 预定义的窗口类,如 MessageBox 或 dialog box);然后产生窗口;然后在桌面显示窗口(除非您不想立即显示它); 然后刷新窗口客户区; 
麻烦吧,如果你想真正的让这个程序能正常地运行下来,还要再加入以下步骤: 
1.你要得到您应用程序的句柄。2.窗体显示后就进入无限的获取窗口消息的循环。3. 如果有消息到达,由负责该窗口的窗口回调函数处理。4. 如果用户关闭窗口,进行退出处理。 
上面这此步骤,都需要调用相应的API来完成。比如说得到程序的句柄用GetModuleHandle注册窗口类用RegisterClass或RegisterClassEx;注册后,还要用CreateWindowEx函数来生成相应窗口,而后用ShowWindow来显示它,之后还会用UpdateWindow 来更新客户区等等等等。这些还都不算呢,如果你真通过直接调用API去写一个稍大一点儿的程序的话,你会发现那是一个多么不令人愉快的事情。 
上面说的这些,只不过是API中的一小小小小小小小小小小….部分,这才几个,真正的API有成百上千个,包括对系统各个方面进行的操作。没有API,你的程序什么也干不了。比如说你的程序中有一个Edit控件,VB中应该叫做Text控件吧,你想将用户输入到里面的信息放到一个变量中去,那么Delphi中可以用Str:=Edit1.text来实现。VB中应该是Str=Text1.Text;但是如果你用API,想要得到Edit输入框里的文本内容,就要调用GetDlgItemInt(Edit中输入的值当做数值来用)GetDlgItemText、GetDlgItemTextA(Edit中输入的值当做字符串来用)。而上面我说的VB、Delphi得到编辑框中输入的内容的方法,最终在编译成可执行文件的时候,也会由编译器自动对其进行相应的转换。你只要明白一件事就好了,那就是你所用的程序,无时无刻都在调用着系统中的各种各样的API函数。 
其实Windows中的API,就相当于当年DOS系统中的系统功能调用,及中断21。只不过在数量上和功能上,都是DOS系统功能调用所不及的。 
如果你还是看不明白,那我不怪你,可能是我讲的不清楚,所以,还是给你推荐老牛写的书吧。力推《Windows程序设计》,看过之后你会内力大增的,那时候你所知道的知识就不止是API而以了。 
其实话说回来,我这篇文章不是教你编程的,所以关于Windows程序的原理,没有必要说那么多,我之所以跟你讲API,是想让你知道Windows程序的运行机制。免的到时候用调试器下断点的时候问什么是API。(众人(十分愤怒地)冲上台来:“拉下去PK!把我们当什么了!”) 
(我再次来到台上,镜头切向脸的一侧,来个特写。只见上面有若干处大小不同的伤口)可能还有些重点的地方我没有提到,欢迎指正。如果你有什么不明白的地方,欢迎跟贴提问。只要别太那个,比如说“你能把所有的API给我列出来让我回去背背好吗?” 
附上几个常用的API函数吧。相信你此时因该以经对API有个大概的了解了。 
MessageBox 显示一信息对话框 
MessageBoxEx 显示一信息对话框 
MessageBoxIndirect 显示一定制信息对话框 
(以上这三个,可以用来中断那些错误提示,比如说你注册码输入错误了,程序就可能通过这几个函数中的一个,来提示你错误) 
GetDlgItemInt 得指定输入框整数值 
GetDlgItemText 得指定输入框输入字符串 
GetDlgItemTextA 得指定输入框输入字符串 
(软件可以用这三个来得到用户输入的注册码) 
GetLocalTime 得当前本地时间 
GetSystemTime 得当前系统时间 
(软件可以用这两个来判断软件是否过期) 
RegQueryvalueA 获取一个项的设置值 
RegQueryvalueExA 获取一个项的设置值 
RegSetvalueA 设置指定项或子项的值   
RegSetvalueExA 设置指定项的值 
(如果软件用注册表存储注册信息的话,那么这几个也许会有用) 
上面讲的,只是几个平时比较常见的,更多请参见看雪以前的教程或Windows开发人员手册。 
最后,我们还要隆重介绍一个重量级函数,你可能不知道API是什么,但你只要用过调试器,就一定知道它的名字。你可以不知道美国现任的总统是谁,但是你一定要知道这个函数。我虽然知道现任美国总统是鲍威尔 但我同时也知道这个函数是谁。 
它就是----吴孟达!(导演:NG)重新说。它就是hmemcpy。 
这个函数是干什么的? 
它是一个非常简单的函数。只完成一项非常非常基本的任务,就是把数据从一个地方复制到另一个地方。应用程序本身并不调用它,理由很简单,它很低级(汇编:谁敢说跟我一样?)。但是大部分API函数却非常频繁地调用它。所以,它也叫万能函数。平时你可能都不知道有这么个东西,但是断起程序来却非常管用。但目前到了2K跟Xp下,却没有这个函数了,与之相应的是一个叫memcpy的函数,虽然功能与其相同,但是基本上已经是个废人了 总知,你用memcpy根本就断不下什么来。所以,这么一个好使的函数只能在98下使用了。这就像美国的总统一样,再好使也只能使八年,不好使的就别说了。说不定明年就把他踢飞 
别的我也不多说什么了,这章你就知道API是什么就成了。 

如果你觉的有什么不妥的地方或有什么问题,并且想文明一点地表代出来的话,就请在回复。如果想野蛮一点的话,就拿鸡蛋往你显示器上丢吧 


本文转自 lvcaolhx 51CTO博客,原文链接:http://blog.51cto.com/lvcaolhx/40171


相关文章
|
运维 负载均衡 安全
以太通道详解:网络连接的桥梁
【4月更文挑战第22天】
658 0
什么是三极管?
一、什么是三极管 三极管(Transistor)是一种电子器件,由三个控制电极组成,分别是基极(Base)、发射极(Emitter)和集电极(Collector)。它是一种半导体器件,常用于放大、开关和稳压等电路中。 三极管可以根据其结构和材料分为两种类型:NPN型和PNP型。NPN型三极管的基极为P型材料,发射极为N型材料,集电极为P型材料;PNP型三极管的基极为N型材料,发射极为P型材料,集电极为N型材料。 三极管的工作原理是通过控制基极电流来控制发射极和集电极之间的电流。当基极电流较小时,三极管处于截止状态,发射极和集电极之间几乎没有电流流动;当基极电流逐渐增大时,三极管进入饱和状态,发
744 0
|
10月前
|
存储 弹性计算 关系型数据库
【赵渝强老师】达梦数据库的产品系列
达梦数据库是达梦公司推出的新一代自研数据库,融合分布式、弹性计算与云计算优势,支持超大规模并发事务处理和HTAP混合业务。产品体系包括DM8、DMDSC、DM DataWatch、DMMPP和DMRWC,分别适用于通用关系型数据库、共享存储集群、数据守护集群、大规模数据分析及读写分离场景,满足不同需求并保障高可用性和安全性。
533 36
|
9月前
|
SQL 存储 关系型数据库
数据库的行级锁与表锁?
表锁: 不会出现死锁,发生锁的冲突几率高,并发性低。 存储引擎在进行SQL数据读写请求前,会对涉及到的表进行加锁。 其中锁分为共享读锁和独占写锁:读锁会阻塞写,写锁会阻塞读和写。 行级锁: 会出现死锁,发生锁的冲突几率低,并发性高。 InnoDB引擎支持行锁,与Oracle不同,MySQL的行锁是通过索引加载的,也就是说,行锁是加在索引响应的行上的,要是对应的SQL语句没有走索引,则会全表扫描,行锁则无法实现,取而代之的是表锁,此时其它事务无法对当前表进行更新或插入操作。 行级锁注意事项: 行级锁必须有索引才能实现,否则会自动锁全表,那就不是行锁了。 两个事务不能锁同一个索引。 in
|
10月前
|
算法 API 数据格式
PromptScope: 一个灵活高效的In-Context Training框架
PromptScope: 一个灵活高效的In-Context Training框架
225 3
|
JSON 前端开发 Java
【Bug合集】——Java大小写引起传参失败,获取值为null的解决方案
类中成员变量命名问题引起传送json字符串,但是变量为null的情况做出解释,@Data注解(Spring自动生成的get和set方法)和@JsonProperty
|
存储 数据可视化 API
重磅干货,免费三方网络验证[用户系统+CDK]全套API接口分享教程。
本套网络验证系统提供全面的API接口,支持用户注册、登录、数据查询与修改、留言板管理等功能,适用于不想自建用户系统的APP开发者。系统还包含CDK管理功能,如生成、使用、查询和删除CDK等。支持高自定义性,包括20个自定义字段,满足不同需求。详细接口参数及示例请参考官方文档。
457 7
|
监控 安全 网络安全
使用 Scapy 库编写 ICMP 洪水脚本
使用 Scapy 库编写 ICMP 洪水脚本
使用 Scapy 库编写 ICMP 洪水脚本
|
Kubernetes 容器
Kubernetes(K8S) 镜像拉取策略 imagePullPolicy
Kubernetes(K8S) 镜像拉取策略 imagePullPolicy
333 0
|
安全 网络安全
IP的纯净度:评判标准与重要性
**IP纯净度关乎网络行为的安全与可靠性。高纯净度IP指独立、真实、无不良记录的地址。评估标准包括:** - **IP来源**:正规ISP的IP更纯净。 - **历史记录**:检查是否涉及违规行为或在黑名单中。 - **技术特征**:支持SSL,匿名性高,连接稳定快速的IP更佳。 - **用户反馈**:用户评价反映IP的实际表现和信誉。 综合考量这些因素,能确保选择到安全可靠的IP地址。

热门文章

最新文章