攻防世界逆向高手题之re5-packed-movement
继续开启全栈梦想之逆向之旅~
这题是攻防世界逆向高手题的re5-packed-movement
下载附件,照例扔入exeinfope
中查看信息:
32
位的UPX
壳,直接扔入Kali
中脱壳处理先:
照例先运行一下程序,看一下主要的回显信息:
照例扔入32
位IDA中查看伪代码信息,有main
函数看main
函数,结果没有Main
函数:
.
.
.
现在冷静分析一下,关键代码都在main
函数中,但是都是Mov
指令,这应该是经过某种处理的好像又不是花指令
,因为没有数据和其他移位命令
,查了查资料,下面是博客大灬白
的话:
https://blog.csdn.net/Onlyone_1314/article/details/120928679?spm=1001.2101.3001.6650.3&utm_medium=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link&depth_1-utm_source=distribute.pc_relevant.none-task-blog-2%7Edefault%7ECTRLIST%7Edefault-3.no_search_link
我们可以看到程序的汇编代码全都是mov,肯定是被混淆过了,这里是用了movfuscator来混淆,。
.
剑桥大学的Stephen Dolan证明了x86的mov指令是图灵完全的(论文《mov is Turing-complete》)。这意味着从理论上来讲,x86只要有mov这一条指令就可以完成几乎所有功能了(可能还需要jmp),其他指令都是“多余的”。受此启发,有个大牛做了一个虚拟机加密编译器。它是一个修改版的LCC编译器,输入是C语言代码,输出的obj里面直接包含了虚拟机加密后的代码。如它的名字,函数的所有代码只有mov指令,没有其他任何指令。对,完全没有,连call,jz,ret之类的都没有。
.
开源项目地址:https://github.com/xoreaxeaxeax/movfuscator
.
M/o/Vfuscator(简称“o”,听起来像“mobfuscator”)将程序编译成“mov”指令,并且只编译“mov”指令。算术、比较、跳转、函数调用,以及程序需要的一切,都是通过mov操作完成的;没有自修改代码,没有传输触发的计算,也没有其他形式的非 mov 作弊。
————————————————
版权声明:本文为CSDN博主「大灬白」的原创文章,遵循CC 4.0 BY-SA版权协议,转载请附上原文出处链接及本声明。
原文链接:https://blog.csdn.net/Onlyone_1314/article/details/120928679
这类movfuscator 混淆后的程序,MOV混淆是不会混淆函数的逻辑
的,因此函数的逻辑还是不变的。大多都是通过逐个比较
输入后的字符串的每个字符的方式,比较结果不对就输出“Wrong Flag!”
,所以在程序当中就会出现单个
的字符,例如:
这里也是借鉴了大白的两个方法:
方法1:用IDA的字节搜索序列:
.
.
方法2:用IDA
内嵌的python
脚本匹配符合的字符,这里涉及flag
的字符范围和简单的匹配算法
:
start=0x80487c4
end=0x8060B38
flag=""
while start < end:
if((Byte(start)<=ord('9') and Byte(start)>=ord('0')) or (Byte(start)<=ord('z') and Byte(start)>=ord('a')) or (Byte(start)<=ord('Z') and Byte(start)>=ord('A'))or Byte(start)==ord('!') or Byte(start)==ord('@') or Byte(start)==ord('#') or Byte(start)==ord('{') or Byte(start)==ord('}') or Byte(start)==ord('\'') or Byte(start)==ord('*') or Byte(start)==ord('&') or Byte(start)==ord('_') ): #匹配flag的字符范围和部分特殊字符
if(Byte(start+1)==0 and Byte(start+2)==0 and Byte(start+3)==0):
flag+=chr(Byte(start))
start+=1
print(flag)
去掉2就是flag:ALEXCTF{M0Vfusc4t0r_w0rk5_l1ke_m4g1c}
.
.
.
解毕!敬礼!