攻防世界 no-strings-attached wp

本文介绍了一种逆向分析的方法,具体步骤包括下载附件并检查壳,使用IDA 32位版本打开无壳文件,分析main函数,定位到关键函数authenticate(),深入研究其内部的加密函数,并最终通过编写Python脚本解析加密过程,成功提取出flag。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

下附件后先查壳在这里插入图片描述
无壳,直接拖进ida32,查看main()函数在这里插入图片描述
通过分析main()函数还是十分简单的。关键函数就是·authenticate()在这里插入图片描述
我们直接双击进入这个函数在这里插入图片描述
发现有个加密函数,先点进去看看
在这里插入图片描述
通过分析可知这个函数主要就是对
在这里插入图片描述
这两个数组进行操作
我们使用python脚本将传入decrypt()的两个参数打印出来:

addr=0x08048AA8   #数组的地址
arr = []
for i in range(39):    #数组的个数
    arr.append(Dword(addr+4* i))
print(arr)

(ps:代码保存的路径必须要没有中文。使用这个代码的时候要把后面的注释删掉)

在这里插入图片描述

然后根据打印出来的数组编写脚本

s = [5178, 5174, 5175, 5179, 5248, 5242, 5233, 5240, 5219, 5222, 5235, 5223, 5218, 5221, 5235, 5216, 5227, 5233, 5240, 5226, 5235, 5232, 5220, 5240, 5230, 5232, 5232, 5220, 5232, 5220, 5230, 5243, 5238, 5240, 5226, 5235, 5243, 5248]
a = [5121, 5122, 5123, 5124, 5125]
v6 = len(s)
v7 = len(a )
v2 = len(s)

v4=0
while v4<v6:
    
    for i in range(0,5):
        if(i<v7 and v4<v6):
            s[v4]-=a[i]
            v4 += 1
        else:
            break
for i in range (38):
    print(chr(s[i]),end="")

得到flag在这里插入图片描述

评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值