攻防世界 echo-server writeup

一. 知识点

(1)花指令

0x01 概念
花指令是,由设计者特别构思,希望使反汇编的时候出错,让破解者无法清楚正确地反汇编程序的内容,迷失方向。经典的是,目标位置是另一条指令的中间,这样在反汇编的时候便会出现混乱。花指令有可能利用各种指令:jmp, call, ret的一些堆栈技巧,位置运算,等等。

0x02 常见花指令
在这里插入图片描述

0x03 如何去除花指令
第一步:

  • 识别哪些是有用的数据,哪些是垃圾数据。

第二步:

  • 把垃圾数据用nop(0x90h)填充。

(2)IDA出现"sp-analysis failed"

IDA官网解释:
在这里插入图片描述

大意是ida检测到,IDA有栈跟踪的功能,它在函数内部遇到ret(retn)指令时会做判断:栈指针的值在函数的开头/结尾是否一致,如果不一致就会在函数的结尾标注"sp-analysis failed" 。一般编程中,不同的函数调用约定(如stdcall&_cdcel call)可能会出现这种情况;另外,为了实现代码保护而加入代码混淆(特指用push/push+ret实现函数调用)技术也会出现这种情况。

二. 解题步骤

(1)拖进IDA反编译,查看伪代码,可以看到这里的函数调用很奇怪

在这里插入图片描述

(2)跟去这个函数,发现汇编代码很乱,有花指令插入
程序本应该跳转到loc_80487C1+3处,但这里并没有显示出来,由此判断程序被混淆,混入了花指令,需要去除花指令。

在这里插入图片描述

(3)将汇编代码转换成数据,发现0x80487C1处的字节是0xE8.

在这里插入图片描述

(4)使用IDA把它patch为0x90,转换为代码,汇编代码显示正常

在这里插入图片描述

(5)在上图中可以看到,0x080487F3处汇编代码也存在花指令,转换成数据后出现0xEB,也常被用于混淆

在这里插入图片描述

(6)将0xEBpatch为0x90,汇编代码恢复为nop,但下方又出现一出标红。但是标红代码的上两行代码是无条件跳转指令,所以没有影响。

在这里插入图片描述

(7)继续向下运行,eax被赋值为5,然后跳进loc_80488A3,进去后发现每次eax会减一,因此这是个循环,读输入的前5个字符

在这里插入图片描述

(8)回去将下面的标红代码改为nop,发现如果0x0804884F行不执行,函数就会陷入死循环。
xor eax, eax的结果一直为0,jz结果为0时跳转

在这里插入图片描述

(9)eax的值是根据dword_804A088的值来决定,按x查看交叉引用,看下dword_804A088这个地址的值是哪来的

在这里插入图片描述

(10)只有一个地方,跟过去看下,发现dword_804A088这个地址的值是在main函数中硬编码的1

在这里插入图片描述

(11)由此可知eax的值为1,需要把jz指令patch为jmp
test逻辑与运算结果为零,就把ZF(零标志)置1;
test eax,eax
当eax=0时,置z标志位为1,jz 跳转,jnz 不跳转
当eax=1时,置z标志位为0,jz 不跳转,jnz 跳转

在这里插入图片描述

(12)F5生成伪代码,可以看出就是比较输入的字符串的前五个字符与loc_8048816+1处是否相同

在这里插入图片描述

(13)回去发现是我们第(6)步没有管的花指令,按D转化成数据,发现是在代码段里存了一段数据。这里不要直接改机器码,改了之后会发现找不到字符串地址。

在这里插入图片描述

(14)点击编辑->修补文件->修补程序应用到输入文件,一定要保存!!!不然前面白干了。然后运行程序,输入字符串“F1@gA”,得到flag。

在这里插入图片描述

(15)运行报错解决
如果报错 libcrypto.so.1.0.0: cannot open shared object file: No such file or directory 是因为没有 libcrypto.so.1.0.0,我的系统有 64 位 libcrypto.so.1.0.0 但是没有 32 位的,因此需要安装 32 位的共享库。libssl 中带了 libcrypto。
命令行输入下面的指令即可
sudo apt-get install libssl1.0.0:i386
不过有的虚拟机可以,有的不行。我在kali输完还是不能运行,搞了一个多小时,试了网上各种方法都没用,换了个乌班图虚拟机这样就行了。有懂的童鞋可以告诉一下我。

  • 2
    点赞
  • 1
    收藏
    觉得还不错? 一键收藏
  • 3
    评论
攻防世界Shuffle是一个在攻防世界平台上的题目,属于Reverse(逆向工程)类别的进阶区的题目。该题目的具体来源是SECCON-CTF-2014比赛。题目要求参与者找到一个字符串在随机化之前的顺序。关于该题目的详细解法可以在提供的博客链接中找到。<span class="em">1</span><span class="em">2</span><span class="em">3</span> #### 引用[.reference_title] - *1* [攻防世界 Shuffle](https://blog.csdn.net/afanzcf/article/details/119462993)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *2* [攻防世界Wire1杂项](https://download.csdn.net/download/m0_59188912/87097386)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] - *3* [攻防世界Reverse进阶区-Shuffle-writeup](https://blog.csdn.net/qq_35056292/article/details/108676766)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v93^chatsearchT3_2"}}] [.reference_item style="max-width: 33.333333333333336%"] [ .reference_list ]

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值