吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 7259|回复: 49
收起左侧

[原创] 【2021春节】逆向高级题 -- 出题人出来挨打了

  [复制链接]
Processor 发表于 2021-2-28 09:47

前言

首先各位师傅们节日快乐。

很高兴能参与到这次活动中。
随便说一下题目的初衷吧。这次题目重点放在了题目的趣味性,也是曾经在某次比赛上受到的启发。个人觉得作为一个二进制选手,调试能力和猜解能力算是基本功了。也可能题目过于CTF化,导致很多师傅对着没有附件只有一行nc的逆向题无从下手。

可能有些师傅是在题目给出hint之后爆破得到flag,但我觉得大可不必。

题目

题目环境是docker + xinetd,限制了IP的最大链接数为10.

已经有师傅写过题目分析了,这里就再多啰嗦一句。

a = raw_input()
result = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]

check = [-56, -50, -118, -105, -98, -101, -117, -105, -96, -42, -80, 89, 78, 70, 177, 86, 126, 80, 80, 96, 177, 109, 28]

arr1 = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83]

for i in range(0,23):
    if i <= 10:
        result[i] = ~ord(a[i]) 
        result[i] = result[i] ^ arr1[i]
    else:
        result[i] = ord(a[i]) + arr1[i]
        result[i] = result[i] ^ 0xcc

    if result[i] != check[i]:
        print "Wrong Flag!"
        exit(0)

print "Yes, You got it!"
print result

这样对照着给出的题目文件思路就清晰的多。

最后

也有人问过,题目的意义在哪里。其实很简单,我只是想带大家回到最开始的调试和猜解。
都怪这该死服务器,拖慢了大家的解题进度。
如果有问题欢迎大家指正。

总之,出题人立正挨打!

免费评分

参与人数 18吾爱币 +64 热心值 +17 收起 理由
nickymhs + 1 我很赞同!
yixi520 + 1 我很赞同!
WXZ13526819463 + 1 + 1 我很赞同!
dmix + 1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
HXY1995 + 1 + 1 谢谢@Thanks!
大圣美工设计翟 + 1 + 1 热心回复!
zxc1998gzp + 1 + 1 我很赞同!
音夜醉 + 1 + 1 厉害
酷酷拉缇 + 1 + 1 热心回复!
Eaysuild.xean + 1 + 1 贴贴
Saikit + 1 我很赞同!
masterboss + 1 + 1 我很赞同!
aileki + 1 + 1 热心回复!
javacafe + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Dongzi495 + 1 用心讨论,共获提升!
Dingjiale + 1 + 1 热心回复!
alittlebear + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
Hmily + 50 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

Hmily 发表于 2021-2-28 09:59
感谢Processor带来的游戏。
popdisk 发表于 2021-2-28 10:28
[Python] 纯文本查看 复制代码
print "Welcome to Processor's debugger!"
print "Please input you flag now!"
 
input = raw_input()
 
if not input:
    print "Are you kidding me?"
    exit(0)
 
lenth = len(input)
if lenth <= 10:
    print "Short flag!"
    exit(0)
    
print "len:%d" % (lenth)
print "OK,let's debug it! You can 'Step' by 'Space'!"
print "--------------INFO--------------"
 
def debuginfo(dic):
    print "eax: %d" %(dic['eax'])
    print "ebx: %d" %(dic['ebx'])
    print "ecx: %d" %(dic['ecx'])
    print "zf: %d" %(dic['zf'])
    print "--------------INFO--------------"
 
index = 0
idx = 0
arr = [2,3,5,7,11,13,17,19,23,29,31,37,41,43,47,53,59,61,67,71,73,79,83]
check = [-56, -50, -118, -105, -98, -101, -117, -105, -96, -42, -80, 89, 78, 70, 177, 86, 126, 80, 80, 96, 177, 109, 28]
result = [0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0,0]
 
dic = {'eax': 0, 'ebx': 0, 'ecx': 0, 'zf': 0}
 
while raw_input() == ' ':
 
    if index <= 10:
        dic['eax'] = ~ord(input[index])
        dic['ebx'] = 0
        dic['ecx'] = index
        dic['zf'] = 0
        debuginfo(dic)
 
        if raw_input() == ' ':
            dic['eax'] = dic['eax'] ^ arr[index]
            dic['ebx'] = arr[index]
            dic['ecx'] = index
            dic['zf'] = 1
            result[index] = dic['eax']
            debuginfo(dic)
 
    else:
        dic['eax'] = ord(input[index]) + arr[index]
        dic['ebx'] = arr[index]
        dic['ecx'] = index
        dic['zf'] = 1
        debuginfo(dic)
 
        if raw_input() == ' ':
            dic['eax'] = dic['eax'] ^ 0xcc
            dic['ebx'] = 0xcc
            dic['ecx'] = index
            dic['zf'] = 1
            result[index] = dic['eax']
            debuginfo(dic)
 
 
    index = index + 1
    if index == 23 or index == lenth:
        break
    
 
while raw_input() == ' ':
    dic['eax'] = result[idx]
    dic['ebx'] = check[idx]
    dic['ecx'] = idx
    if dic['eax'] != dic['ebx']:
        dic['zf'] = 1
        print "Wrong flag, try again!"
        exit(0)
    else:
        dic['zf'] = 0
    debuginfo(dic)
    idx = idx + 1
    
    if idx == 23 or idx == lenth:
        if lenth == 23:
            print "Yes, you got it!"
            exit(0)
        else:
            print "Close to right!"
            exit(0)


emmm...这是源文件吗?你看看第79行是不是不太妥。
dongge666 发表于 2021-2-28 10:05
lookip 发表于 2021-2-28 10:09
热心参与共获提升!
fuy56go 发表于 2021-2-28 10:15
三脸懵逼
gunxsword 发表于 2021-2-28 10:19
原来是这样的....想到了是计算的了,不过我看到EAX,ECX这些,本来还以为是汇编的计算结果,你还用了个ZF...真是把我迷惑的够呛啊...
但是怎么看那几个回显,都不像是汇编计算,如果多看看,也许还是有希望能解出来的...
最终放弃,还是因为服务器太卡了,真的太卡了

另外,验证的方式,和你这个代码好像有点不太一样吧,你这个代码要是我没看错,是有一位不对,就直接提示错误了,也就是我输了,23位,第一位不对,就直接WRONG了
但是我实际解题的时候,他是输出了一大堆,才返回WRONG,就是按了很多次空格后,才会提示WRONG,这两种方式,区别还是挺大的
gunxsword 发表于 2021-2-28 10:30
popdisk 发表于 2021-2-28 10:28
[mw_shl_code=python,true]print "Welcome to Processor's debugger!"
print "Please input you flag now! ...

怎么拿到源文件的?
popdisk 发表于 2021-2-28 10:35
gunxsword 发表于 2021-2-28 10:30
怎么拿到源文件的?

题目放出来了,在原来的活动贴里。另外,你楼上的问题只是因为网卡了,数据还没传过来导致的,不是bug。
gunxsword 发表于 2021-2-28 10:36
popdisk 发表于 2021-2-28 10:35
题目放出来了,在原来的活动贴里。另外,你楼上的问题只是因为网卡了,数据还没传过来导致的,不是bug。

哦,原来是这样
哎,那服务器实在是....这个题还是挺不错的,有点意思,全是服务器的锅!

感谢回复!
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

RSS订阅|小黑屋|处罚记录|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2024-12-26 13:06

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

快速回复 返回顶部 返回列表