• 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

  • 相关阅读:
    (转载)关于一些对location认识的误区
    Python内置数据结构--列表
    Maven
    Python基础语法
    安装ipython和jupyter
    Python环境安装
    Java多线程
    SpringMVC集成springfox-swagger2自动生成接口文档
    SpringMVC拦截器
    SpringMVC异常处理器
  • 原文地址:https://www.cnblogs.com/dliv3/p/6909066.html
Copyright © 2020-2023  润新知