挖坑逆向工程

挖坑的意义在于挖好了可以跳进去再爬出来!

Posted by Elias on June 9, 2019

逆向工程挖坑日记年记

前言

就这么和逆向工程相遇了,在这不算太晚的年纪。

文件格式分析

文件格式分析是逆向工程中特别重要的一步,很多情况下我们得到的文件是未知格式,这时就需要我们去判断这个文件的格式是什么,只有得出这个文件的格式,我们才能按照相应的格式访问标准去访问这个文件(就是把后缀改成这个格式,让计算机知道怎么访问),否则只会看到一大堆乱码。

文件格式分析常用工具

  • PeiD

  • PeStudio

  • Stud_Pe

  • UltraISO

  • uedit32

  • DOSBox

    能够为程序提供dos环境

  • 通常会在虚拟环境下使用,配置一台winXP的虚拟机也是很有必要的!

窗体分析

对一个窗体进行分析,能够找到窗体中隐藏的一些内容。当然,就目前而言,窗体分析这一块经常用来寻找老师给我们出的题目中的隐藏的flag,在其它方面还没有进行尝试,不过就单纯为了过关,窗体分析也是非常有意思了。

窗体分析常用工具

  • ApiMonitor Trial

    目前已挖掘功能:

    能够跟踪当前窗体执行的操作,一些在窗体打开或者单机某一个按钮后会执行的操作就可以被跟踪到,然后分析当前窗体执行了什么内容。(比如在电脑中生成了一个什么文件)

  • ResHacker

    目前已挖掘功能:

    能够直接改掉“进入下一关”的灰色状态,变为可用状态,并且可以把更改后的窗体保存下来,下一次进入关卡的时候可以不用输入前置关卡的flag就直接进入下一关,方便对后续关卡进行调试。(当然,目前使用的功能也仅限于老师给我们出的题目解答)

  • Spy4Win

    目前已挖掘功能:

    Spy4Win在Win10环境下不能打开,因此需要借助虚拟机的帮助,在WinXP环境下亲测可以使用。Spy4Win使用起来非常舒适,一顿点点点就可以找到自己想要的东西,不需要敲入什么代码。

网络流量监控

通过监测网络流量,截取异常数据包,对数据包进行分析、拆解,就可以得到我们想要的信息。通过分析我们可以看到数据包传递的内容,甚至是将传送的文件通过文件分析逆向出来。

网络流量监控常用工具

  • Wireshark

    这个工具可以选择具体的端口进行监控,排除了无关端口网络信息的干扰,监控效率更高,这也是网络流量监控中经常用到的一个工具。

    目前已挖掘功能:

    在查询到自己希望查询的数据包后,可以进行TCP流追踪,得到相应的信息。

  • OllyICE_1.10

  • ida

  • 010Editor

文件逆向分析/算法分析

一个可执行程序对于我们来说是一个黑盒,我们只知道输入与输出,其中经历了怎样的过程我们并不清楚,也就是说其中的逻辑、行为对我们来说是透明的,这就导致我们无法判断这个可执行程序是否是安全的,如果一定要通过启动程序来判断这个程序的安全性,那这个风险与代价也太高了些。这个时候我们可以通过文件的逆向算法分析,在不启动这个程序的前提下推断出这个程序的功能,从而达到降低风险的目的。

文件逆向分析/算法分析常用工具

  • OllyDBG

    可以看到汇编形式下的程序,通过对汇编语言的分析,能够看出该程序的逻辑,以及该程序会执行怎样的步骤。

    目前已挖掘功能:

    在做找flag的关卡题时,通过OllyDBG查看汇编代码,通过逐步调试了解程序工作逻辑,从而找出判断flag是否相等的汇编代码,找到用于判断的值,那个值即为所找的flag

  • PEID0.94

    可以快速查看该文件的信息

  • PYG_TOOLS_VER5

    这是一个密码学综合工具,可以对相关信息进行加密,也可以解密,如果通过PEID发现一个程序的信息可能被加密时,可以通过该工具进行逆向解密。

加壳与脱壳

为了保护程序本身,因此在整个程序之前加入一段完整代码,这段代码可以称之为“壳”,程序运行时,会先运行“壳”,然后在运行真正的程序,这个程序就完全在“壳”中运行,这样就防止了程序本身被观察到。在有壳的情况下,我们很难看清程序的工作逻辑或工作方式,因此我们要学会怎样对程序进行脱壳,观察脱壳后的程序就与我们之前所做的工作一样了。

脱壳常用的工具

  • PEiD

    通过PEiD对程序进行分析,若发现不能分析出程序的相关信息,则可以考虑该程序被加壳了,通过deep scan 也许能找到加壳前的程序信息,并以这个线索进行脱壳。

  • OllyDBG

    通过OllyDBG在汇编代码中观察程序的运行状况,可以实现手动脱壳。为了完成这一点,必须要找到壳与程序的临界处,然后在该点进行脱壳调试,得到一个新的没有壳的程序。(当然,脱壳过程中可能会有脱壳不完整的现象,但这不影响脱壳后的程序的性能)

  • upx

    这是一个需要用cmd打开的工具,在-d工作模式下,将希望脱壳的程序拖入cmd(即输入该脱壳程序的路径),完成全自动一键酷炫脱壳,当然,不一定能够脱壳成功,关键在于壳是什么属性的。

  • linxerUnpacker

    这是一个拥有壳特征库的脱壳软件,只要是在壳特征库中能够找到的壳,都可以对加了该壳的程序进行脱壳,壳特征库也可以自己手动加入新的壳特征,然后不断完善自己的壳特征库。对于未知壳,也可以通过粘贴PE头等方式进行脱壳尝试,当然,不一定能够成功。不过这个软件也十分强大了。