逆向工程基础_计算机逆向工程-程序员宅基地

技术标签: 安全  渗透测试  逆向分析  

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

版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
本文链接:https://blog.csdn.net/song123sh/article/details/124278526

智能推荐

JAVA开发Web Service几种框架介绍-程序员宅基地

文章浏览阅读68次。郑重声明:此文为转载来的,出处已不知了,侵告删。  在讲Web Service开发服务时,需要介绍一个目前开发Web Service的几个框架,分别为Axis,axis2,Xfire,CXF以及JWS(也就是前面所述的JAX-WS,这是Java6发布所提供的对 Web Service服务的一种实现。)前面几项都为开源项目,而其中又以axis2与cxf所最为常用,Axis与XFir..._java开发使用的几种server的名称

C/C++:编译全过程——预处理、编译、汇编、链接(包含预处理指令:宏定义,文件包括、条件编译)_怎么在devc++里面把c文件变成汇编语言-程序员宅基地

文章浏览阅读1.4k次。一、前言 C/C++的编译过程包含了四个步骤: 1. 预处理(Preprocessing) 2. 编译(Compilation) 3. 汇编(Assemble) 4..链接(Linking)二、预处理 预处理阶段主要处理一些预处理指令,比如文件包括、宏定义、条件编译。1.文件包括 文件包括就是将所有的#include..._怎么在devc++里面把c文件变成汇编语言

Pytorch深度学习实践第十二讲 RNN 课后1(LSTM)_pytorch深度学习实践12课后作业-程序员宅基地

文章浏览阅读837次,点赞3次,收藏9次。B站 刘二大人 传送门 循环神经网络(基础篇)课件链接:https://pan.baidu.com/s/1vZ27gKp8Pl-qICn_p2PaSw提取码:cxe4模型还是将输入“hello”训练输出为“ohlol”,用LSTM网络实现。按照计算图实现LSTM之后,又尝试了加入embedding的方法。加embedding的训练快,但是我的LSTM效果不如前面RNN的,不知道是我网络写的有问题还是怎么回事。LSTM的网络结构示意图和公式:根据我自己的理解写出来的LSTM模型,有不对的地方_pytorch深度学习实践12课后作业

android实训项目无线点餐系统服务器的设置,无线点餐系统的设计与实现--Android实训.doc...-程序员宅基地

文章浏览阅读208次。Android课程设计报告院 系: 计算机与信息工程学院班 级: 10级软件技术一班学 号:姓 名:PAGEPAGE 14目录TOC \o "1-3" \h \u 24017 一、系统架构 311293 二、功能分配 35248 2.1.浏览功能 326351 2.2.查询功能 314154 2.3.插入功能 328656 2.4.修改功能 41740 2.5.删除功能 41540 三、内..._android无线点餐系统

Python3 --- Scrapy安装_command "e:\python3.7.3\python.exe -u -c "import s-程序员宅基地

文章浏览阅读566次。安装方式一:如果使用的是PyCharm则File-->Settings-->Project Interpreter,选择绿色加号搜索Scrapy安装即可,如下图:这里需要注意Manage Repositories可以配置成: https://pypi.douban.com/simple/ http://mirrors.aliyun.com/pypi/simple/..._command "e:\python3.7.3\python.exe -u -c "import setuptools, tokenize;__file

cookie和session的区别(简单理解)_cookie和session区别-程序员宅基地

文章浏览阅读471次。由于HTTP协议是无状态的协议,所以服务端需要记录用户的状态时,就需要用某种机制来识具体的用户,这个机制就是Session.典型的场景比如购物车,当你点击下单按钮时,由于HTTP协议无状态,所以并不知道是哪个用户操作的,所以服务端要为特定的用户创建了特定的Session,用用于标识这个用户,并且跟踪用户,这样才知道购物车里面有几本书。这个Session是保存在服务端的,有一个唯一标识。在服务端保..._cookie和session区别

随便推点

OwlCarousel使用-程序员宅基地

文章浏览阅读1.4w次,点赞6次,收藏19次。参考:http://www.jq22.com/jquery-info6010使用方法Owl Carousel 2是上一版Owl Carousel的升级版本。Owl Carousel 2可以让你创建漂亮的响应式旋转木马的jQuery插件,它支持移动触摸屏,功能十分强大。Owl的新特性有: 可以无限循环 项目可以居中显示 灵活的速度控制 多级别的paddin..._owlcarousel

【深度学习】使用caffeNet训练自己的数据集(caffe框架)-程序员宅基地

文章浏览阅读3.5k次。主要参考:官方网址:http://caffe.berkeleyvision.org/gathered/examples/imagenet.html数据集及第一部分参考网址:http://www.lxway.com/4010652262.htm主要步骤:1. 准备数据集2. 标记数据集3. 创建lmdb格式的数据4. 计算均值5. 设置网络及求解器6. 运行求解由于imagenet的数据集太大,博主..._caffenet

SpringBoot集成Quartz 2.3.1动态管理定时任务_springboot实现动态管理quartz-程序员宅基地

文章浏览阅读1.8k次,点赞5次,收藏12次。我写了一个简单的Demo项目,有需要的文末可获取项目github地址,该项目我会一直保持更新。基于quartz2.3.1实现动态管理定时任务。使用swagger实现接口文档。前后端统一使用JSON格式交互。使用Hutool工具类直接连接数据库,避免Job任务中不能使用Autowired问题。swagger文档如下图:后续文章创建JobDetail(JobBuilder详解)创建CronTrigger(TriggerBuilder详解)_springboot实现动态管理quartz

C#控制利用模板文件通过BarTender控制斑马打印机打印_c# 直接调用斑马打印机打印固定模板-程序员宅基地

文章浏览阅读2k次。重点在后面:https://blog.csdn.net/z_344791576/article/details/46328443?ops_request_misc=%257B%2522request%255Fid%2522%253A%2522159546478119725219951536%2522%252C%2522scm%2522%253A%252220140713.130102334.pc%255Fall.%2522%257D&request_id=15954647811972521995_c# 直接调用斑马打印机打印固定模板

matlab multiple animatedline,matlab画图详解-程序员宅基地

文章浏览阅读926次。一. 二维图形(Two dimensional plotting)1. 基本绘图函数(Basic plotting function):Plot,semilogx,semilogy, loglog,polar, plotyy(1). 单矢量绘图(single vectorplotting):plot(y),矢量y的元素与y元素下标之间在线性坐标下的关系曲线。例1:单矢量绘图y=[0 0.6 2...._animatedline 添加图例