我的黑客生活
我的黑客生活
我是黑客吗?没有人给我回答 我还是学生.还要完成我的学业 注意: 本人可以回答问题 第一个免费,第二个免费,第三个收费,以后可以考虑打折!
临川一中不是人待的地方!!
博客信息
博主:DataBaseOwner 
栏目分类
最新文章
最新评论
标签列表
博客搜索
日志存档
·2009-1 ( 1 )
·2008-10 ( 4 )
·2008-7 ( 4 )
·2008-6 ( 5 )
·2008-5 ( 1 )
·2008-4 ( 3 )
·2008-2 ( 10 )
·2008-1 ( 53 )
友情链接
统计信息
访问:84951 次
今日访问:3次
日志: 7篇
评论: 29 个
留言: 9 个
建站时间: 2008-1-12
博客成员
DataBaseOwner 管 理 员
数字狼 管 理 员
最近访客



逆向大乱谈
作者:DataBaseOwner 提交日期:2008-10-11 20:23:00 正常| 访问量:452

我想通过这个类似大乱谈一样的文章跟大家分享一些心得吧。不知道我去砸Killer的场子他老人家会不会生气......于是我打算在这个大乱谈样的文章中讲点方法与思路,当然,很多方法并不是我的原创,只是我用这些方法和思路解决了我的实际问题。由于本人水平还处于菜菜阶段,很多说法只是我个人的理解,然后用我自己的语言表达出来,可能并不很专业,所以在这里不负责任的乱谈一下,欢迎大家拍砖。在此我也郑重向大家介绍著名喷子——不要脸皮奥克夫斯基
首先什么是代码逆向

 代码逆向就是是在没有源代码的情况下,对目标程序的行为、数据流、及编译器生成的代码进行分析。通过分析我们可以了解、发现程序的功能、流程、规则、及技术实现细节等,通过分析我们能对其进行优化、功能增强、漏洞填补、甚至还原成源代码等等。这个分析过程我们可以称作是逆向工程,简称逆向。


对我们个人而言或许能够从逆向分析的过程得到的最大好处就是学习到优秀程序的设计思想、及技术实现细节。


当今,逆向分析技术在很多地方都得到了应用,典型应用包括恶意软件分析、漏洞挖掘、BUG定位、技术探秘等。
 有人可能会说逆向太无耻了,自己不会写就偷别人的代码。。。我就不相信说这话的人什么都会,就算他什么都会。我就不信他没有分析过别人的东西,学习过别人的东西,我只能说他是无知的,无耻的。。。不了解逆向是一个探索未知的方法,这也是一种学习态度,是代表不屈服于困难的精神。如果没有逆向当前的很多科学进步不了这么快,也可能不能取得进步,科学研究就是探索未知,把我们未知的东西进行分析研究变成已知,不光是软件领域有逆向工程的应用,其他领域如:基因重组、化工、制药、电子、建筑、航空、军事等领域也存在着他们各自的逆向工程应用,逆向工程帮助科研人员把未知的东西进行分解、研究、组合、改进等,甚至创造新的东西出来等,科学就是这样一点点进步的。

传说中的逆向方法
1、白盒分析:
白盒分析就是从代码级别上(可能是反汇编代码、反编译的伪代码或源代码),通过动态调试或静态反汇编分析和理解程序的功能、逻辑,找到程序的安全问题等。
2、黑盒分析:
黑盒分析是指从程序的外部,通过观察程序运行时候的行为,规则等来猜测和断定程序可能的实现方法,是否有存在脆弱点等。
3、灰盒分析:
灰盒分析通常需要借助一些专有工具(可能需要自己编写),如api监视工具,陷阱工具,内存比较工具,文件监视工具等对目标程序进行监控,看它发生了什么操作,调用了哪些api,产生了哪些结果,在系统哪些地方安插了HOOK或过滤等,以此来猜测和断定程序可能的实现细节。
 目前来看越来越多的程序加了VM或进行了代码扭曲,用白盒分析此类程序可能会花很大力气也找不到突破口,而黑盒和灰盒分析往往对这类程序可能有意想不到的效果。
神样的逆向手段
1、动态调试
通过调试器对目标程序进行追踪分析,能够清楚的了解到程序运行起来后内部的状态,运算结果等信息。
2、静态反汇编/反编译分析
使用反汇编器或反编译器把目标程序变为可读的汇编代码或伪代码,然后分析程序的结构,流程,逻辑等。
学习的基础,就像打游戏一样,你不过训练关,怎么让你过之后的关卡....所以基础是必须的所以扎实的编程功底绝对是学好逆向的关键,基础打好了学什么都快,基础打不好,什么都不成。程序的基础就是算法和数据结构,语言只是一个实现的工具,绝大多数语言都是相通的,我们只要掌握一门,以后如果需要学习其他语言的话上手就会很快了,当然别说那么特例,大概来说基础知识我们重点需要掌握下面3个内容:
1.至少一门高级程序设计语言,推荐C语言或Pascal
2.x86汇编语言
3.常用算法和数据结构

 软件一般都是在特定平台下运行的,如Windows平台,Linux平台,WinCE平台,Java平台,Symbian平台等等。。。针对特定平台下的软件逆向,需要掌握特定平台下程序设计的相关知识,包括其SDK,进程管理,文件系统,内存管理等。这些东西不必要全部背下来,这个没必要,也没可能,但得有个大致的了解,常用Api要知道,有特定平台下的程序设计经验最佳,遇到问题知道在哪里能找到自己想要的资料室最起码的。逆向的过程本身就是一个学习的过程,所以我们可以在逆向的过程中要不断的补充自己相关的知识,时常做点笔记什么的,这样学习的效果是最佳的。
另外,学习逆向的最好方式就是动手实践,在实践中学习。通常的说我们逆向时所面临的东西对我们来说是可能是未知的或者是可能知道但不确定的,如果是已知的就没必要再去逆向了。针对性的学习就是在自己逆向的时候不懂什么知识就补什么知识,经过日积月累我们的收获是相当可观的,不光是经验值的增长,还有知识面的增长和知识深度的增长。所以就升级了....

编程的经验对于我们实践逆向时也很重要,例如进行“漏洞挖掘”的时候我们可能会以程序设计者的角色进行思考,程序在哪些地方需要进行防范,哪些地方可能会出现漏洞等等,如果我们有足够的经验的话,可以很快定位到相关的代码部分对其进行分析,看是能不能存在可能的漏洞。或者比如如在进行“技术探秘/代码还原”的时候,由于现在的程序规模越来越大,我们不可能每条指令,每段代码都去看,都去逆向,要不我们离死也就不远了。给大家算下一个1M的程序如果这样做的话,光时间成本上来说成本都是相当高的,因此我们需要快速定位关键代码段,而丰富的编程经验有助于我们做到这一点。拓宽自己的编程知识面、积累编程经验跟积累逆向经验同样重要。丰富的编程经验能让变得轻松很多。
=====================================结尾=========================================
以前 Killer 作逆向工程的时候常说工具有“四两拔千斤”的功效,我也不太会表述,等你有足够的实践之后大概才能体会到,反正我觉得这个就是只能意会不能言传了.....


#日志日期:2008-10-11 星期六(Saturday) 晴 送小红花 推荐指数:复制链接 举报


登录 | 新人注册>>
输入您的评论:(不支持HTML标签)


验证码
本文所属博客:我的黑客生活
引用地址:


copyright blog.tianya.cn

© 天涯社区