逆向工程恶意软件入门(基础篇)

本文讲的是逆向工程恶意软件入门(基础篇)

前言

在这个系列文章中,我会向大家介绍逆向工程恶意软件的各个方面的知识。逆向工程恶意软件是一个很深奥和复杂的主题,因此很少有人掌握它,这也是这个领域的薪酬很高的主要原因。

在开始本文之前,我需要先阐述一个概念框架,并阐述与逆向工程恶意软件有关的一些策略和问题。

什么是逆向工程?

在本系列文章中,即使我无法访问源代码(通常是这种情况),我也将尝试确定该恶意软件的功能。在确定软件功能之后,我将尝试对其调整或在另一个恶意软件中重新构建相关功能。

逆向工程用于恶意软件开发和监测的两个环节。在开发环节,使用逆向工程的作用是用来查找恶意软件可以利用的操作系统和应用程序中的漏洞。此外,开发人员可以使用逆向工程来查找和使用其他恶意软件的模块。像所有软件开发人员一样,恶意软件开发人员会重复使用他人软件中的有用代码,即使在进行恶意软件开发时也不会重新编写代码。

而在监测环节,安全调查员和事件处理程序要使用逆向工程来跟踪恶意软件的作用以及它可能带来的危害。此外,逆向工程通常可以使安全调查员了解恶意软件的起源和归因。

低级软件

在进行逆向工程过程中,我经常会在低级软件中进行工作。因为对我来说源代码通常是不可用的,只有在低级软件才能实现这点。

汇编码

汇编是软件链中的最低级别,尽管我无法访问源代码,但是可以使用各种工具将源代码减少到汇编级别。任何高级语言的指令都必须对汇编语言代码可见,每个指令必须减少到一个或多个汇编指令。在大多数情况下,我将在逆向工程时使用这个简单的汇编代码。

显然,要取得成功,我必须熟悉汇编语言代码。不幸的是,没有一种具体的汇编语言,因为汇编语言是一种用于电子计算机、微处理器、微控制器或其他可编程器件的低级语言。要掌握逆向工程,就必须掌握我选定平台的汇编代码。在本系列中,我将研究x86,x64和ARM汇编。

机器码

机器码或二进制代码是由CPU读取的代码,机器码和装配码是同一件事情的两种不同的表示。机器语言(machine language)是一种指令集的体系,这种指令集,称机器码,是电脑的CPU可直接解读的数据,机器码有时也被称为原生码(Native Code)。

汇编语言只是机器码的文本表示,使得它们更容易使人类可读。每个汇编语言命令由一个称为操作码的数字表示,以方便操作。

编译器

编译器将源代码转换为机器码,逆向过程中最大的挑战之一是编译器倾向于优化代码,使其更有效率,并且性能更好。因此,由两个不同的编译器编译的相同的代码实际上会产生不同的机器码,从而使我的分析工作变得更加困难。

逆向过程

逆向过程通常可以分为至少两种类型:代码级和系统级。

代码级

当我执行代码级逆向过程时,就会尝试从机器码中提取软件的代码概念和算法。这就需要对CPU如何工作,操作系统如何工作以及软件开发过程等方面进行了解。在此过程中,我将使用IDA Pro,SoftIce,Ollydbg等一些工具。

系统级

系统级逆向过程涉及使用运行工具来获取有关软件的信息,检查程序,检查可执行文件以及跟踪程序的输入和输出,大部分信息将来自操作系统。我将使用诸如SysInternals Suite,Tripwire,lsof,Wireshark等工具。

逆向工具

逆向工程工具可以分为几类,包括:

1.系统级工具

这些工具会探测,监视和探索我正在检查的软件。在大多数情况下,安全员会使用操作系统来收集恶意软件的信息。

2.反汇编工具

反汇编工具将使用该软件来生成程序的汇编代码,这样,我就可以在没有看到源代码的情况下检查恶意软件的内部工作了。

3.调试器

我可以使用调试器在程序运行时观察程序,这样我就能够设置断点并跟踪代码。

4.解压器

反编译器会尝试使用可执行文件并以高级语言重新创建源代码,虽然由于编译人员不同而使逆向过程不同,但仍然是逆向工程的一个最有效率的工具。

合法性

逆向工程的合法性一直是有争议的,合法性问题主要围绕逆向工程的社会和经济方面。例如,如果你要逆向微软的Excel,对其功能重新调整,然后重新出售它,这就会被视为非法的。如果你是逆向工程恶意软件来破译其功能和起源,那么这可能被认为是合法的。

版权法和“数字千年版权法案”(DMCA)是与逆向工程有关的重要法规。有些人声称,在逆向工程过程中创建的软件程序的非正式版本,本身就违反了版权法。不过,法院并不这么认为。

另一方面,DMCA保护的是受版权保护的系统不被复制,但这与逆向工程的精神完全是矛盾的,因为逆向工程通常都要涉及这些受版权保护的系统。

但是有一个例外,比如,为了评估或提高计算机系统的安全性。

结论

我希望大家看完本文后,可以了解逆向工程恶意软件过程的基本框架和细节背景。从而更好的踏上逆向工程的光辉大道!

后面的文章,我会深入浅出的向大家介绍各种相关比较深奥的逆向工程细节,请大家留意我的更新。

原文发布时间为:2017年8月16日

本文作者:xiaohui

本文来自合作伙伴嘶吼,了解相关信息可以关注嘶吼网站。

原文链接

时间: 2024-09-15 14:03:57

逆向工程恶意软件入门(基础篇)的相关文章

Java正则表达式入门基础篇(新手必看)_正则表达式

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大家都知道,正则表达式是一种可以

精通数据库系列之入门——基础篇1

是一个实际可运行的存储.维护和应用系统提供数据的软件系统,是存储介质.处理对象和管理系统的集合体.它通常由软件.数据库和数据管理员组成.其软件主要包括操作系统.各种宿主语言,实用程序以及数据库管理系统.数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合.这些数据为多个应用服务,独立于具体的应用程序.数据库由数据库管理系统统一管理,数据的插入.修改和检索均要通过数据库管理系统进行.数据库管理系统是一种系统软件,它的主要功能是维护数据库并有效地访问数据库中任意部分数据.对数据库的维护包括保

精通数据库系列之入门-基础篇3

数据|数据库 行业的现状和展望 近年来,我一直在和数据库管理员打交道,并直接面试了很多DBA职位.本文想概括一下IT行业对DBA的要求,以及国内DBA的新资现状.可以肯定地说,做一个高级DBA是很不错的职业.如果你打算成为一名DBA,那么希望本文起到抛砖引玉的作用. 什么是DBA 数据库管理员,英文是Database Administrator,简称DBA.这个职位对不同的人意味着不同的意义.一个小的软件开发工作室和一个分工高度明细的大公司相比,DBA的职责来得更加宽泛一些.一个公司,不管它是自

精通数据库系列之入门-基础篇1

作者:思索 整理:南海什么是数据库系统? 是一个实际可运行的存储.维护和应用系统提供数据的软件系统,是存储介质.处理对象和管理系统的集合体.它通常由软件.数据库和数据管理员组成.其软件主要包括操作系统.各种宿主语言,实用程序以及数据库管理系统.数据库是依照某种数据模型组织起来并存放二级存储器中的数据集合.这些数据为多个应用服务,独立于具体的应用程序.数据库由数据库管理系统统一管理,数据的插入.修改和检索均要通过数据库管理系统进行.数据库管理系统是一种系统软件,它的主要功能是维护数据库并有效地访问

Java正则表达式入门基础篇(新手必看)

正则表达式是一种可以用于模式匹配和替换的规范,一个正则表达式就是由普通的字符(例如字符a到z)以及特殊字符(元字符)组成的文字模式,它 用以描述在查找文字主体时待匹配的一个或多个字符串.正则表达式作为一个模板,将某个字符模式与所搜索的字符串进行匹配. 众所周知,在程序开发中,难免会遇到需要匹配.查找.替换.判断字符串的情况发生,而这些情况有时又比较复杂,如果用纯编码方式解决,往往会浪费程序员的时间及精力.因此,学习及使用正则表达式,便成了解决这一矛盾的主要手段. 大家都知道,正则表达式是一种可以

Python2.5/2.6实用教程 入门基础篇_python

起步走 复制代码 代码如下: #! /usr/bin/python a=2 b=3 c="test" c=a+b print "execution result: %i"%c 知识点 Python是动态语言,变量不须预先声明. 打印语句采用C风格 字符串和数字 但有趣的是,在javascript里我们会理想当然的将字符串和数字连接,因为是动态语言嘛.但在Python里有点诡异,如下: 复制代码 代码如下: #! /usr/bin/python a=2 b="

php入门基础篇-语法

一.双引号与单引号 变量可以在双引号中执行,但用 define 的常量在两种单.双引号中都是不可执行的:  代码如下 复制代码 $var = 'sofish'; echo 'im $var'; // => 'im $var' echo "im $var"; // => 'im sofish' define('NAME', 'sofish'); echo 'im NAME'; // => 'im NAME' echo 'im ' . NAME; // => 'im

javascript入门教程基础篇_javascript技巧

一. 简介 1. 什么是javascript JavaScript 是网景(Netscape)公司开发的一种基于客户端浏览器.面向(基于)对象.事件驱动式的网页脚本语言. 2. 为什么要使用javascript 表单验证 网页特效 小游戏 Ajax 3.快速入门 在程序中,如果想编写js代码,有两种办法: 1)在html文件中,在一对script标记中,直接编写 <script language='javascript'> document.write('hello'); </scrip

文件系统驱动编程基础篇之1——我们的准备

一.导言 在四个月漫长的征战后,终于在国庆节的今天完成了基础篇系列.本文写作的初衷很简单,就是给平静的池水中加入一点波澜,如果大家在阅读后感受到一点生气,激起探索未知的热情,笔者也会感到由衷的喜悦. 本系列文章为业余编程爱好者而写,仅仅作为初学者的一个借鉴,真正的精华存在于参考资料*中.知识的积累将经历从薄到厚,再从厚到薄的反复过程,为了打下牢固的基础,请读者务必在阅读本文的基础上花费必要的时间完成参考资料. 二.基本架构 为了保证性能,汇编与c成为操作系统编写的首选语言,Windows家族的前