首页
论坛
课程
招聘
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝

[原创][进行中]C++逆向学习三步走[10-09-02更新]

2010-5-24 18:15 242194

[原创][进行中]C++逆向学习三步走[10-09-02更新]

2010-5-24 18:15
242194
      首先非常感谢武汉科锐(www.51asm.com)的钱林松老师[backer]对我的细心指导,仅以此系列教程献给钱老师,略表寸心。

目录(以下为暂定的目录结构,不排除以后修改的可能)
      01、前言
      02、学习逆向的价值
      03、学习逆向的前提
      04、声明

第一部分:走近逆向

1、简单的逆向初探
      欢迎光临A1Pass为您打造的逆向工程学习的神秘世界,我们将由这个大门开始逐渐了解逆向工程这个看似神秘的领域。当你踏入这扇大门的时候,你将发现自己变得不在与以前相同了,我在这里将于各位读者一齐经历这个化茧为蝶的奇妙过程,各位菜鸟们还在等什么?一起来玩吧!!

    1.1、寻找main函数入口                 本小节最佳反馈者:叁毛
    1.2、一个简单的小例子                 本小节最佳反馈者:lonkilzzycqok
    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.coma1pass.blog.163.com 了解更多!

[公告]看雪论坛2020激励机制上线了!多多参与讨论可以获得积分快速升级?

最新回复 (179)
雪    币: 2791
活跃值: 活跃值 (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuyangzjg 活跃值 2010-5-24 18:19
2
0
楼主 是搞免杀的那个 a1pass?
雪    币: 2362
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zapline 活跃值 2010-5-24 18:19
3
0
...打我屁屁我不乖...
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-24 18:23
4
0
正是本人,免杀只是作为兴趣的一个引路者,本身并没有什么,由此引申出来的这种知识才更有意思。
雪    币: 2791
活跃值: 活跃值 (56)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
shuyangzjg 活跃值 2010-5-24 18:26
5
0
hehe,偶尔还去你的163博客转转,
~~买了你的那本书入门的
雪    币: 1054
活跃值: 活跃值 (10)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
gaollxu 活跃值 2 2010-5-24 18:33
6
0
有机会买本您的书,学习一下。
雪    币: 1627
活跃值: 活跃值 (27)
能力值: ( LV9,RANK:170 )
在线值:
发帖
回帖
粉丝
EvilKnight 活跃值 4 2010-5-24 18:45
7
0
支持一下!
雪    币: 1891
活跃值: 活跃值 (10)
能力值: ( LV13,RANK:420 )
在线值:
发帖
回帖
粉丝
demoscene 活跃值 7 2010-5-24 19:27
8
0
你老,手不够快
雪    币: 2362
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zapline 活跃值 2010-5-24 19:38
9
0
我是认真看完了帖 才回复的
雪    币: 246
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
hawkish 活跃值 1 2010-5-24 22:13
10
0
关注ing。。。。。。。。。。。。
雪    币: 274
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
binghelang 活跃值 2010-5-24 22:30
11
0
太高深了 苦读中~~谢谢发布
雪    币: 70
活跃值: 活跃值 (23)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
dnybz 活跃值 2010-5-24 23:40
12
0
关注中。。。
雪    币: 202
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
pengpzy 活跃值 2010-5-25 08:53
13
0
期待中,盼望中!
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-25 09:13
14
0
本教程是边写作,边发表,因此各位如果觉得在整体结构上哪里需要调整,或有什么好的建议,还望各位不惜赐教,让我们在交流中提高自己,服务大家。
雪    币: 248
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
xiebing 活跃值 2010-5-25 17:42
15
0
书什么名字?
雪    币: 1332
活跃值: 活跃值 (40)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
sssccc 活跃值 2010-5-25 18:33
16
0
前排占位 ....期望中..
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-25 21:24
17
0
《黑客免杀入门》,详情可以去我博客了解,不过已经绝版了(可能有部分淘宝店铺还有存货)。
雪    币: 258
活跃值: 活跃值 (80)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 活跃值 41 2010-5-26 00:11
18
0
原来是《黑客免杀入门》一书的作者,失敬失敬!
雪    币: 125
活跃值: 活跃值 (18)
能力值: ( LV4,RANK:40 )
在线值:
发帖
回帖
粉丝
njxxdx 活跃值 2010-5-26 12:21
19
0
关注ing...
雪    币: 351
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
x敏m 活跃值 2010-5-26 12:39
20
0
mark !!!
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-27 01:01
21
0
riusksk折杀我了,那书是我大学时闲着没事写的,入门书籍,论坛上的前辈们都不屑于写的。

倒是riusksk的英语使我佩服的五体投地,最近正准备系统的学习下呢,如果有那块不懂的还望多多指点。
雪    币: 236
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
YFLK 活跃值 2010-5-27 12:32
22
0
我喜欢这类内容,如果能成立一个专做”逆向“的公司,一定有钱途!
楼主可有此想法?
雪    币: 352
活跃值: 活跃值 (10)
能力值: ( LV12,RANK:260 )
在线值:
发帖
回帖
粉丝
zenghw 活跃值 6 2010-5-27 12:36
23
0
这个教程目录貌似有点熟悉 :)
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-27 13:22
24
0
难不成重复了?还望这位兄弟给出链接,正好看看我是不是再重复制造轮子。
雪    币: 230
活跃值: 活跃值 (11)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
lonkil 活跃值 1 2010-5-27 13:38
25
0
我没看到相关主题,但是就是有我认识也没什么,各位作者的教学风格不一样。

我比较喜欢楼主的风格,简单易懂,深入浅出。看了楼主的好几篇文章受益匪浅,感谢。

希望楼主,有时间就把这个系统列教程做完。
雪    币: 260
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wangyisai 活跃值 2010-5-27 16:33
26
0
呵呵,又做贡献了
雪    币: 214
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
syziy 活跃值 2010-5-27 21:57
27
0
晕哇,比hackav 还多发一章
雪    币: 1834
活跃值: 活跃值 (15)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
yingyue 活跃值 2010-5-27 22:28
28
0
这个帖子不错啊,怎么顶的人不多呢,都懂了 ?
雪    币: 270
活跃值: 活跃值 (10)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
WR-911 活跃值 1 2010-5-27 23:34
29
0
怪不得近期针对杀软的免杀多了起来
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-27 23:40
30
0
这个教程 在看雪首发 ,一是因为这里的逆向爱好者肯定要比我的 黑客反病毒论坛 论坛要多,我相信这里有更多的人需要它。二是因为笔者与段刚段老师也有过一定的接触,因此也想以此教程为看雪论坛尽一份力。(还有就是钱老师也经常光顾这里)

因此希望关注本教程朋友们尽量与我互动起来,一是使我及时的了解各位的反馈,修改偏差,二是也可以给我增加更大的信心,使得本系列教程更加顺利的进行下去。

看雪论坛上每一位对此贴发表评论的同仁都是参与此教程建设的一份子,如果各位在一篇文章里找到什么笔误或错误的地方,笔者会将贡献者的名字缀在其后,以示感谢。
雪    币: 97
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
Sgdcl 活跃值 2010-5-28 09:46
31
0
留个标记,好贴应该顶
雪    币: 291
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
zhchchqihu 活跃值 2010-5-28 09:54
32
0
原来是《黑客免杀入门》的作者,大牛啊,学习了。。。谢谢~!
雪    币: 297
活跃值: 活跃值 (11)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
cogito 活跃值 2010-5-28 10:37
33
0
又是科锐出来的...
雪    币: 70
活跃值: 活跃值 (20)
能力值: ( LV9,RANK:250 )
在线值:
发帖
回帖
粉丝
Nisy 活跃值 5 2010-5-28 11:22
34
0
大工程 支持下 ~~
雪    币: 258
活跃值: 活跃值 (80)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
riusksk 活跃值 41 2010-5-28 11:50
35
0
不提英语也罢,往事不堪回首啊!
大学时就论书立著,是个不错的开端啊,呵呵……
雪    币: 201
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
bbstz 活跃值 2010-5-28 15:51
36
0
好耶,支持教程~
雪    币: 1288
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
dgrzh 活跃值 1 2010-5-29 10:36
37
0
很不错的教学文章,楼主的每一篇文章我都要仔细拜读,希望楼主再接再厉,为我们这些菜鸟指点迷津,谢谢!
雪    币: 30
活跃值: 活跃值 (13)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
lyricC 活跃值 2010-5-29 13:05
38
0
mark.
------------------------------------------强烈支持楼主
雪    币: 307
活跃值: 活跃值 (15)
能力值: ( LV3,RANK:30 )
在线值:
发帖
回帖
粉丝
wswm 活跃值 2010-5-29 15:52
39
0
关注中。。。。。。。。。。。 默默支持
雪    币: 318
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
CYBER涛 活跃值 1 2010-5-29 19:49
40
0
关注啊!期待很久这种教程了,楼主的技术没有话说,拜一个,然后用心学习去了,不能对不起楼主的这番心意!
雪    币: 1635
活跃值: 活跃值 (15)
能力值: ( LV12,RANK:1000 )
在线值:
发帖
回帖
粉丝
天易love 活跃值 18 2010-5-29 21:07
41
0
我好象也有一本黑客免杀教程,看非安全时买的。好多年了,后来觉得免杀太烦还不如自己写程序。当黑客没基础所以到论坛学逆向充电,看来和楼主想法差不多,只是没有老师业余自学而已。
雪    币: 182
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
denglifeng 活跃值 1 2010-5-30 00:51
42
0
好文章,顶一个。
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-30 14:07
43
0
小弟向来只做研究不接单子,圈内的应该都清楚,没有谁听说过我A1Pass接过单子的。
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-30 14:12
44
0
知音、知音呀……
雪    币: 237
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
wwwsssxxxq 活跃值 2010-5-31 11:22
45
0
楼主连自己的论坛都不更新了…………害我在你论坛等到颈子都长了,原来跑到这里来首发了。。汗
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-5-31 13:09
46
0
本系列教程以这里为主
非常抱歉,不过我的论坛里也有其他资源,例如免杀入门的电子版就在连载,而且我的文集也整理成pdf的格式后发布了,这些资源都是我论坛独有的。
雪    币: 154
活跃值: 活跃值 (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
install 活跃值 1 2010-6-1 17:13
47
0
能否在1.8节后加一节关于 无分支逻辑的介绍。在实际操作中还是很常见此类代码的。理解它的工作原理还是很有用的。
雪    币: 226
活跃值: 活跃值 (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
黄庆南 活跃值 2010-6-1 19:08
48
0
学习一下。。
雪    币: 40
活跃值: 活跃值 (10)
能力值: ( LV3,RANK:20 )
在线值:
发帖
回帖
粉丝
xixuegui 活跃值 2010-6-1 23:58
49
0
谢谢楼主..  正好在学C++的同时顺便逆向试验的代码..
雪    币: 774
活跃值: 活跃值 (209)
能力值: ( LV9,RANK:280 )
在线值:
发帖
回帖
粉丝
A1Pass 活跃值 5 2010-6-2 01:29
50
0
谢谢你的提议,我会将其考虑进去的,但是也许会因此引出一个过大的分支。
我想还是先将基本的逆向讲完后在设计逻辑分析比较科学。

如果你有什么疑问可以提出来,我们共同讨论。
游客
登录 | 注册 方可回帖
返回