Hello movfuscator!

MOV is Turing-complete! ___Stephen Dolan
因为最近遇到的mov坑比较多。。。
来学习一下吧。。。
首先我们来看一个“聪明绝顶”的人的视频
1
在此感谢一下油管自带的英语字幕
//这语速比iot rt视频的快了不知道多少

Just mov it

2
看着一段汇编
其实很简单就是把值从0,100打出来
再看看他被混淆后的样子
3
还看得懂吗。。。。。。
戳这
po个链接
mov is Turing-complete
上面为原作者文章

mov in ctf

题目目前遇到了俩道。。。
一开始在网上找到了反混淆工具但是因为装起来太。。。难了
就选择放弃
后来发现貌似可以用pin来写
那就试一下吧

susctf mov

这边套用一下夜影师傅的脚本~
据我目前所知的,这个pin就是检测运行代码的数量
根据数量的变化来爆破flag
比如你输入一个正确的值他会进行检查执行代码数目假设为x,但你输入错误的检查的代码可能会减少或增加可能为y
正常来说只要是输入错误,代码数量都是y,除非正确代码数量为x
那么就可以一个个试当代码数量大于等于|x-y|时,那就说明输入正确了
但这个限制挺多的
比如说,程序要对输入逐个检查,才能生效
这对VM题型很有用
下面上代码
其实我本来像修改下脚本的防止无脑盗用
后来一想
为啥不直接给文章加密呢???
果断加密

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
#!/usr/bin/env python
#-*- coding:utf-8 -*-
import popen2,string

INFILE = "test"
CMD = "~/Desktop/pin-3.7/pin -t ~/Desktop/pin-3.7/source/tools/ManualExamples/obj-ia32/inscount1.so -- ~/Desktop/mov <" + INFILE
choices = " ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789!#$%&'()*+,-./:;<=>?@[\]^_`{|}~"#自定义爆破字典顺序,将数字和小写字母提前可以使得速度快一些~

def execlCommand(command):
global f
fin,fout = popen2.popen2(command)
result1 = fin.readline()#获取程序自带打印信息,wrong或者correct
print result1
#if('Good flag' in result1):#输出Correct时终止循环
# f = 0
#这边注释掉是因为程序有个bug
result2 = fin.readline()#等待子进程结束,结果输出完成
fin.close()



def writefile(data):
fi = open(INFILE,'w')
fi.write(data)
fi.close()

flag = ''
f = 1
while(f):
l = 0#初始化计数器
for i in choices:
key = flag + i#测试字符串
print ">",key
writefile(key)
execlCommand(CMD)
fi = open('./inscount.out', 'r')
while(1):
try:
n = int(fi.read().split(' ')[1], 10)
break
except IndexError:
continue
fi.close()
print n
if(l-n > 20 and l):#如果两次运行指令差别过大,说明字符正确
flag += i
print flag
break
else:
l = n
print flag
#FLAG{M0VFuscAtoR_15_ann0ying}

跑一下出答案
//2019/3/10/0:49
明日继续

文章目录
  1. 1. Just mov it
  2. 2. mov in ctf
  3. 3. susctf mov
|