zoukankan      html  css  js  c++  java
  • DDCTF

    0x01 题目描述

    题目比较简单,不过这种题感觉比单纯的逆向算法来有意思的多,所以记录一下~

    0x02 脱壳

    先拖到IDA瞅一眼,发现加壳了

    用PEID查一下是什么壳,但是没有查出来。使用Strings看一下有没有什么可参考的信息,发现是UPX 3.91的壳,
    但是在UPX官网上下载的脱壳工具并没有成功脱壳,那么手脱吧。

    UPX的脱壳比较简单,找到pushad 和popad下断点,然后往下跟就好,找到的OEP

    使用OD打开evil.exe,首先可以看到开头的一段在循环调用一个函数,函数内进行了pushad, popad操作

    我们之间跳过这段循环F4跳到循环的下一条指令,然后继续跟进,发现这儿还有个pushad

    之间看后面的代码,发现popad,F4到popad后继续往下跟(也可以在pushad的时候在栈上下硬件访问断点)
    到这个地方已经很明显是程序的入口点了

    右键使用OllyDump将程序dump出来即可,UPX加壳的程序不需要修复IAT就可以直接运行

    0x03 代码分析

    将脱壳后的程序拖入IDA(有些函数名有所修改)

    sub_401370函数的逻辑如下,主要行为为拷贝evil.exe到%temp%下一份,在从资源中释放evil.docx文件到当前目录
    创建一个进程evil.exe "evil.exe",然后打开docx

    delete_exe的功能很简单,就是如果命令行参数个数为2(即之前新创建的进程),则循环删除evil.exe文件

    read_shellcode_from_internet_jpg从http://www.ddctf.com/x.jpg中读取数据。x.jpg即题目中的x.jpg,自建服务器然后将x.jpg放在
    服务器上,修改本地hosts将www.ddctf.com指向自建服务器即可

    之后是两个解码函数,这里可以直接忽略其中的逻辑。
    然后是执行shellcode的函数execute_shellcode,OD动态跟一下看执行的shellcode内容是什么

    使用OD动态跟到执行shellcode的地方,发现一堆push数据的地方,这在shellcode中是一种典型的字符串存储手段,
    执行完push之后,在数据窗口检查栈内存中存储的数据即可看到Key

  • 相关阅读:
    CentOS虚拟机和物理机共享文件夹实现
    集训第六周 数学概念与方法 概率 数论 最大公约数 G题
    集训第六周 数学概念与方法 概率 F题
    集训第六周 E题
    集训第六周 古典概型 期望 D题 Discovering Gold 期望
    集训第六周 古典概型 期望 C题
    集训第六周 数学概念与方法 UVA 11181 条件概率
    集训第六周 数学概念与方法 UVA 11722 几何概型
    DAG模型(矩形嵌套)
    集训第五周 动态规划 K题 背包
  • 原文地址:https://www.cnblogs.com/dliv3/p/6909066.html
Copyright © 2011-2022 走看看