最近太难了 好多比赛 打比赛 看题解啥的 都没有时间写博客了
然后 也在看0day安全那本书
这个是一个老哥给我发的一个题目
他和我说 在做一道题 然后是vmp的 然后我就来试一试
先打开ida 看一下
然后 看一下 vmp保护壳的内容
然后 发现确实是vmp 然后找了几个插件 发现这个插件是可以用的
https://bbs.pediy.com/thread-154621.htm
看雪的巨巨。。。。tql 具体指令还有 操作可以看 帖子的内容
这里是到 关键函数 右键->分析虚拟机->分析虚拟程序
然后到 vmp插件的那个窗口 然后右键->查看->所有指令 然后 右键->查看 ->最终操作
发现了这样的情况
可以看的出 还是很有效果的
然后我们就可以直接对着逆了 其中我们的字符是限制了16位 然后发现这里是 m1 -m16 就是根据 ecx 里面取值 可以推测 就是我们输入的字符
那么 指令就是 (x+x<<2)<<1 ==(x+x*4)*2->10x
也就是说 是每四个字符 合成一个四位数 然后 进行比较
这里直接用z3库解
#!/usr/bin/env python3
import re
from z3 import *
if __name__ =="__main__":
s = Solver()
l = [Int('l%d'%i) for i in range(4)]
for i in l:
s.add(0<i)
s.add(i<=9999)
s.add(l[0]*5+l[1]*4+l[2]*3+l[3]*2==0x130D9)
s.add(l[0]*4+l[1]*2+l[2]*6+l[3]*3==0x10aef)
s.add(l[0]*3+l[1]+l[2]*7+l[3]*5==0x11a6b)
s.add(l[0]*2+l[1]*3+l[2]*5+l[3]==0xbb80)
if s.check() ==sat:
m = s.model()
for i in range(0,4):
print((int("%s" % (m[l[i]]))),end='')
else:
print("error")
总结 :
这个vmp 应该是比较老的一款 而且这个题目出的也不算难
所以这个题目还是相对简单些的,,,,,,。