专栏首页方亮VC开发Windows客户端软件之旅——前言

VC开发Windows客户端软件之旅——前言

        从第一次拖着行李入京找活,至今已工作若干年了。这些年一直追逐自己的梦想,跑过三个城市,换了三份工作,认识了很多业内的朋友。和朋友们闲聊时,发现很多人都已经不再做客户端软件了。有的转去做管理,有的转去做IOS,有的转去做安卓,有的转去做投资,“坚守”的人真的不多。曾经朋友开玩笑,说我们都是抱着微软的大腿,如果微软倒了,我们就失业了。我们说这句话时,多半是抱着戏谑的态度。时过境迁,随着移动互联网的兴起,PC的没落是难免的。相应的PC客户端没落,从业人数减少,现在想招一个合格的windows程序员已经非常难了。或许是出于一种纪念,我想起编写该系列博客,和大家讲讲windows客户端软件开发中的点点技术。让大家可以清晰了解到一款软件的诞生之旅。(转载请指明出于breaksoftware的csdn博客)

        一般一款软件的诞生会经过漫长的准备过程,比如立项、调研、交互设计、UI设计等。出于介绍Windows客户端相关技术的目的,开发之前的所有步骤将一笔带过。各个模块使用的技术细节也不会进行详细的介绍,因为该系列博文侧重于介绍实现模块所有“用”到的技术。同时出于考虑该系列博文主要针希望了解Windows开发软件的同学,所以也不会使用一些复杂的技术——比如boost。但是为了不失去乐趣,我将介绍hook技术,并使用hook技术实现一些“不可思议”的功能。

        以下为我将介绍的模块提纲和相关的技术:

  1. 界面。Windows之所以可以占据PC端系统大部分份额,一个很重要的原因就是其有良好的界面交互。所以windows客户端程序,一个很重要的因素便是界面。我经历过很多项目,其中界面相关的重构及开发都占据很大的比例。往往一个产品做到最后一个迭代,也是界面改动需求——say goodbye。所以这块技术非常重要。目前这块技术分为如下几种:
    • 窗口控件类型。比如我们熟知的MFC和WTL,以及在这些基础上封装的金山贝壳UI引擎等。
    • 无窗口控件类型。比如DUI和Htmlayout,以及一些对浏览器内核封装后的界面引擎。
  2. 网络。在互联网如此普及的年代,假如你的软件没有联网功能,那可能就真的out了。一般情况下,我们软件会使用到如下网络行为:
    • 上传。除了一些无良的公司会偷偷上传一些用户信息外,其中一个用到上传功能的场景是:上传崩溃分析日志。
    • 下载。下载是让软件实现更新功能的必要技术。如果一款软件失去了自更新,我一般认为它就是“僵尸”了。因为它已经失去了“重生”的机会。
    • 查询。对于一些机密算法,我们放在本地自然不合适,因为破解对高手来说是easy的。那么我们通过网络向服务器提供“物料”,让保存机密算法的服务器告知我们计算结果。

    相关技术参阅: 《实现HTTP协议Get、Post和文件上传功能——设计和模块》 《实现HTTP协议Get、Post和文件上传功能——使用WinHttp接口实现》 《实现HTTP协议Get、Post和文件上传功能——使用libcurl接口实现》

  3. 数据。数据的形式非常多。如果我们一旦涉及通信,便会有数据参与。比如和服务器通信,我们可能需要对数据进行加密或者hash。我们会在之后介绍如下算法的使用:
    • MD5。它是一种hash算法,之前人们一直认为该算法是唯一性很高的算法。它一般用于做数据校验。前几年中国某大学教授发现MD5可以发生碰撞,但是MD5在计算机界的地位还是无法撼动的。可以说我们日常使用的软件里,几乎都存在MD5算法。特别是一些URL请求,其中一些字段就是某些字段组织后进行MD5计算后的结果。这对做过协议破解的人来说,应该是司空见惯的。
    • AES。它是一种加密算法,它是用于取代DES算法的。
    • DES。它也是一种加密算法,但是已经out了,尽量使用AES吧。

    数据是什么格式,是CS端相互约定的。我将介绍如下两种格式的使用:

    • XML。
    • Json。

    数据如果过大,可能要压缩或者解压。这块我将介绍两种库的使用:

    • zip
    • 7z
  4. 日志打点。日志打点的作用不可小视。对于开发同学,日志可以标识程序执行的脉络,从而方便我们定位问题。对于产品交互设计同学,打点可以帮助统计一个按钮被按下多少次,是经过什么顺序被按下的,从而我们可以依据这些数据设计出更合理的交互。有时候,我们安装一款软件后,往往会有个勾选——帮助我们改进。如果你勾选了,那么这款软件就会上传这些日志打点信息。一般,每条日志,都会携带用户标志信息。对于没有账户系统的软件,用户标志一般是若干硬件信息(硬盘序列号等)组合后的结果。相关技术参阅: 《python3编写简易统计服务器》 《WMI技术介绍和应用——查询硬件信息》
  5. 崩溃。可能除了著名的Hello World,没有哪款著名的程序可以保证自己不崩溃。对于折腾过破电脑或者安装过很多杀软的同学来说,应该见过蓝屏是什么样子——操作系统崩溃了。连操作系统都会崩溃,更何况我们写的程序呢?所以崩溃并不可怕,可怕的是我们不能收集崩溃日志和不会分析崩溃日志。这块技术,我将讲解两个模块:
    • 崩溃日志生成。
    • 崩溃日志分析。

    相关技术参阅: 《分析两种Dump(崩溃日志)文件生成的方法及比较》

  6. 数据库。如何一款软件,都可能试图在系统本地留点什么——老子到此一游。那软件怎么刻字,又刻在什么地方呢?简单点,写几个文件就行了。复杂点就要使用到数据库了。

        以上基础的模块介绍完后,我们会插入一些有意思的技术:

  1. 进程间通信。有时候,我们需要调用其他进程来完成任务。一种可能是这款软件是我们自己写的,我们可以在软件代码内部编写进程间通信代码。另一种是这款软件只有固定的输出,我们需要接管其输出,完成单向通信。相关技术参阅: 《进程间通信:同步双工管道》
  2. 云指令。这是一个非常有意思的主题。通过指令可配置化,我们可以像控制网页一样方便的控制客户端的行为——一般情况下,如果我们要改变客户端逻辑可能需要修改代码并发布新的版本。采用云指令后,我们只要改动服务器配置便可以轻易完成对客户端行为的改变,而不需要走漫长的发布和升级流程。相关技术参阅: 《在windows程序中嵌入Lua脚本引擎--使用VS IDE编译Luajit脚本引擎》 《在windows程序中嵌入Lua脚本引擎--建立一个简易的“云命令”执行的系统》 《在windows程序中嵌入Lua脚本引擎--编写自己的Lua库》
  3. 修改别的进程的行为(入侵)。入侵可能每个技术Geek都曾尝试过的经历。为了让我们这次开发之旅变得有意思,我会在最后做个善意的“入侵”,完成一些好玩的功能。相关技术参阅: 《使用APIHOOK实现进程隐藏》 《VC下提前注入进程的一些方法1——远线程不带参数》 《VC下提前注入进程的一些方法2——远线程带参数》 《VC下提前注入进程的一些方法3——修改程序入口点》 《VC提前注入.net软件的方法》 《PE文件和COFF文件格式分析——导出表的应用——一种摘掉Inline钩子(Unhook)的方法》

        希望经过这次旅程,大家可以对windows客户端开发技术和模块有个了解。可以借助该系列博文中的模块,快速搭建自己的应用。

本文参与腾讯云自媒体分享计划,欢迎正在阅读的你也加入,一起分享。

我来说两句

0 条评论
登录 后参与评论

相关文章

  • 码农技术炒股之路——配置管理器、日志管理器

            配置管理器和日志管理器是项目中最为独立的模块。我们可以很方便将其剥离出来供其他Python工程使用。文件的重点将是介绍Python单例和logg...

    方亮
  • C++拾趣——STL容器的插入、删除、遍历和查找操作性能对比(ubuntu g++)——插入

            操作系统是ubuntu 18.04.1 server amd64,gcc是 7.3.0。编译产出是64位测试程序。(转载请指明出于breakso...

    方亮
  • Google Mock(Gmock)简单使用和源码分析——源码分析

            通过《Google Mock(Gmock)简单使用和源码分析——简单使用》中的例子,我们发现被mock的相关方法在mock类中已经被重新实现了,...

    方亮
  • 动手实践,即时通讯WebSocket的代码实现

      随着互联网的发展,传统的HTTP协议已经很难满足Web应用日益复杂的需求了。近年来,随着HTML5的诞生,WebSocket协议被提出,它实现了浏览器与服务...

    java思维导图
  • 干货 | 长连接/websocket/SSE等主流服务器推送技术比较

    作者简介 本文由携程市场营销研发部武艺嫱和王宇星以及张子祥共同撰写,武艺嫱在市场营销研发部负责前端,王宇星和张子祥在市场营销研发部负责java后端。 最近做的...

    携程技术
  • 利用1.1.1.1进行DNS网络加速,仅需2分钟让网络更快

    NEWS 近日,Cloudflare 和 APNIC联合推出了1.1.1.1DNS网络加速。 Cloudflare 运行全球规模最大、速度最快的网络之一。APN...

    码农阿宇
  • 干货 | 长连接/websocket/SSE等主流服务器推送技术比较

    本文由携程市场营销研发部武艺嫱和王宇星以及张子祥共同撰写,武艺嫱在市场营销研发部负责前端,王宇星和张子祥在市场营销研发部负责java后端。

    疯狂的技术宅
  • SSH/SSL 源码编译安装简易操作说明

    环境:CentOS 6.7 安全加固需求,由于某盟扫描系统主机有SSL系列漏洞,客户要求必须修复; 解决方案:将SSH/SSL升级到最新版本,删除SSL旧版...

    Alfred Zhao
  • 安啦,不要再慢腾腾地从百度搜索软件下载了。

    相信很多人都有过这样或类似这样的经历:刚刚装完系统,自己的电脑空白一片,需要装许多日常软件,使用搜索网站一个一个搜索,找到官网后再找到对应的下载按钮,可以说是很...

    课代表
  • Mybatis第二篇| CRUD,这才是程序员入门第一课

    增删改查(CRUD)是程序员必会的技能,我们大部分的时间也都是消耗在增删改查上,当然我们不能只做一个只会CRUD的程序员,当我们掌握并且熟练了CRUD后,我们可...

    Python进击者

扫码关注云+社区

领取腾讯云代金券