龙空技术网

逆向分析基础知识详解(教你如何分析软件)

好笔记 133

前言:

今天小伙伴们对“逆向解析法”可能比较关切,各位老铁们都想要学习一些“逆向解析法”的相关资讯。那么小编在网络上汇集了一些关于“逆向解析法””的相关知识,希望我们能喜欢,咱们快快来了解一下吧!

简单来讲,对软件进行分析并搞清楚其行为的工作就叫做“逆向工程”。逆向是指对软件进行分析,其对象不仅限与恶意软件,因此也不一定和计算机安全相关,譬如:license的绕过、游戏金手指等。都属于通过逆向分析绕过或篡改内部数据达到所需目标。通过本篇的基础知识,可以让大家对《软件破解基础知识详解(手把手教你如何破解软件)》文章更轻松阅读。

1.概述

逆向工程可分为静态分析与动态分析。静态分析是:在不允许目标程序的情况下进行分析。动态分析:在运行目标程序的情况下进行分析。静态分析可用于了解全局信息,动态分析可用于了解局部信息,动静结合效果倍增!

静态分析常用工具包括:winhex(二进制编辑器)、IDA Freeware版(反汇编工具)等。 动态分析常用工具包括:Process Monitor(系统进程监视器)、OllyDbg(动态追踪工具)、Wireshark(数据包分析软件)等。 形形色色各种工具都有,再次不一一介绍。

工欲善其事必先利其器,在具有“趁手武器”后,我们需要对汇编指令有所了解(了解常用关键指令即可),便于通过工具展示出的内容进行分析。没必要一行行仔细阅读,重要的部分花时间仔细理解,其余部分了解大概即可。

2.基础汇编介绍

了解汇编,就必须了解汇编中各个指令代表意思,只有对指令了然于胸后,才能相对轻松地阅读汇编代码,下图为整理的常用汇编指令,可以帮助大家在多数场景下使用。

汇编指令介绍

3.示例分析

本文还是以简单示例切入,方便小伙伴了解逆向原理及工具使用,通过不断的分析,增加逆向分析经验,为下一步深入分析做准备。

我写了一段非常简单C++代码,根据判断2019弹出不同对话框。

C++代码

​​我们可通多cmd来运行指定示例程序,如输入“2018”时,程序提示 “Hello word”。(Win32Project1.exe为示例程序)

Hello word提示框

当我们输入“2019”时,系统会提示“Hello 2019”。​

Hello 2019提示框

以上就是程序的介绍,非常简单!下面我们就来通过动静态两种方式来分析该示例程序!

3.1静态分析

首先可通过IDA进行全局查看,通过对源代码反汇编,可大概了解程序的逻辑代码。通过下图对示例分析,我们可发现关键方法,如:lstrcmp、GetActiveWindow、MessageBox。

lstrcmp:字符串匹配;

GetActiveWindow:当前激活的窗口;

MessageBox:提示框;

通过三个方法我相信你已经基本明白代码逻辑规则是什么了?。​

静态分析

3.2动态分析

通过静态对代码有全局了解后,我们可通过动态分析对示例程序进行局部深入了解,首先1141749位置call调用了lstrcmp方法,1141758位置通过jnz指令进行判断,如果不包含指定匹配字符串将跳转至01141787位置,即hello word的代码段中。详情如下图:​

动态分析

我们通过在1141749位置的lstrcmp设置断点,通过对程序的运行输入“2018”时,再执行至1141758位置的jnz时会跳转至01141787位置,继续执行至011417A5时(弹出框)栈的内容如上图右下角,即“Hello word”提示框。

OD动态分析

当我们输入“2019”时,流程如下图一致,唯一区别是,系统会提示“Hello 2019”。

由此我们完成了对示例该程序的静态与动态分析。后期我们还可以结合Process Monitor、Wireshark等多种分析方法对软件进行逆向分析。​​​​​​​​​​

4.总结

通过简单示例的切入,让大家了解一般逆向分析的工作流程和原理,大多数情况下我们没必要一行行仔细阅读,重要的部分花时间仔细理解,其余部分了解大概即可。本文主要是介绍逆向分析思想,该思想核心在于知识储备+经验,知识的储备可从编程、汇编、操作系统原理等多个方面入手(这也是为什么逆向人员相对少,工资高的主要原因)。经验就来自大家分析过程中的不断尝试、归纳总结。

标签: #逆向解析法