并非一时兴起
最近想用C++,写一个植物大战僵尸的修改器,以前小的时候对这些深奥的东西不是太懂,但是现在我已经入门了C++,略懂了一些windows编程基础,所以我打算在实践中学习,实现我过去的一个愿望吧----逆向破解!
目标
马上寒假了,假期的时间很长,现在就来个目标吧,根据MFC开发一个简单的植物大战僵尸修改器
,emm,开搞!!!选择植物大战僵尸,是因为他很简单,CE修改起来十分简单,网络上也有很多教程,我可以选择摸着别人过河。
学习汇编呢,是必须的,如果我没有对汇编的初步了解是不肯能完成这次目标的。
汇编语言概述
汇编语言(Assembly Language)是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言,亦称为符号语言。在汇编语言中,用助记符代替机器指令的操作码,用地址符号或标号代替指令或操作数的地址。在不同的设备中,汇编语言对应着不同的机器语言指令集,通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的,不同平台之间不可直接移植。
----- 百度百科
很多人说汇编很难,的确在开发大程序非常难,可谓是寸步难行,但是我就是为了学习逆向分析,而不是使用它来写程序,而是会修改就可以。所以从这个角度来看,汇编器其实并不是很难(给自己打气)。学习了汇编,可以了解更加本质的东西,就比如说重载的本质哇之类的。
汇编语言的诞生原因
我们知道,CPU 只负责计算,本身不具备智能。你输入一条指令(instruction),它就运行一次,然后停下来,等待下一条指令。
这些指令都是二进制的,称为操作码(opcode),比如加法指令就是00000011。编译器的作用,就是将高级语言写好的程序,翻译成一条条操作码。对于人类来说,二进制程序是不可读的,根本看不出来机器干了什么。为了解决可读性的问题,以及偶尔的编辑需求,就诞生了汇编语言。
汇编语言是二进制指令的文本形式,与指令是一一对应的关系。比如,加法指令00000011写成汇编语言就是 ADD。只要还原成二进制,汇编语言就可以被 CPU 直接执行,所以它是最底层的低级语言。
汇编需要主要学习什么?
- 寄存器和内存模型
- cpu指令
我的学习工具
- VS2019,这个可是地表最强IDE,当然也会有反汇编的功能。使用方法如下
- 在工具 --> 选项-->调试-->常规 中打开 启用地址级调试
- 设置断点后 调试程序 然后鼠标右键+转到反汇编
- 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格式.
结语
加油!