[看雪CTF]2019晋级赛Q1第一题流浪者

一直在忙,晚上抽空打开题目,看到大佬们300多秒就解出来了,我只能写个详细点的wp来混存在感了。

首先查壳,VC程序,没壳

直接导入IDA定位到关键算法部分

通过F5可以看到伪C代码,主要讲的是我们输入的假码如果在0-9之间,就把对应的ASCII减0x30,假码如果在a-z之间,就把对应的ASCII减0x57,假码如果在A-Z之间,就把对应的ASCII减0x1D

大佬看到这里就可以关掉IDA开始写脚本了,但是我还是决定用OD来找找捷径

首先载入OD定位到关键点

 

004018B5处的GetWindowsTextA函数获取输入

00401908这里就开始进行算法变换

 

 

出了大循环之后,004019C3这里是关键比较CALL

进CALL看看

我们看到了字符串比较函数,我们在字符串比较函数下个CC断点,然后我们就可以通过穷举字母和数字来手动建立密码的对应关系

我们先观察和假码比较的那个字符串KanXueCTF2019JustForhappy

这个字符串包含了字母大写小写和数字

接下来就可以缩小举例的范围(排除某些符号)

0123456789对应abcdefghiAa

abcdefghijklmnopqrstuvwxyz对应BCDEFGHIJKLMNjklmn01234567

ABCDEFGHIJKLMNOPQRSTUVWXYZ对应89opqrstuvwxyzOPQRSTUVWXYZ

最后得出关系表

abcdefghiAa对应0123456789

BCDEFGHIJKLMNjklmn01234567对应abcdefghijklmnopqrstuvwxyz

89opqrstuvwxyzOPQRSTUVWXYZ对应ABCDEFGHIJKLMNOPQRSTUVWXYZ

通过手动计算可以得出:

KanXueCTF2019JustForhappy对应j0rXI4bTeustBiIGHeCF70DDM

 

通过验证,flag正确

table = "abcdefghiABCDEFGHIJKLMNjklmn0123456789opqrstuvwxyzOPQRSTUVWXYZ"
s = "KanXueCTF2019JustForhappy"
ff = []
for i in s:
    ff.append(table.index(i))
 
flag = ""
for i in ff:
    if 0 <= i <= 9:
        flag += chr(i + 48)
    elif 9 < i <= 35:
        flag += chr(i + 87)
    elif i > 36:
        flag += chr(i + 29)
 
print flag

 

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

xuenixiang

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值