DDCTF - evil 一个伪装成docx的exe
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
最新文章
- vim 用法
- Final-阶段站立会议6
- rabbitmq qos prefetch count的设置与作用
- 使用LIBSVM工具实现样本分类预测——MatLab
- Parcelable和Serializable的区别
- paip.快捷方式分组管理最佳实践ObjectDock
- 1.2 XmlBeanFactory的实例化
- 转:[译]Autoprefixer:一个以最好的方式处理浏览器前缀的后处理程序
- 实现字符串匹配的KMP算法
- wordpress教程之自带缩略图功能
- qq邮箱是怎么做到同一个浏览器让多个不用用户同时打开的? --session的控制
- github从上传代码到发布静态网站
- PL/SQL 游标 (实验七)
- 一款PHP环境整合工具—VertrigoServ介绍
- 并发concurrent---1
- 2017-11-4—模拟PID电路(参考ADN8834datasheet)
- Python3+mitmproxy安装使用教程(Windows)
- 只知道ajax?你已经out了
- 利用朴素贝叶斯分类算法对搜狐新闻进行分类(python)
- Windows安装python3.x后,pip list警告!DEPRECATION: The default format will switch to columns in the future.
热门文章
- Ubuntu 添加中文字体
- Ubuntu下使用Git_1
- 第十六篇 Python之迭代器与生成器
- Python 套接字的使用 (1)
- Java IO学习--输入输出流
- [Linux] umount目录提示device is busy的解决方法
- PAT——乙级1022:D进制的A+B &;乙级1037:在霍格沃茨找零钱
- [C/C++] new/delete和malloc/free基本区别
- HDU 4582 DFS spanning tree(DFS+贪心)(2013ACM-ICPC杭州赛区全国邀请赛)
- android-ViewList的通用ViewHold