vm虚拟机-简单题目(hgame-week4-easyvm、cg-ctf wxyVM1/2

vm

比较经典的虚拟机的题目是南邮的cg-ctf的题目,
然后先写了前面的cg-ctf的两个题目,其实当时做的时候还没太大虚拟机的感觉,后面接触到hgame的题目,然后再看的时候就感觉到有些那个意思,但是两个题目是基础题目也就不是太难为人,看成数据处理的考点也做的出来,
后面那个hagem的题目中间有一个栈的结构,也是比较有感觉的虚拟机题目了
另外hgame已经结束:https://hgame.vidar.club/#/user/login?return=Challenge-List
cg-ctf: https://cgctf.nuptsast.com/challenges#Re
题目文件:
链接: https://pan.baidu.com/s/1iizvnWWcDncj8uGVNmsmNA 密码: 1vle

cg-ctf WxyVM1

WxyVM

我们的flag,先是经过一个函数的加密,然后判定了下长度为24,之后和一个数组比较,而且这是一个已知的数组。

我们看到了大量的数据处理过程,通过寻址找到一个大数组的其中的位数,然后其中的连续三位拿出,一个指示运算方式,一个指示操作的flag的哪一位,一个作为运算数,

我们首先看看指示运算方式的数,直接使用ida-python脚本直接调用那个大数组即可

addr = 0x6010c0
arr = []
for i in range(0,15000,3):
    arr.append(Byte(addr + i))
print(arr)
print(1 in arr)
print(2 in arr)
print(3 in arr)
print(4 in arr)
print(5 in arr)

我们知道了只会存在前三种运算,即加减异或,这都是很好逆的算法。

我们查看第二个值,指向flag的位数的,可以知道会出现很多重复的,我们只能逆着写这个算法,然后逆向得到flag,这时候就需要注意,我们的i,从0开始,到<15000,每次增3,不会取到15000,i取到的最大为14997,我们的脚本也应该是14997开始,每次增量-3,但是注意python的前包后不包,我们想最后取到0,就要写为结束在-1,

我们还需要注意的是数据溢出的处理,最开始可能数据大一些,但是到后期数据会变得很小,然后我们在计算完成以后再使用x & 0xff来空值数据溢出。

得到:

arr = [4294967236, 52, 34, 4294967217, 4294967251, 17, 4294967191, 7, 4294967259, 55, 4294967236, 6, 29, 4294967292, 91, 4294967277, 4294967192, 4294967263, 4294967188, 4294967256, 4294967219, 4294967172, 4294967244, 8]
addr =
  • 2
    点赞
  • 4
    收藏
    觉得还不错? 一键收藏
  • 3
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论 3
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值