首先非常感谢武汉科锐(www.51asm.com)的钱林松老师[backer]对我的细心指导,仅以此系列教程献给钱老师,略表寸心。
目录(以下为暂定的目录结构,不排除以后修改的可能):
01、前言
02、学习逆向的价值
03、学习逆向的前提
04、声明
第一部分:走近逆向
1、简单的逆向初探
欢迎光临A1Pass为您打造的逆向工程学习的神秘世界,我们将由这个大门开始逐渐了解逆向工程这个看似神秘的领域。当你踏入这扇大门的时候,你将发现自己变得不在与以前相同了,我在这里将于各位读者一齐经历这个化茧为蝶的奇妙过程,各位菜鸟们还在等什么?一起来玩吧!!
1.1、寻找main函数入口 本小节最佳反馈者:
叁毛
1.2、一个简单的小例子 本小节最佳反馈者:
lonkil、
zzycqok
1.3、if-else分支的识别技巧 本小节最佳反馈者:
lonkil、
竹君
1.4、循环分支的识别技巧 本小节最佳反馈者:
SunV
1.5、switch-case识别技巧初探
1.6、switch-case识别技巧提高
1.7、加法与减法的识别与优化原理
1.8、乘法识别与优化原理
1.9、除法与取模运算的识别与优化原理<--what's new!
2、几种函数调用方式的识别技巧
2.1、几种调用方式的区别
2.2、sdtcall与Pascal的识别与区分
2.3、__cdecl与fastcall的识别与区分
3、指针与指针函数的识别技巧
4、数组与结构体的识别技巧
5、最后一役(出一个比较难且有代表性的例子)
第二部分:C++逆向初探
1、引言
2、识别构造与析构函数的技巧
2.1、怎样快速的识别出类
2.2、识别构造函数
2.3、识别析构函数
3、虚函数与纯虚函数的识别技巧
3.1、识别简单的虚函数
3.2、识别较复杂的虚函数
4、如何正确识别类的继承关系
4.1、有虚函数的菱形继承逆向
5、怎样识别类与类成员的作用域
6、最后一役
第三部分:玩转软件逆向
1、RTTI在C++逆向中的巧妙应用
2、再议虚表
01、前言
最近一直在忙于学业,很久没为读者们写什么技术性的文章了。前几天出去办事,在等火车时无聊去了网吧上了一会网,才意识到自己似乎已经在网络中消失太久了。为了证明我还活着,所以出来透透透气,给各位献上几篇教程。
02、学习逆向的价值
逆向工程对于任何一个制造业来说都是一门掌握颇为艰辛、知识范围较边缘化以及价值巨大的学问。如果我们掌握了模具逆向,那么我们就可以复制出与其相同的产品,如果我们掌握了工业机械逆向,那么我们就可以学习并掌握别人的机械制造原理。
同样的,如果我们掌握了软件逆向,那么我们就可以掌握其他软件所用的技术技巧、算法结构,甚至还原出功能完全相同的源代码。那么即便是如此,这又有什么用呢?
当你在寻找系统或商业软件漏洞时,懂得逆向技术几乎是必需的;
当你在分析病毒木马的特征时,懂得逆向技术可以使你的分析更为有效率且精准可靠;
当你在企图分析其他企业的成熟商业产品时,懂得逆向技术会使你如鱼得水;
记得安全界的卡巴斯基因前辈曾说过一句话:“不懂得汇编的黑客就像是没有桨的船夫!”而我认为“不懂得软件逆向的黑客就像一艘没有螺旋桨的船。”因此,毋庸置疑的,逆向技术将会成为渴望研究系统底层技术人员们所必不可缺的技术,逆向技术更是每一位黑客所必须掌握的基本功。
03、学习逆向的前提
常读我文章的读者都应该清楚,我是一个喜欢将复杂的知识简单化的作者,但是即便如此,这次我也要非常遗憾的告诉各位读者,阅读这篇文章是要有一定的工作环境与前置知识要求的,不过我在写作过程当中会尽量将这种要求控制在最低点。但是我个人认为这些都不难,因为这些都是作为一名黑客技术爱好者所必需的。
对于环境有以下要求:
最佳:Visual Studio 2008或以上版本,Borland C++ 6.0或以上版本,OnllyDbg任意版本与IDA Pro 5.2或以上版本。
必须:IDA Pro 5.2或以上版本
对于前置知识有以下要求:
最佳:有一定的C、C++编码经验,有一定的32位汇编经验,了解过编译原理。
必须:懂得基本的C++语法,懂得基本的32位汇编。
好的,如果你满足了以上的条件,那么你肯定可以顺利的阅读完这个教程。如果你并不满足以上条件,那么可以先试着读一读本系列教程的第一篇,以求开拓视野、并验证自己哪里仍有不足。
04、声明
为了使本系列教程更好的服务于广大逆向爱好者,作者在此提出声明:
我十分希望看到大家对于这个教程(或其中的某一章、某一节)的深入讨论,并发现其中的错误与有待改进之处,更希望论坛上的前辈们能提出建设性的建议,以使得这个教程变得更加易读、更易理解、更加准确。
因此作者为了提高各位的积极性,本着“过有罚、功有奖”的思想-_-!,特为各位提出建设性意见的朋友们准备一份小礼物,希望大家勇于发言,勤加探讨。
小礼物:
作者写调试器时的一个CMD UI半成品,支持所有鼠标键盘消息,自认为写得不太好,期望不会令各位获奖者失望(不要抱太大期望)。
此CMD UI绝不是使用绘图API做出来的垃圾东西,而是笔者自己实现了部分函数(不过也不要因此误认为这有多牛X),其中包括:
CMDUI_GetMessage
CMDUI_DispatchMessage
CMDUI_DefWindowProc
CMDUI_SetWindowText
CMDUI_MessageBox
CMDUI_DrawRect
CMDUI_DrawLine
CMDUI_DrawConnectDot
CMDUI_SetTextAttribute
CMDUI_SetWindowSize
阅名知意,不再多言。
感谢以下朋友对本教程提出了非常棒的建议与意见:
pyq逍遥
欢迎访问:www.hackav.com、a1pass.blog.163.com 了解更多!
看雪侠者千人榜,看看你上榜了吗?