CTF逆向工程简单介绍以及解题通用思路入门
CTF逆向工程简单介绍以及解题通用思路入门CTF逆向工程简单介绍以及解题通用思路入门一、软件逆向工程的简介1、软件的生成软件的编写语言经历了从机器语言到汇编语言再到如今高级语言的变化。最开始使用的都是机器语言进行的编写机器语言是机器能直接识别的程序语言或指令代码无需经过翻译每一操作码在计算机内部都有相应的电路来完成它或指不经翻译即可为机器直接理解和接受的程序语言或指令代码。机器语言使用绝对地址和绝对操作码。不同的计算机都有各自的机器语言即指令系统。从使用的角度看机器语言是最低级的语言。而二进制代码则是机器语言的具象表示。机器语言有着其独特的优势——不用编译且所有设备均可以识别所以其跨平台性举世无双但是冗杂的代码难以记忆难以编写难以阅读则是天堑般的弱点。为了解决这一问题汇编语言出世了汇编语言是任何一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言亦称为符号语言。在汇编语言中用助记符代替机器指令的操作码用地址符号或标号代替指令或操作数的地址。在不同的设备中汇编语言对应着不同的机器语言指令集通过汇编过程转换成机器指令。特定的汇编语言和特定的机器语言指令集是一一对应的不同平台之间不可直接移植。不难看出汇编语言的优点依旧明显——不用编译。可扩展性依旧很高并在一定程度上易于记忆但是依旧单调而冗长。在编程语言经历了机器语言汇编语言等更新之后人们发现了限制程序推广的关键因素——程序的可移植性。需要设计一个能够不依赖于计算机硬件能够在不同机器上运行的程序。这样可以免去很多编程的重复过程提高效率同时这种语言又要接近于数学语言或人的自然语言。因此高级语言诞生了对于码农而言这是史诗级福报。高级语言是一种独立于机器面向过程或对象的语言。高级语言是参照数学语言而设计的近似于日常会话的语言。例如要将2个变量相加并赋值给第三个变量用高级语言表达为var3var1var2。高级语言相对低级语言有较高的可读性更易理解。但是很可惜的是由于早期计算机行业的发展主要在美国能开发语言的大牛也都在那边吗因此一般的高级语言都是以英语为蓝本。但是现在的仓颉和易语言等都是基于中文开发的只是还有待推广。2、逆向工程的定义以及目标软件逆向工程是通过对低级代码进行一系列提升和抽象最终得到容易被人所理解的表现形式的过程。换句话说软件逆向工程的目的就是从目标软件中找出设计思想。具体而言软件逆向工程是指从可运行的程序可执行文件出发运用解密、反汇编、反编译、系统分析、程序理解等计算机技术对软件的结构、流程、算法、代码等进行分析推导出软件产品的汇编/源代码、设计原理、结构、算法、处理过程、运行方法及相关文档等。或者直接理解为你想抄作业读书人的事情怎么能叫抄呢那是借鉴但是你只有“参考”答案只有答案没有过程你为了应付老师的检查不得不通过答案逆推过程然后交上去蒙混过关。这个基本上就是逆向干的事情了。而实际工作里的逆向工程主要应用就是恶意代码分析还有病毒分析以开发杀毒或者防护软件。当然也可以制作外挂脚本什么的但是你最好不要这么干。二、CTF逆向工程入门1、逆向题目特点比赛它一定是会给定目标程序的而这一类程序则通常分为两大类第一类是由输入的需要自己通过逆向分析找到正确的输入第二类是在后台运行的没有明显的显示这里就需要去看看内存后者网络流向里找找了。很多恶意代码分析都是第二类的。而比赛的考点也是非常的少而集中完事死难。一般会从程序保护、开发语言和核心算法三个层次出题。简单点的题目包括程序没有保护、C语言开发、核心逻辑是简单加密或者对输入字符的ASCII码进行修改等题目。难点的不止一点两级分化之人和狗的差距包括程序加壳干扰且有反调试、Go语言开发、核心算法设计迷宫或者图论什么的。逆向的难点也是非常的清晰1.RE 难点一绕过程序保护常见的保护措施包括编译器静态链接、优化。加壳、加密、混淆、花指令。反虚拟机、反调试、虚拟化等。2.RE 难点二理解程序开发语言程序可使用的指令集和高级语言多种多样包括指令集x86、x64、ARM、ARM64、Mips。操作系统Windows、Linux、iOS、Android 等。语言C、Pascal、Haskell、C、Go。脚本Java、C#、Perl、PHP、Python、Ruby、Lua。脚本编译打包pyc、pyinstaller 等。3.RE 难点三识别核心算法常见的算法包括常见密码算法识别 (DES、AES、MD5、SHA1、TEA、RSA 等)。密码算法变形。矩阵求解。迷宫问题。经典图论算法 (Dijkstra 算法、KMP 算法) 等。因此逆向设计的点很多而且对你的能力要求非常高。当然个人认为比密码还好点虽然逆向经常分析加密解密逻辑。2逆向解题入门思路所谓逆向就是有根据地“连蒙带猜”。一发入魂超爽的对于要分析的程序我们并不需要知道程序的所有细节即使是分析关键函数也可以利用函数中的某些特征猜测函数使用的算法。注意逆向时对于函数功能的猜测要有依据也就是总纲中所说的“有根据地”没有根据的胡乱猜测只会让自己陷入混乱。逆向分析的操作要领可总结为一看二猜三验证。一看是指使用 IDA 或者 OllyDbg 等工具静态或动态地查看程序的关键函数。具体操作时虽然程序多种多样但是逆向分析程序可以有统一的“套路”。针对逆向题目的三大考查层次其分析步骤如下第 1 步使用 DetectItEasy、EXEInfoPE、PEID 等工具查看壳和编译器信息并能进一步推测出所使用的程序开发语言。第 2 步使用 IDA 等工具查看程序反编译后的伪码和程序中的所有字符串静态分析程序的核心逻辑和关键算法。第 3 步针对第 2 步中没看懂的函数使用 GDB、 OllyDbg 等动态调试工具分析关键函数的逻辑。二猜是指通过“一看”中发现的特征猜测关键函数采用的算法这一步非常考验选手的经验。三验证是指在“一看二猜”基础上通过编写脚本或者多次运行程序验证自己的猜测是否正确如果不正确则再次重复“一看二猜三验证”的过程。在程序逆向分析中要静态为主动态为辅。在“逆向分析的操作要领”中“一看”涉及多个动静态分析工具的使用如果新手不知道工具的使用顺序就很容易“走火入魔”迷失在代码的海洋中。静态为主是指优先使用 IDA 等工具查看程序伪码通过静态分析快速定位关键函数并仔细阅读关键函数中的算法逻辑。静态分析时要求选手有一定 C 语言基础因为 IDA 伪码与 C 语言类似。有相当数量的简单题目在这一步就能解决这就意味着选手只要会看 C 语言、会使用 IDA 反编译即使完全不懂动态分析也能解题拿分。动态为辅是指在通过静态分析确定关键函数后由于 IDA 反编译效果或者程序有混淆不能读懂其中逻辑时应针对关键函数采用动态分析方法通过动态调试跟踪函数操作来确定其内部逻辑。动态分析是静态分析的补充。静态分析和动态分析没有孰优孰劣需要具体问题具体分析因此两种分析方法都要尽量掌握。如果读者暂时不能掌握动态分析方法也一定要熟练掌握静态分析方法。最后提醒一下CTF逆向通常有windows系统、Linux系统、安卓系统的逆向题目哦文章来自网上侵权请联系博主互动话题如果你想学习更多网安方面的知识和工具可以看看以下题外话《网络安全从零到精通全套学习大礼包》96节从入门到精通的全套视频教程免费领取如果你也想通过学网络安全技术去帮助就业和转行我可以把我自己亲自录制的96节 从零基础到精通的视频教程以及配套学习资料无偿分享给你。网络安全学习路线图想要学习 网络安全作为新手一定要先按照路线图学习方向不对努力白费。对于从来没有接触过网络安全的同学我帮大家准备了从零基础到精通学习成长路线图以及学习规划。可以说是最科学最系统的学习路线大家跟着这个路线图学习准没错。配套实战项目/源码所有视频教程所涉及的实战项目和项目源码学习电子书籍学习网络安全必看的书籍和文章的PDF市面上网络安全书籍确实太多了这些是我精选出来的面试真题/经验以上资料如何领取cn/direct/92a6ab8e26034045b97ae8ac36b2a650.png)以上资料如何领取
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2568082.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!