南邮平台逆向

本文介绍了几个逆向工程的案例,包括WxtVM1的虚拟机解密,maze问题的迷宫路径寻找,WxyVM2的花指令清除,single的数独解谜,以及480小时精通C++的加密函数逆向。通过这些实例展示了逆向工程师如何分析代码,找出解密或解决问题的策略。
摘要由CSDN通过智能技术生成

前面几题太基础就不写了。

WxtVM1

IDA打开直接查看主函数,可以看到flag的长度为24,经过一个函数调用后,与密文进行对比。

那么关键点就是sub_4005B6函数了,内部是这样的,

这个流程说明它是个虚拟机,字节码存在byte_6010C0中,一共有15000个字节,3个字节为一条指令,第1个字节决定操作符,第2个字节决定flag的偏移,第3个字节作为值与flag对应偏移的字节进行运算,不过这个虚拟机并不是汇编级别的,且流程不复杂,所有运算可逆,所以可以直接当作加密函数逆向,写出解密函数即可,然后把密文解密即可得到flag,脚本如下,

f = open('WxyVM1', 'rb')

f_conten = f.read()

tmp = f_conten[0x1060:0x1060+24*4]

m_data = f_conten[0x10c0:0x10c0+15000]

tmp = list(tmp)

m_data = list(m_data)

box = []



for i in range(0, len(tmp), 4):

num = 0

for j in range(4):

num += tmp[i+j] << j*8

box.append(num)



i = 14997

while i >= 0:

v0 = m_data[i]

v3 = m_data[i+2]

result = v0

if v0 == 1:

result = m_data[i+1]

box[result] -= v3

elif v0 == 2:

result = m_data[i+1]

bo
  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值