当前位置:   article > 正文

逆向工程基础_计算机逆向工程

计算机逆向工程

0x01、逆向分析基础介绍

1、逆向分析概述

逆向工程(又称逆向技术),是一种产品设计技术再现过程,即对一项目标产品进行逆向分析及研究,从而演绎并得出该产品的处理流程、组织结构、功能特性及技术规格等设计要素,以制作出功能相近,但又不完全一样的产品。逆向工程源于商业及军事领域中的硬件分析。其主要目的是在不能轻易获得必要的生产信息的情况下,直接从成品分析,推导出产品的设计原理。

image-20220417002359388

2、逆向分析准备工作

基础知识准备-汇编语言基础

汇编是逆向工程的基础,汇编语言是一切程序的起点和终点,毕竟所有的高级语言都是建立在汇编基础之上的。在许多高级语言中我们都需要相对明确的语法,但是在汇编中,我们会使用一些单词缩写和数字来表达程序。
汇编语言是最古老的编程语言,在所有的语言中,它与原生机器语言最为接近。它能直接访问计算机硬件,要求用户了解计算机架构和操作系统。

汇编是逆向工程的基础,在现代编程中大家用的都是python,C/C++,java,易语言等这些高级语言,但是程序经过编译链接之后执行的都是汇编语言。
计算机是基于二进制的,只能接受和处理二进制信息,CPU处理的指令也是二进制流,我们称之为机器语言。

逆向分析工具准备

image-20220417002729581

image-20220417003638926

3、逆向分析的学术价值

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

0x02、逆向分析的作用方向

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

1、破解软件

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

image-20220417003835299

破解软件思路

查找软件是否加壳,如果加壳的话,找对应的脱壳工具脱壳。检测识别使用什么语言编写的,然后找出验证的关键位置,分析验证机制,修改关键跳转。

image-20220417003904733

加壳:加壳的全称应该是可执行程序资源压缩,压缩后的程序可以直接运行。加壳的另一种常用的方式是在二进制的程序中植入一段代码,在运行的时候优先取得程序的控制权,之后再把控制权交还给原始代码,这样做的目的是隐藏程序真正的OEP(入口点,防止被破解)。加壳的程序需要阻止外部程序或软件对加壳程序本身的反汇编分析或者动态分析,以达到保护壳内原始程序以及软件不被外部程序破坏,保证原始程序正常运行。这种技术也常用来保护软件版权,防止软件被破解。

脱壳:脱壳即去掉软件所加的壳。

image-20220417003954153

​ 在这三步中验证的关键是第二步验证中,这个位置是真假码的比较。第二步一般很难直接找到,因为一个程序里面有很多不同的判断。
​ 要找关键位置必须依靠线索。最直接的线索就是验证后的不同结果。最常用的办法就是通过验证后的结果来反查到关键位置。一种结果是有提示的字符串,比如“成功”,“失败”等,破解思路就在程序代码中先定位到这些字符串,然后往前找关键比较代码。
​ 通过结果来反查是最主要的做法,对于不同的结果,要用不同的办法。比如提示字符串,错误对话框等等。
​ 如果没有错误返回结果,那我们就需要从验证前的线索入手了。

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

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

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

3、内部算法的分析

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

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

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

0x03、逆向分析工具的简单介绍

查找软件是否加壳(PEID)

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

image-20220417004323285

识别软件使用什么语言编写的(DIE)

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

image-20220417004608874

反汇编调试工具(OllyDbg)

将机器代码反汇编成方便人类理解的代码,如Java代码、汇编代码或汇编代码翻译的C语言伪代码等等,通过分析这些比较低级的编程语言的代码,找到程序的业务流程或设计逻辑。通过断点调试手段,让程序单步执行进行分析。动态分析往往是在静态分析出一定的结果的基础上进行,找到合适的地方给代码打断点,即时地读取当前变量的值,来进一步分析程序的逻辑、获取程序关系数据。

image-20220417004722777

将程序直接拖进OD,将程序反汇编出来,分析反汇编的代码,找到程序验证的关键位置,逐步分析,修改程序。
代码区:显示汇编代码的地方,查看程序执行代码
信息区:显示程序运行每句代码的相关信息
数据区:显示程序的数据的地方
寄存器区:显示寄存器
堆栈区:堆栈也是内存的一部分,堆栈里面的地址存放数据

声明:本文内容由网友自发贡献,不代表【wpsshop博客】立场,版权归原作者所有,本站不承担相应法律责任。如您发现有侵权的内容,请联系我们。转载请注明出处:https://www.wpsshop.cn/w/很楠不爱3/article/detail/90567
推荐阅读
相关标签
  

闽ICP备14008679号