简明、现代而优雅的破解技术笔记(一)
本帖最后由 qzhsjz 于 2021-2-5 20:29 编辑#简明、现代而优雅的破解技术笔记 前言
*吾爱破解 qzhsjz*
一转眼的时间 Windows 10 已经发布6年了,距离 Windows XP 停止一切支持服务也已经过去了七年。距离英特尔发布第一款64位处理器已经过去了15年,AMD 发明 x86-64 也已经是18年前的事了。十二年前,Windows 7 正式发布,大多数预装 Windows 7 的电脑都采用了英特尔最新的64位处理器,标志着个人电脑正式进入64位时代。与此同时,iPhone引领了世界智能手机市场最大的变革,掀起了移动互联网的风潮,推广了Emoji和同系统多国语言文字共存,从而推进了Unicode的普及。可以说,站在当今的视角下,如果一个程序不是Unicode内码的64位程序,那么他就不是一个现代的程序。
很遗憾的是,当前中文互联网上的破解教程,依然停留在21世纪初 Windows XP 刚刚发布时的水平,只能处理过时的程序。作为一个新时代的新手,不应该为历史所困,直接丢掉历史包袱,学习最新的技术,有助于快速提高自身水平,跟上业界发展。
我也是一个新手,当我看到各种教程教我创建XP虚拟机来运行各种老古董破解工具,不能破解64位软件,还需要装插件或者用一些奇怪的方法才能进行中文搜索的时候,我的内心实在是悲痛。好在我英语还过关,在混了一些国外论坛的基础上,我学到了一些新时代逆向工程的皮毛,借此整理记录下来,希望能对各位有所裨益。
## 基础理论
当你想学习逆向开发的时候,我觉得最重要的一点是你要有一些正向开发的基础知识,并且最重要的是了解一些在正向开发的过程中对逆向分析有用的原理,这样就能在学习逆向分析的过程中时刻思路清晰,而不是拘泥于一些知其然而不知其所以然的方法论。下面我将介绍一些与此有关的基础理论。
### CPU与内存
作为一个新手,我们还是需要先了解一下计算机的基本结构。CPU负责运行指令并处理数据,而内存负责存储指令和数据。计算机的核心部件就是这两个东西。一般来讲,CPU先从内存中读取一批指令,然后执行,执行的过程中就会读写内存中的数据。所以CPU需要能够记住读取的一批指令,并且能够存储需要向内存读写的数据。所以CPU中有寄存器(用来存储数据)和指令缓存(用来存储指令)。CPU是一套很复杂的逻辑电路,作为这样复杂的一套逻辑电路,有一些基本的设计规定。比如CPU中的“一个”数据使用多少根线来表示,有几根线就可以代表几位二进制数,这也就是CPU的位数。无论是指令还是数据,在CPU的电路中其实都是数据。指令其实是一种规定,当碰到一个数的时候,如果他是从指令这边过来的,那么他就代表什么意思,CPU就要执行这个意思。例如 x86-64 CPU 碰到了`B8 00 00 00 00`,就知道要往eax寄存器中存入`0x00000000`。所以有人把数和意思之间做了一个转译,让人们可以不用记这些指令的具体数字,使用别名编程,这就是汇编语言。上例`B8 00 00 00 00`转换成汇编语言就是`mov eax, 0x00000000`。
### 操作系统平台
无论是正向开发还是逆向工程,都是建立在某一个操作系统或者平台之上的。作为一个新时代的新手,我们自然是使用最新版 Windows 操作系统。Windows 操作系统中的exe文件就是可以执行的程序文件,当我们双击exe文件时,Windows 就会创建一个进程,并读取exe文件的各个部分并且把这些部分装进进程内存的合适位置,然后从程序的入口点开始执行。程序执行时不可避免地会用到一些操作系统提供的功能,例如从控制台中读取和输出内容,这些功能微软官方都封装成了C语言的函数库,当你使用C语言或C++时可以很方便地调用,但使用其他语言时就必须使用第三方或者语言官方提供的调用方式了,如果没有提供,你需要学习 Windows 的 ABI(应用程序二进制接口),并且自己实现调用系统调用。这是一个至少不太适合新手的过程,并且没有任何第三方的实现比微软官方的稳定且优雅。所以如果想在 Windows 上优雅地编程,尤其是想要快速上手,我们应该使用微软官方提供的最新工具,也就是最新版 Visual Studio,并且使用C语言或C++来编写程序。
### 我的英语不好,我害怕
最新版的 Visual Studio 已经是完全汉化的状态,此外,Community版本(社区版)够用,而且是完全免费的。使用Unicode内码编写程序时,C/C++语言除了关键字有那么几个if、while、for、switch、case、void、int、float等,以及非中国人编写的函数库的功能是英文之外,其余任何位置都可以使用中文。C++标准委员会对于C++的标准库有[全面的中文文档](https://zh.cppreference.com/w/%E9%A6%96%E9%A1%B5),可以对照参考,名称使用英文仅仅是为了“起个名”,名字总要有,而且用英文起对于全球人民来说是最方便的。与此同时,微软对于自己的Visual Studio也有[全面的中文帮助文档](https://docs.microsoft.com/zh-cn/cpp/?view=msvc-160)。可以说,在现代学习C++语言,不存在任何语言障碍。另外,如果你在看过如此大量的全中文资料后依然感觉打英文字母就是不舒服,或许可能“伤害到了你的民族自尊心”的话,结合上一条,学会编写和分析现代化、优雅且稳定的程序应该比这一点点的不舒服重要太多了。
### 停止编写过时、混乱且不稳定的程序
是的,我几乎要点名易语言了,不支持64位,也不支持Unicode,并且编译出来的结果混乱不堪,既不是现代化的编程方案,也不足够优雅。最重要的是,不利于新时代正向和逆向开发的学习,请停止走弯路,拒绝过时和不够优雅的东西。
**从下篇笔记开始,我将带领大家编写一个现代化的密码验证程序,并亲手破解它。**
[简明、现代而优雅的破解技术笔记(二)](https://www.52pojie.cn/thread-1362645-1-1.html)
[简明、现代而优雅的破解技术笔记 特别篇:扫盲及入门建议](https://www.52pojie.cn/thread-1362991-1-1.html)
[简明、现代而优雅的破解技术笔记(三)](https://www.52pojie.cn/thread-1363671-1-1.html)
本帖最后由 涛之雨 于 2021-1-31 00:28 编辑
所以易语言真的是。。。
他就帮你翻译了一下关键词,
再多点就是帮你封装了一些支持库(c中应该对应的导入的.c文件),
易模块(c中应该对应的dll动态链接库),
把变量放到最开始,然后单独弄个全局变量表(c中应该也对应的.h头文件),其他没啥区别了。。。
连接器和编译器都是vc的(现在也早就被vs淘汰了)
打包的exe亿堆乱七八糟的字符串,什么“超级列表框”,什么“打印”,完全没关系的东西。。。
还有所谓的关于网上很多人说“易语言垃圾”的解释!(9楼还算比较合理的)
倒不是说作者多么垃圾,作者挺厉害的,vc一行行敲出来的这么个庞然大物,佩服。但是这个东西确实现在过时了。
偶尔图方便用一下,可以啊,如果只是为了调用某个接口,Python,node配合云函数不方便到起飞?
带界面,能打包的话可能还能说得通,其他的是真的没什么意义。。
就好像为什么要买新手机?旧手机不能打电话么?
可以,但是用不了其他的功能了,不兼容新的时代了。但是旧手机完全没用了么?也不全然,偶尔可以做备用机接打个电话,挂个什么服务之类的也很方便
此外,吾爱破解论坛嘛,谈谈破解。
所有的按钮都可以通过一个特征码定位到按钮事件开始前。。。
就好像一栋楼虽然你们住不同的房间,但是我把单元门给你锁了,只要你想回家,我必能找到你。。。
此外,期待楼主的著作 感谢楼主分享的学习经验,期待下集 本系列教程很详细,给予加精鼓励,期待更新下去!
@qzhsjz 超级链接导致markdown标题的bug诟病很久了,刚从代码层屏蔽了解析,你可以试下,现在应该没有问题了。 来个X64的难倒国内一片 x64时代早该来了,天天天天都是xp怎么破解,问题是 xp基本没人用了啊 吾爱论坛 X64逆向的时代要来了吗 谢谢老师期待老师作品 谢谢分享 占楼,非常期待下一堂课{:301_987:} 感觉好酷啊围观学习啦~ 谢谢分享,很有用 谢谢楼主分享围观学习啦~ 期待新思想,新技术,新玩法 关注了,期待楼主的教程