DDCTF - evil 一个伪装成docx的exe

0x01 题目描述

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

0x02 脱壳

先拖到IDA瞅一眼,发现加壳了
903673-20170526160025325-705473586.png

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

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

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

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

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

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

0x03 代码分析

将脱壳后的程序拖入IDA(有些函数名有所修改)
903673-20170526160133638-363302418.png

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

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

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

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

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

转载于:https://www.cnblogs.com/dliv3/p/6909066.html

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值