逆向工程思路

一、说明

对于逆向工程和大多数人一样接触始于看雪的《加密与解密》,但在相当长一段时间内对于逆向的认知都只停留在PE格式、OD下断点动态调试、IDA各种窗口静态调试这几个名词上。看了一遍又一遍的书和视频,看的时候觉得很有道理,过了之后则完全没懂到底说了些什么。到后来老师引入CTF,其他人津津有味地做了出来,而自己手足无措看网上的答案这么操作一下那么操作一下结果就出来了完全不懂在做什么为什么要这么做,由此陷入了深深的惶恐。

因为在个人看来凡事都是要有依据懂原理才能进行的,但自己成绩不落后别人动手编程能力不落后别人,完全不明白CTF这种自己感觉没头没脑的东西为什么别人却可以做得出来,世界观几要崩溃。时至今日也只能说按照自己的思路确实可以进行逆向,而至于别人为什么感觉没有章法也能逆向则还是没有想清楚。

二、逆向工程思路

在说明中提到“在相当长一段时间内对于逆向的认知都只停留在PE格式、OD下断点动态调试、IDA各种窗口静态调试这几个名词上”,这其中的问题是大多数教程都讲清楚了怎么做,而没向初学者解答一个问题,什么时候这么做。或者换一种说法就是,当我们进行逆向前我们要想清楚一个问题:当我们逆向的时候,我们到底是在做什么。

所谓逆向,其实我们就是在做以下三件事情:

第一步,借助PE格式解析可执行文件。一是指olldbg和ida按PE格式解析出可执行文件的各组成部份包括数据段代码段指令字符串等等;二是指我们自己要能把od和ida解析出来的数据段代码段指令字符串与PE格式对应上,对应上的意思首先是说我们要知道各窗口的东相都在PE文件的什么位置,然后是说我们要知道我们自己想要在的东西应该到哪个窗口去找。

第二步,通过各种手段逼近目标代码。目标代码,比如要去除nag窗口的目标代码弹窗代码,要去除次数限制的目标代码就要计数代码。逼近就是锁定目标代码的起始地址和/或结束地址。逼近手段,OD的逼近手段是各种窗口+断点,IDA的逼近手段是各种窗口+交叉引用。

第三步,是分析目标代码逻辑。就是指或是从锁定的起始地址向结束地址一条条指令地追踪,或是从结束地址往起始地址一条条指令地分析确定目标代码的逻辑,及决定跳过的对策。

在这三步中很多教程让人感觉逆向就是在操作od/ida,但其实od/ida复杂度顶多和burpsuite/wireshark一个级别也没有很多操作,工具操作背后的PE格式理解、汇编掌握才是逆向的真正关建点。下文三四五大点依次对应以上三步。

三、可执行文件格式

3.1 本文使用的示例程序
首先介绍本文使用的示例程序,这是密码学中用C++写的一个SHA1加密工具,操作过程就是使用小组组员姓名登录,认证通过和即可进入程序加密操作主界面。如下所示:

3.2、可执行文件格式的定义及作用
可执行文件----windows平台就是exe、dll等文件,linux平台就是各种命令和so文件,android平台就是dex文件。是磁盘状态的文件而不是加载到内存后的内存中的文件。

可执行文件格式----就是可执行文件的组织格式。对操作系统而言可执行文件格式指示系统如何正确解析、加载和运行可执行文件;对逆向工具而言可执行文件格式指导逆向工具解析出可执行文件的代码段数据段指令和字符串等各组成部份;对人而言,我们自己也得要掌握可执行文件格式能将逆向工具只是解析出的各部分与可执行文件格式对应上理解各成分的含义作用,不然只是工具解析出来几个窗口在那里并没有什么用,另外加壳脱壳等防护也需要我们掌握可执行文件格式从可执行文件格式入手

windows平台就是PE格式、linux平台就是ELF格式、安卓的dex也有其格式。其实扩展开去不只可执行文件,所有的文件都需要有格式都需要或多或少的一些头部指示其解析器如何对其进行解析,诸如视频、图片、pdf等等。数据包也需要以太头、ip头、tcp头等格式。

网络安全学习资源分享:

零基础入门

对于从来没有接触过网络安全的同学,我们帮你准备了详细的学习成长路线图。可以说是最科学最系统的学习路线,大家跟着这个大的方向学习准没问题。

在这里插入图片描述

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享 (qq.com)

同时每个成长路线对应的板块都有配套的视频提供:

在这里插入图片描述

在这里插入图片描述

CSDN大礼包:《黑客&网络安全入门&进阶学习资源包》免费分享 (qq.com)

因篇幅有限,仅展示部分资料,需要点击上方链接即可获取