从一开始的网络攻防(十一):逆向工程基础

从一开始的网络攻防(十一):逆向工程基础

逆向分析基础介绍

逆向分析概述

逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品

逆向工程源于商业及军事领域中的硬件分析

其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理

逆向分析的准备工作

汇编语言

汇编是逆向工程的基础,汇编语言是一切程序的起点和终点,毕竟所有的高级语言都是建立在汇编基础之上的。在许多高级语言中我们都需要相对明确的语法,但是在汇编中,我们会使用一些单词缩写和数字来表达程序

汇编语言是最古老的编程语言,在所有的语言中,它与原生机器语言最为接近。它能直接访问计算机硬件,要求用户了解计算机架构和操作系统

工具准备

PEID

查看软件是否加壳

DIE

识别软件是用什么语言编写的

OllyDbg

反汇编调试工具

逆向分析的学术价值

破解软件的登录,注册码和其他的授权挖掘漏洞和安全性检测还原非开源项目挑战自我,提高自我

逆向分析的作用方向

破解软件,去除软件的各种限制木马、病毒等恶意代码的分析内部算法的分析对软件进行修改,二次开发,扩展其功能

破解软件

逆向破解软件指的通过修改内存或者程序文件、或者写注册机(keygen)程序并随机产生有效的序列号注册码,来达到免费使用该软件、或者突破其功能限制的目的的过程。

思路

查找软件是否加壳

如果加壳的话,检测识别使用什么语言编写的找对应的脱壳工具脱壳

(OD)找出验证的关键位置,分析验证机制修改关键跳转

加壳

加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。

加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是隐藏程序真正的OEP(入口点,防止被破解)

加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。

这种技术也常用来保护软件版权,防止软件被破解。

脱壳

脱壳即去掉软件所加的壳

找出验证的关键位置

在这三步中验证的关键是第二步验证中,这个位置是真假码的比较。第二步一般很难直接找到,因为一个程序里面有很多不同的判断,要找关键位置必须依靠线索:

最直接的线索就是验证后的不同结果最常用的办法就是通过验证后的结果来反查到关键位置

一种结果是有提示的字符串,比如“成功”“失败”等,破解思路就在程序代码中先定位到这些字符串,然后往前找关键比较代码

通过结果来反查是最主要的做法,对于不同的结果,要用不同的办法,比如提示字符串、错误对话框等等

如果没有错误返回结果,那我们就需要从验证前的线索入手了

木马、病毒等恶意代码的分析

将程序反汇编出源码,静态分析源码

将机器代码反汇编成方便人类理解的代码,如Java代码、汇编代码或汇编代码翻译的C语言伪代码等等,通过分析这些比较低级的编程语言的代码,来分析查看木马、病毒等恶意代码

内部算法的分析

通过断点调试手段,让程序单步执行进行分析

动态分析往往是在静态分析出一定的结果的基础上进行,找到合适的地方给代码打断点,即时地读取当前变量的值,来进一步分析程序的逻辑、获取程序关系数据

对软件进行修改,二次开发,扩展其功能

软件部分功能不能适应满足个人的使用需求需求,在现有的软件上进行定制修改和功能的扩展,然后达到自己想要的功能

逆向分析工具的简单介绍

PEID

查找软件是否加壳

点击浏览选择要逆向分析的软件或者直接将要逆向分析的软件拖动到PEID

DIE

识别软件是用什么语言编写的

点击…选择要逆向分析的软件或者直接将要逆向分析的软件拖动到DIE

OllyDug

将机器代码反汇编成方便人类理解的代码,如]Java代码、汇编代码或汇编代码翻译的C语言伪代码等等,通过分析这些比较低级的编程语言的代码,找到程序的业务流程或设计逻辑

通过断点调试手段,让程序单步执行进行分析。动态分析往往是在静态分析出一定的结果的基础上进行,找到合适的地方给代码打断点,即时地读取当前变量的值,来进一步分析程序的逻辑、获取程序关系数据

将程序直接拖进OD,将程序反汇编出来,分析反汇编的代码,找到程序验证的关键位置,逐步分析,修改程序

代码区:显示汇编代码的地方,查看程序执行代码信息区:显示程序运行每句代码的相关信息数据区:显示程序的数据的地方寄存器区:显示寄存器堆栈区:堆栈也是内存的一部分,堆栈里面的地址存放数据

相关资讯