当前位置: 首页 > news >正文

攻防世界——echo-server(花指令)

查壳 elf Ubuntu系统写的,用kali运行会报错

找到主函数,双击进入loc_80487C1

不是很懂,看了大佬的说是花指令

常见的花指令机器码
9A,E8,E9,EB 把垃圾数据用nop(0x90h)填充

切换到汇编试图

将loc_80487C1右键转换成未定义的数据

对loc_80487C4进行c重新汇编,这时是main函数变成loc_80487C4了

loc_80487c1-c3的汇编代码,ida把它识别到sub_804875D函数结尾处,设计该函数的sp堆栈平衡

08487C1 E8 根据上面常见的花指令可知它就是插入的花指令,用来混淆ida反编译,将text:08487C2右键转换为代码

08487C2 的c9转换成代码leave 08487C2 的c3转换成代码retn

然后再把E8改为90(nop)

选中 08487C1 E8 ,编辑->补丁程序->补丁字节

将E8改成90

把修补的程序应到输入文件,才能把修改保存到原文件

第二个花指令混淆080487F3

发现明显的花指令特征(jmp 函数名+1),这个时候080487F3 E8是无意义的

右键.text:080487F3 EB FF,将他们转换成未定义的数据从而将他们分开:

同上把它改成0x90

右键.text:080487F4这行,从这开始转化为代码(快捷键C)

数据被识别成了正确的汇编代码,且出现了开始我们看到的字符串“You are very close! Now patch me~”,

但是fl@g没有出现

第三个花指令混淆08048816:

看汇编区域这两个标红的代码

.text:08048816 E9 46 31 40 67 jmp near ptr 6F44B961h;
.text:08048859 E8 C7 04 24 01 call near ptr 9288D25h;
其实是IDA自动识别异常的代码,将它转换成未定义的数据

按U未定义就可以看到fl@g,ida把它识别成了代码

接下来注意这两行代码,这里xor eax eax ,jz是必定执行的,会跳转到loc_804881C+1

而下面代码是loc_804881C

将04048816 E9 改为0x90,再把fl@g转化成字符串(快捷键A)

然后点击.text:0804881D转换为代码:

这样IDA就会从.text:0804881D开始识别代码,下面的代码都变成了正确的可读性更好的汇编代码

下面的strncmp比较fl@g和我们输入的函数,正确的话输出“You are very close! Now patch me~”

从别人那里拿过来的(嘿嘿):

现在离得到flag很近了,接着看第四个花指令08048859

这里主要看这三个函数:看数据段的常量dword_8048A088的值,ZF(ZeroFlag零标志位)

在test函数里面test的结果=1,ZF=0(test eax,eax 只有eax=0时ZF=1,其他不为0时ZF=0)

按ctrl+x交叉引用发现这个数据只用了一次

main函数里为1,eax=1这里ZF=0,下面jz short loc_8048866函数不执行

接着看loc_8048851后面的汇编

这三个代码有问题:

.text:08048851 loc_8048851:
.text:08048851 ; CODE XREF: .text:08048857↓j
.text:08048851 66 B8 EB 05 mov ax, 5EBh
.text:08048855 31 C0 xor eax, eax; Logical Exclusive OR
.text:08048857 74 F9 jz short near ptr loc_8048851+1;


mov ax, 5EBh后ax=5EBh,之后xor eax, eax结果eax=0置ZF=1,最后jz short near ptr loc_8048851+1跳转到loc_8048852,一直重复这个过程。
就是开始我们在运行程序输入正确的字符串后"F1@gA"看到的程序一直在运行。
这里也有一句标红IDA识别异常的代码:

将0848859 E8改成90

现在代码正常了,接下来修改这里的跳转

将jz换成jmp或者把74换成EB

没有Ubuntu系统,从大佬那里弄过来的:

得到flag:F8C60EB40BF66919A77C4BD88D45DEF4

http://www.jsqmd.com/news/822621/

相关文章:

  • AI问答代运营服务哪家好?避开这些坑很重要 - FaiscoJeff
  • 在Ubuntu 20.04上编译BetaFlight 4.4.0固件,给AOCODARC-F7MINI飞控刷机的保姆级教程
  • 自建个人知识管理系统Memex:从数据捕获到知识图谱的实践
  • 实测北京钻石回收:专业鉴定 + 当场打款,本地 30 年合规机构更靠谱 - 奢侈品回收测评
  • 2026年北京软文投放公司推荐|专业品牌营销首选 - 速递信息
  • error while updating dependencies: node_modules包资源权限报错 缓存包构建
  • Dify 本地部署实战:Plugin Daemon 401/500 错误深度排查与解决
  • Lightweight Charts:高性能金融图表库的终极架构解析
  • C++学习日记1(`*`的理解、const关键词)
  • 避坑指南:ESP32 ADC采样时这些操作会让数据‘丢帧’(WiFi冲突、看门狗、串口打印)
  • 3分钟学会盲水印:用Python保护你的图片版权不被盗用
  • 单细胞分析实战:用scVI和scANVI搞定多批次数据整合(附完整Python代码)
  • 10大AI推广公司盘点:装修公司DeepSeek获客策略 - 品牌2025
  • 解放AutoCAD数据:用ACadSharp在.NET中实现CAD文件自由读写
  • 3个核心技巧:彻底解决Chrome自动化测试的版本管理难题
  • 2026雅思哥外教课适合5.5分考生吗?零基础到高分适配建议 - 品牌2025
  • 如何用3个步骤彻底解决UE5项目版本控制难题:gitignore配置终极实战指南
  • 如何用DouyinLiveWebFetcher三步实现抖音直播弹幕实时采集?终极免费工具使用指南
  • 终极指南:3分钟学会用Python免费备份QQ空间全部历史说说
  • Dumate安装技能superpowers-zh
  • 为什么92%的团队误判DeepSeek-R1成本?——从CUDA内存碎片率、KV Cache压缩率到Tokenizer延迟的全链路抠钱指南
  • MongoDB运行dataSize()方法报“Invalid UTF-8 string in BSON document”
  • 福建省汉舍智能家居:源头工厂级卫浴融合店实力全景 - 奔跑123
  • GitHub星标6.6k+的WindTerm,除了快还有这些隐藏技巧:自动补全、锁屏密码重置、主题切换
  • 告别死记硬背!用Python脚本+Canoe实战模拟UDS $10会话控制,5分钟搞定诊断仪基础操作
  • 3分钟快速上手:如何使用DeepFont识别图片中的字体类型
  • 3分钟解锁B站评论区的“读心术“:揭秘用户真实身份的完整指南
  • 【逆向实战/技术拆解】Unity手游资源提取与核心文件解密全流程剖析(从AssetBundle到libil2cpp.so)
  • NVIDIA Profile Inspector完全指南:解锁显卡隐藏设置的终极教程
  • 2026年广州冷库安装工厂推荐榜:医药、食品、蔬果冷库专业安装之选! - 速递信息