实例程序
tips:将尾缀txt改成exe
这是一个CTF的逆向题,考点为:1.64位upx手工脱壳。2.魔改XTEA。
首先用EXEINFO查看一下程序的基本信息:

Win64程序,加了upx壳。
尝试运行一下:

运行可以看到提示输入flag的字符串。
基本信息收集完,下面开始解题:
1.UPX脱壳:
使用命令
upx -d
对程序进行脱壳,发现脱壳失败了。
这里有两种解决方案。
- 方案一:(使用文件查看工具打开看段)

这里是将UPX修改成了uPX,将其修改回来,重新upx -d就可以看到脱壳成功了。

- 方案二:(手动脱壳)
用x64dbg打开文件,然后停到EP处

我们可以利用rsp定律,对程序下断点找到pop处的地址,这里我没有使用下断点的方式来定位,直接往下翻就可以找到了。

这里的经过一系列的弹栈操作之后jmp跳转到了一个较远的代码处,jmp的地址就是OEP所在的位置,下个断点直接跟过去。下面就是程序的OEP了。

使用x64dbg自带的scylla插件,对解压好的程序进行dump。

将程序保存完后:

点击第一步插件会自动搜索IAT,如果显示下图就代表找到了程序的IAT表

然后直接点击获取导入就会在上面显示找到的导入表

这里可以看到有一个表没有导出成功,一开始我是直接点击修复转储将这四个表都导入到了dump下来的程序里面,程序虽然不能运行但是不影响IDA调试,但是后面听别的师傅直接删除这个导出失败的表,就可以正常运行了

修复完后可以看到文件夹下多了两个程序,第二个是导出但没有修复IAT的程序,第三个是基于导出的源程序修复好了IAT。双击是可以直接运行的。
2.IDA静态分析:
根据提示可知这个程序使用的是TEA系列的加密算法,用IDA打开可以直接查看,先对主函数进行分析。
接着是加密函数的分析,下面主要列出魔改的地方。
程序的逻辑分析完毕,接着写EXP。
3.EXP编写:
运行得出flag:

flag{0d2988297bd8c5a08f10b1bb00a602fc}
验证flag:
