攻防世界——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反编译将text08487C2右键转换为代码08487C2 的c9转换成代码leave 08487C2 的c3转换成代码retn然后再把E8改为90nop选中 08487C1 E8 编辑-补丁程序-补丁字节将E8改成90把修补的程序应到输入文件才能把修改保存到原文件第二个花指令混淆080487F3发现明显的花指令特征jmp 函数名1这个时候080487F3 E8是无意义的右键.text:080487F3 EB FF将他们转换成未定义的数据从而将他们分开同上把它改成0x90右键.text:080487F4这行从这开始转化为代码快捷键C数据被识别成了正确的汇编代码且出现了开始我们看到的字符串“You are very close! Now patch me~”但是flg没有出现第三个花指令混淆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未定义就可以看到flgida把它识别成了代码接下来注意这两行代码这里xor eax eax jz是必定执行的会跳转到loc_804881C1而下面代码是loc_804881C将04048816 E9 改为0x90再把flg转化成字符串快捷键A然后点击.text:0804881D转换为代码这样IDA就会从.text:0804881D开始识别代码下面的代码都变成了正确的可读性更好的汇编代码下面的strncmp比较flg和我们输入的函数正确的话输出“You are very close! Now patch me~”从别人那里拿过来的(嘿嘿)现在离得到flag很近了接着看第四个花指令08048859这里主要看这三个函数看数据段的常量dword_8048A088的值ZF(ZeroFlag零标志位)在test函数里面test的结果1ZF0test eaxeax 只有eax0时ZF1其他不为0时ZF0按ctrlx交叉引用发现这个数据只用了一次main函数里为1eax1这里ZF0下面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_80488511;mov ax, 5EBh后ax5EBh之后xor eax, eax结果eax0置ZF1最后jz short near ptr loc_80488511跳转到loc_8048852一直重复这个过程。就是开始我们在运行程序输入正确的字符串后F1gA看到的程序一直在运行。这里也有一句标红IDA识别异常的代码将0848859 E8改成90现在代码正常了接下来修改这里的跳转将jz换成jmp或者把74换成EB没有Ubuntu系统从大佬那里弄过来的得到flagF8C60EB40BF66919A77C4BD88D45DEF4
本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2615371.html
如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!