• 内嵌补丁练习(一)


    内嵌补丁练习(一)

    0x00 前言

      首先介绍以下运行时压缩或者运行解压文件,这类文件通常是代码在运行之前已经压缩过或者代码被加密过,在运行过程中在进行解压缩或者解密的PE文件。通常这样做的目的可能为了压缩文件体积或者加密代码保护代码安全。下图位运行时解压缩文件和普通压缩文件对比。

      0x01 调试查看代码解密过程

    不载入od运行查看大致的界面过程。

     由上图可知大致可以判断调用了MessgaBox函数。 载入OD查看代码流

    见下图:

     由上图我们可以分析出在401007后面的代码都是加密的,所以401001出的调用应该就是代码的解密函数。我们F7进入该函数。如下图:

     进入之后发现4010F5之后的代码依然加密了。前面有个call 40109b,我们猜测这依然还是一个解密函数,我们还是F7进入函数。如下图:

     可以看到图中有两个循环结构,碰到这种结构可以猜测是否位循环解密或者循环解压结构。我们可以看到mov ebx eax 这句话,把地址4010f5传递给ebx然后ebx进入循环体,这应该就是解密4010f5这一块的代码,长度为44h

    我们移动到4010AF处按F4运行到此处。观察ecx以及ebx的值。当ecx=0ebx=00401249跳出循环(就是解密4010f5——401249这一段代码)。接下来运行至下一个callF7进去。如下图:

    由上图可以知道这也是一个代码解密过程,将起始地址为401007(这是前面所提的加密代码区)的一块大小为7f的代码解密。我们F4跳过。接下来又来到了一块循环区域,如下图:

     上图可知解密代码从地址004010F5开始的大小为154h的区域,其实这是一个二次解密区,仔细看看第一次解密的区域,也是从004010F5开始的,所以这块地址经历了两次加密。跳出这个循环来到下图区域:

     F7进入CALL 401039处得到下图:

     仔细分析此处代码发现这其实是取004010F5后面得到154h代码相加到EDX处,如果值不是31EB8DB0这跳转至错误,这是防止代码代码被篡改的校验和。在地址401083接下下代码跳转至40121e处,如下图:

     这种情况我们先把分析去掉得到原始代码,如下图:

     看到上图几个熟悉的函数没,我们刚刚从校验那里跳转过来,这里应该就是程序的OEP了。至此程序执行过程就明白了。

    程序的流程如下:

    1)EP处连续两次跳转至第一次解密处地址40109B

    2)40109B对起始地址为004010F5 大小为154进行XOR 44解密。

    3)运行到004010BD处开始对401007处大小为7F的区域进行XOR 7解密。

    4)运行至401039 处,开始对004010F5 大小为154的区域进行XOR 11解密,这个是此区域的第二次解密。

    5)运行至401039 对解密后的004010F5 大小位154的代码区域进行校验和计算

    6)运行至401083跳往OEP

    7)OEP开始执行原程序

      0x02 总结

      过程中碰到循环过程就要留意了,仔细观察寄存器的值的变化。还有就是留意利用校验和来判断代码是否被篡改的操作。明天将进行内嵌补丁的练习。

  • 相关阅读:
    【XSY3905】字符串题(lyndon串,构造)
    【XSY3904】直线(分块)
    收藏的数学网址
    Music!
    Codeforces Global Round 12
    Codeforces Round #698 (Div. 2)
    Codeforces Round #727 (Div. 2)
    Croatian Open Competition in Informatics (COCI) 2020/2021 — Round #2
    Tokio Marine & Nichido Fire Insurance Programming Contest 2021 (AtCoder Regular Contest 122)
    NowCoder IOI 周赛 26 [提高组]
  • 原文地址:https://www.cnblogs.com/2f28/p/9940763.html
Copyright © 2020-2023  润新知