实例程序
tips:将尾缀txt改成exe
这是一个CTF的逆向题,考点为:1.64位upx手工脱壳。2.魔改XTEA。
首先用EXEINFO查看一下程序的基本信息:
notion image
Win64程序,加了upx壳。
尝试运行一下:
notion image
运行可以看到提示输入flag的字符串。
基本信息收集完,下面开始解题:

1.UPX脱壳:

使用命令upx -d对程序进行脱壳,发现脱壳失败了。
notion image
这里有两种解决方案。
  1. 方案一:(使用文件查看工具打开看段)
    1. notion image
      这里是将UPX修改成了uPX,将其修改回来,重新upx -d就可以看到脱壳成功了。
      notion image
  1. 方案二:(手动脱壳)
    1. 用x64dbg打开文件,然后停到EP处
      notion image
      我们可以利用rsp定律,对程序下断点找到pop处的地址,这里我没有使用下断点的方式来定位,直接往下翻就可以找到了。
      notion image
      这里的经过一系列的弹栈操作之后jmp跳转到了一个较远的代码处,jmp的地址就是OEP所在的位置,下个断点直接跟过去。下面就是程序的OEP了。
      notion image
      使用x64dbg自带的scylla插件,对解压好的程序进行dump。
      notion image
      将程序保存完后:
      notion image
      点击第一步插件会自动搜索IAT,如果显示下图就代表找到了程序的IAT表
      notion image
      然后直接点击获取导入就会在上面显示找到的导入表
      notion image
      这里可以看到有一个表没有导出成功,一开始我是直接点击修复转储将这四个表都导入到了dump下来的程序里面,程序虽然不能运行但是不影响IDA调试,但是后面听别的师傅直接删除这个导出失败的表,就可以正常运行了
      notion image
      修复完后可以看到文件夹下多了两个程序,第二个是导出但没有修复IAT的程序,第三个是基于导出的源程序修复好了IAT。双击是可以直接运行的。

2.IDA静态分析:

根据提示可知这个程序使用的是TEA系列的加密算法,用IDA打开可以直接查看,先对主函数进行分析。
接着是加密函数的分析,下面主要列出魔改的地方。
程序的逻辑分析完毕,接着写EXP。

3.EXP编写:

运行得出flag:
notion image
flag{0d2988297bd8c5a08f10b1bb00a602fc}
验证flag:
notion image