并非一时兴起

最近想用C++,写一个植物大战僵尸的修改器,以前小的时候对这些深奥的东西不是太懂,但是现在我已经入门了C++,略懂了一些windows编程基础,所以我打算在实践中学习,实现我过去的一个愿望吧----逆向破解!

目标

马上寒假了,假期的时间很长,现在就来个目标吧,根据MFC开发一个简单的植物大战僵尸修改器,emm,开搞!!!选择植物大战僵尸,是因为他很简单,CE修改起来十分简单,网络上也有很多教程,我可以选择摸着别人过河。
学习汇编呢,是必须的,如果我没有对汇编的初步了解是不肯能完成这次目标的。

汇编语言概述

汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
----- 百度百科

很多人说汇编很难,的确在开发大程序非常难,可谓是寸步难行,但是我就是为了学习逆向分析,而不是使用它来写程序,而是会修改就可以。所以从这个角度来看,汇编器其实并不是很难(给自己打气)。学习了汇编,可以了解更加本质的东西,就比如说重载的本质哇之类的。

汇编语言的诞生原因

我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。
这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。
汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。
image.png

汇编需要主要学习什么?

  1. 寄存器和内存模型
  2. cpu指令

我的学习工具

  • VS2019,这个可是地表最强IDE,当然也会有反汇编的功能。使用方法如下
  1. 工具 --> 选项-->调试-->常规 中打开 启用地址级调试
    image.png
  2. 设置断点后 调试程序 然后鼠标右键+转到反汇编
    image.png
  • CE修改器

汇编语言的种类

  • 8086汇编(16bit)
  • x86汇编(32bit)
  • x64 汇编(64bit)
  • ARM汇编

不同的架构的处理器是不一样的,我现在的学习环境是WIN10 64位,所以我现在了解的是 x64汇编和 x86汇编(64位汇编是兼容x86的)。

x64的两种汇编语言格式

根据不同编译器,汇编格式不同

  • Inter
  • AT&T

使用vs2019 的汇编格式为为Inter,使用GCC编译器或者MAC,Linux为AT&T.
虽然这是两种不同的格式,但对应的二进制代码是一样的,只是返回过来给然阅读的时候不一样罢了,目前学习环境为Inter格式.

结语

加油!
79A59EF56224B22753145CEA8E88BAA2-dfc4efa7ed3d4a6480b9233445c2e872

努力成长的程序员