软件调试分析技术

合集下载
  1. 1、下载文档前请自行甄别文档内容的完整性,平台不提供额外的编辑、内容补充、找答案等附加服务。
  2. 2、"仅部分预览"的文档,不可在线预览部分如存在完整性等问题,可反馈申请退款(可完整预览的文档不适用该条件!)。
  3. 3、如文档侵犯您的权益,请联系客服反馈,我们会尽快为您处理(人工客服工作时间:9:00-18:30)。
的编程功底,这里所说的有一定的编程功底不是只会语法,写个“hello world”之类的程序,而 一般逆向技术很厉害的人他的开发能力也不弱,笔者强烈建议在学习逆向分析技术之前有一定
是了解面向过程、面 向对象的编程思想,具 有一定的代码逻辑 能力,最好还做过一些Windows应 用程序,了解一些常用的API。《IDA Pro 权威指南》的作者打过一个比方,“编程和逆向工程就 像 做《纽约 时 报》上 的 填字游戏 一样——解 决特别困难 的 问题总 是会有所 回报 的”。在学习逆向 工程之前,最好能做到爱上编程、爱上代码,如果做不到,如果学习逆向分析技术不是兴趣使然, 那么请绕道,这条路不适合你。
6.1.3 控制程序流程 6.2 堆溢出 6.2.1 堆实现机制 6.2.2 堆溢出演示 6. 3 ShellCode 6.3.1 什么是ShellCode 6.3.2 向进程植入代码 6.3.3 ShellCode的定位 6.3.4 ShellCode中的API地址定位 6.3.5 编码Shellcode 7 实战训练 7.1 冰封王座多开限制分析 7.1.1 “Frozen Throne.exe”分析 7.1.2 “war3.exe”分析 7.1.3 “Game.dll”分析 7.1.4 调试分析 7.2 闪讯本地密码记录分析 7.2.1 确定目标 7.2.3 “Credit”文件 7.3 泊众游戏配置文件加密分析 7.3.1 爆破 7.3.1 追码
逆向分析技术是与软件开发技术同时发展的。说到逆向分析技术,很多人都会很自然的联想到 黑客,这时说的黑客并不是那些非法侵入计算机、破坏网络的骇客,而是指黑客技术。佛家有句名 言“菩提本无树,明镜亦非台,本来无一物,何处惹尘埃”,目前的黑客技术正处于方兴未艾的阶 段,撇开人性的因素而仅从技术的角度来看黑客技术并不是只用于攻击的,它从计算机的背后打开 了一扇门,使得人们可以更清晰的了解到计算机软硬件的运行原理。
谢谢诸位读者听我唠叨这么多。
s7lx
代序
很高兴收到醒涵兄弟的邀请,为他的新书写序。 世界时,不能缺少一个名字——李醒涵。 我敢肯定,我是在为未来的中国软件安全专家写序。未来的某一天,当我们提到计算机
的天赋,高中时就已经被身边的朋友誉为电脑神童。虽然过度痴迷于软件世界使得他错失 了进入一流名校深造的机会,但我始终相信,天赋和勤奋能使他最终成功。 几年来,醒函多次提到想做一件事,总结和梳理一下自己的计算机学习之路。对此,我
李醒涵 2011.8.1
代序
相识应该是若干年前的一场入侵(惭愧,我是被入侵的),斗转星移,这么多年过来,软 件的算法、开发模式甚至是语言都不断的创新,但软件自身的安全发展却步履蹒跚。 从来没有想过要去提别人写个序,但是小涵找上我了,我是绝不能推辞的。想起我和他
的 安 全 审核。可 以 毫 不 夸张 的说,不 管 是 客户端软 件的 编 写,还是 WebServer 上的开 发,未见多少真正了解软件安全其中深意的人。
很多地方解释得都不够到位,这说明在这一年里自己还是有进步的,对很多问题有了更加
想法是好事,不要因为有人轻视你的想法而放弃它,要执着于自己的信念,相信自己会成
突然想起电影版《奋斗》里的一句台词“被人嘲笑的梦想,就越有实现的价值”。人有
些年在我追求技术的道路上遇到过很多的坎坷,要感谢那些看轻我的人,是他们不断地激 励着我,放我坚持在这一条路上一直没有放弃。 恶八进制的兄弟们帮助过我的朋友、同学。 本书的出版要感谢培养我的父母、一直支持我坚持梦想的吴哥、早些年一起奋斗过的邪 一千个人心中有一千个哈姆雷特,一本书,如果有人喜欢那就自然有人嗤之以鼻,但是
醒涵出生于甘肃一个普通的家庭。天资聪颖的他,早早地就显示出了在计算机软件方面
自己的总结,也想给攀爬在学习之路上的学弟们一些启示。可能有人会说,书的内容存在 种种不足,但是请你相信,这是一位青年人的呕心之作,他代表着一种声音,一种积极向 上、追求梦想的声音,一种代表着中国明日希望的呐喊之声。
也给予了相当的鼓励。现在他开始做了,他想独立完成几本软件安全方面的书籍,既是对
2.1
基本语句 2.1.1 变量 2.1.2 简单的计算
2.2
控制语句 2.2.1 if结构 2.2.2 switch结构 2.2.3 循环结构
2.3
函数 2.3.1 函数调用 2.3.2 参数和返回值
2.4
实战训练 2.4.1 简单算法分析 2.4.2 修改可执行文件
3
断点 3.1 关于断点 3.1.1 什么是断点 3.2 软件断点 3.2.1 什么是软件断点 3.2.2 int3断点 3.2.3 普通断点 3.2.4 条件断点 3.2.5 函数断点 3.2.6 消息断点
不同的语言、不同的编译器生成的二进制可执行文件的代码都有其特征,了解这些特征会 手的角度做讲解,使读者更容易理解其中的奥妙;第七章总合前面所有章节的内容,通过 分析三个实例使读者更好的吸收本书讲到的知识。 逆向分析技术博大精深,本书之中如有理解不当的地方,请读者不吝赐教。 使逆向分析获得不小的收益;第六章,很多人认为缓冲区溢出是比较深的东西,本书从新
4.3.2 IAT 4.3.3 PE优化 4. 3 加密壳分析 4.3.1 Armadillo分析 5 高级语言平台 5.1 VB 5.1.1 VB语言概述 5.1.2 Native-Code 5.1.3 P-Code 5.2 Delphi 5.2.1 Delphi 5.2.2 Delphi的反编译 5. 3 C++ 5.3.1 C++ 5.3.2 程序入口点 5.3.3 类的识别 5.3.4 构造函数和析构函数 5.3.5 虚函数 5.3.6 MFC 6 缓冲区溢出 6.1 栈溢出 6.1.1 栈溢出原理 6.1.2 栈溢出演示
作者:李醒涵(Rejector)
前言
就是三年前,有朋友支持,但是听到更多的是唏嘘。其实我只是想把自己学习的路径记录 下来,分享给更多的朋友,让新手在入门的时候不至于走太多弯路。当时马上就要高三 了,家里父母也比较反对我搞计算机,想法终究没有实现。而在这一段时间,因为要面对 要出这本书的想法已经酝酿好久了,想起我刚刚打算出书的时候,那时候我上高二,也
识;第二章通过阅读一些简单的代码来培养读者的逆向分析经验;第三章讲到了目前比较 试技术大为增色;第四章从软件保护的角度讲到关于壳的知识,通过脱壳了解PE文件的加
常用几种断点的使用和实现方法,断点是调试分析中很重要的东西,善于使用断点会使调 载过程、壳的加载过程,这里是加密解密技术的起步;第五章讲到关于语言的一些内容,
写这篇代序的时候,我正于某国内知名的互联网公司实习,见识到了所谓的软件工程中
谓的敏捷开发、螺旋迭代,18天可以上线一个服务,可是质量呢?
小涵是我见过的为数不多的还能静下心来做些事的人,回头看看周围,多少人都在讲所 微软这么些年来,可以说是吃进了安全漏洞的苦头,即便在Vista和Win7中这些安全问
题已经大有改观,但是,跑在这些操作系统上的应用,却未见得如这操作系统一样安全。
功。不是有句歌词么“冷漠的人,谢谢你们曾经看轻我,让我不低头,更精采的活”,这
不管你喜欢不喜欢这本书,它都是作者的心血。 西,厌倦 了 扫盲类黑客破 解书 籍 的朋友 可 以 尝试阅 读 此 书。第 一 章主 要 讲 到一些基础 知 本书从比较底层的角度讲到了关于逆向分析技术的一些知识,使读者理解比较原理的东
提供些许帮助。同时,更向大家推荐本书作者--李醒涵,一个为计算机软件技术而生的青
在 此,我 隆重 向大家 推荐 这本书——《软 件调试分 析技术》,希望 能为 尊敬的读者 们
年后生,在他弱冠之年就已将其所学所想汇编成书,提供我们看待计算机世界的一个崭新 视角,实属不易。希望通过本书,大家能够认识他,了解他,喜欢他,让他成为我们共同 的朋友。 醒 涵,放 飞 你的梦想,为 兄 始终 相 信,未 来已经 向 你开 启 成 功 的大门,好好 珍惜 和把 辛卯夏吴铮于羊在草堂
第一章 基础知识
本章介绍与软件调试和逆向分析 的基础知识,打开读者的眼界, 培养读者的学习兴趣。
1.1.1 什么是逆向分析技术
逆向分析技术,又被称为逆向工程或反求工程。逆向工程是相对于正向工程而言的。一般的程 序设计是程序的用途和功能,先有构想,再通过计算机编制高级语言代码,然后经过编译、链接形 成二进制可执行文件。而通常所说的逆向工程是通过对现有的二进制可执行文件进过反汇编、反编 译、调试模拟程序运行等手段,分析出程序的执行流程、数据结构等。逆向工程不是简单的复制和 缩短新程序的开发周期、提高设计开发效率。 模仿,而是运用相关手段对产品进行分析再设计等创新处理,从而使程序表现出更加优良的性能、
高考,很少有机会接触计算机(其实至少有一年半几乎没碰到电脑),导致技术和热情都 峰的还是高二的时候。
远不如以前了,即使现在已经在大学里学习了一年,回想一下,感觉对于自己来说,最巅 虽然高三一年放下我热爱的计算机去努力学习,但是因为基础不太好,最终也没有达到
自己的目标。高考志愿填到了杭州电子科技大学,然后稀里糊涂地就被录取了。在这里要 一个良好的学习氛围。
3. 3
内存断点 3.3.1 内存断点 3.3.2 内存断点的使用
3. 4
硬件断点 3.4.1 什么是内存断点 3.4.2 内存断点的实现 3.4.3 硬件断点的使用
4
壳 4.1 关于壳 4.1.1 什么是壳 4.1.2 压缩壳 4.1.3 加密壳 4.1.4 虚拟机保护 4.1.5 PE文件格式 4.1.6 壳的加载过程 4.1.7 简单PE加载器分析 4.2 寻找OEP 4.2.1 跟踪寻找 4.2.2 堆栈平衡 4.2.3 内存镜像 4.2.4 DLL文件 4. 3 后期处理 4.3.1 附加数据
件开 发 人 员(尤 其是 客户端),在开 发调试程序 的时候,如果 仅仅 是 满足 自己的 程序能
软件调试分析,可以说是伴随着计算机诞生的那一天它的出现就成为一种必然。作为软
都应该ຫໍສະໝຸດ Baidu好好的读一读。毕竟,软件是为人服务的,因为软件的安全问题,甚至是有可能 撞毁的事故)。前些日子发生的温州动车事故,对于事故原因,有一种说法就是自动停车
跑、能得出正确结果,那恐怕是不行的。“用户的一切输入都是有害的”,这是比尔盖茨 以少多少啊!但现实很残酷,我们写的代码更多是用来处理各种异常而不是所谓的业务逻 辑。 这本《软件调试分析技术》,应该说无论是一线的开发人员还是所谓的安全测试人员, 说过的。相信作为开发人员,早已意识到,如果没有那些“判错处理”,我们的工作量可
提醒一些年轻的读者,如果真的热爱计算机就好好学习,考到一个好一点的,为自己营造 从去年高考结束以后开始着手准备,当时已经写了一部分,但是大一这一年因为一些个
人生活的问题,一直都没有时候去完成。熬到大一结束以后重新翻出原来的稿件,感觉有 深入的认识,所以打算重新开始做这件事情。恨下心删了原来的所有稿件,重新设计目 录,重头开始写,努力了整一个假期,每天在电脑前十多个小时,终于完成了全部稿件。
危机到人的生命(美国曾经发生过因为字符编码问题导致飞机自动导航系统出现问题最后 系统的编码有问题。我想作为开发人员最不希望看到的就是自己辛辛苦苦写出来的程序最
后给别人造成了经济乃至生命的损失。也许有的人觉得这些内容过于冷门和生涩,但我依 然希望你能埋头好好看看这本书,因为你会从另一个角度好好的看看我们的软件,到底什 么样子的。
逆向分析技术不是为了破解软件,而是为了跟踪软件,了解程序流程,从而使自己写出更好的程 条路任重而道远。
黑客技术并不像人们想像的一样神秘莫测、遥不可及,如逆向分析技术,是非常常用的。学习
序。很多年来逆向分析技术都没有引起人们的注意,到近几年国内的软件安全技术才刚刚兴起,这
1.1.2 如何学习逆向分析技术
握,你一定能成功!吴哥祝福你!
目录
1 基础知识 1.1 关于逆向分析技术 1.1.1 什么是逆向分析技术 1.1.2 如何学习逆向分析技术 1.2 一些常见的工具 1.2.1 常用工具 1.2.2 OllyDBG 1.2.3 PEID 1.2.4 LOAD 1.2.5 IDA 1.3 操作系统 1.3.1 windows消息处理机制 1.3.2 PE文件格式 1.3.3 COM原理 1.3.4 堆 1.3.4 栈 1.4 汇编语言 1.4.1 寄存器 1.4.2 汇编指令 1.4.3 寻址方式 2 逆向分析基础
相关文档
最新文档