【逆向学习】暗号 writeup

本文通过一道国赛题目,探讨了程序调试的重要性及具体方法。通过实际案例演示如何将输入字符转换为数值并进行运算,最终与预设字符串比较,强调了实践验证在程序调试中的关键作用。

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

这是16年国赛的一道题,以前做过一次,现在又重新做一下,做完这题感觉到。。。单纯靠脑子来跑程序真心不可靠,还是copy下再run下观察结果来得实际点

首先看下check函数
这里写图片描述

在WeAretheChangPingPeople这个函数里面,在5555端口监听信息,然后与hhxptgdlffojwztpewc比较

接下来看下NowYouSeeMe这个函数
开头的一大段连接5555端口之类的就不看了,我们来看下主要的部分

这里写图片描述
首先将输入的字符转化为三位十进制数

比如aaa就变成
097097097

然后下面有两个循环,里面那个循环其实就是某种意义上实现一个大数除法

把代码复制下来,跑下看下,我用的是aaa

097097097
003734503
000143634
000005524
000000212
000000008
000000000

其实就是把一个大数除以26,然后把最后三位单独拿出来,余26再加上97,最后拼接起来和hhxptgdlffojwztpewc比较

下面是一个简单的代码,可以把大数给复原

b=0
a='hhxptgdlffojwztpewc'
for i in range(len(a)):
    b*=26
    b+=ord(a[len(a)-i-1])-97
    print(b)

然后前面补个0,再每三位解析成一个字符就可以了

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值