Neepu Sec 2023公开赛Reverse题目复现

一.Base

题目逻辑
1.接受输入字符串
2.encode1加密
3.encode2加密
4.将加密后的flag进行比对判断
在这里插入图片描述
encode1是个凯撒加密,位移为3
在这里插入图片描述
encode2是base64
在这里插入图片描述
解密:
先base64解密后凯撒得到welcometotheworldofctf

二.How to use python

1.程序逻辑分析

import base64
import hashlib
import sys

def abort():
    print("Wrong flag!")
    sys.exit(1)
print("Please input the flag:")
flag = input()

if len(flag) != 29:
    abort()
if flag[:5] != 'Neepu':
    abort()
if flag[16]!='a' or flag[17]!='_':
    abort()
if flag[22]!=flag[17]:
    abort()
if flag[28:] != '}':
    abort()
if base64.b64encode(flag[-4:].encode()) != b'X2t1fQ==': 
#_ku} 从倒数第四个字符开始切片,包括倒数第四个字符 base64解码即可
    abort()
if flag[-2:-15:-3].encode().hex() != '75316c745f':  
#u1lt_ 倒数第二个到倒数第15个,每隔3个取一次 十六进制转字符串即可
    abort()
if sum(ord(x) * 10000 ** i for i, x in enumerate(flag[11:15][::-1])) !=110009500490115:
#下标11到14共4个字符爆破得到n_1s
    abort()
if hashlib.md5(flag[9:3:-2].encode('utf-8')).hexdigest()!='db46a959e0f94c0a8977411ab69df11a':
#hy{ 下标九到三 查md5在线网站或者爆破都可以
    abort()
if hashlib.sha1((flag[6]+flag[8]+flag[10]).encode()).hexdigest()!= 'dcb7ec019a90e41f85181ec9f1da642a8ced1b2d':
#Pt0 sha1爆破
    abort()
if hashlib.sha256(flag.encode()).hexdigest() != 'a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892':
#sha256爆破
    abort()

print("You are right!")

2.爆破flag[11]~flag[14]

for a in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
    for b in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
        for c in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
            for d in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                str=a+b+c+d
                if(sum(ord(x)*10000**i for i,x in enumerate(str[::-1]))==110009500490115):
                    print(str)#n_1s

3.爆破sha1

md5在线解密网站:https://www.bejson.com/enc/md5dsc/自行解密
sha1爆破

hashcat -a 3 -m 100 dcb7ec019a90e41f85181ec9f1da642a8ced1b2d ?a?a?a

在这里插入图片描述

4.sha256掩码爆破

最后组合到的掩码Neepu{Pyth0n_1s_a_t?a?al?a?a1_ku}

hashcat -a 3 -m 1400 a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892 Neepu{Pyth0n_1s_a_t?a?al?a?a1_ku}

或者使用爆破脚本

import hashlib

    string='Neepu{Pyth0n_1s_a_t??l??1_ku}'
    for a in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
        for b in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
            for c in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                for d in "0123456789abcdefghijklmnopqrstuvwxyzABCDEFGHIJKLMNOPQRSTUVWXYZ_":
                    string_try = string.replace('?', a, 1).replace('?', b, 1).replace('?', c, 1).replace('?', d, 1)
                    hash_object = hashlib.sha256(string_try.encode())
                    hex_dig = hash_object.hexdigest()
                    if(hex_dig=='a04f00829f27a5ead1c4ae526d6b1b0cec30ed0e56d6d71e9c001d7803e84892'):
                        print(string_try)
                        

三.IKUN检查器

1.查看程序信息

可以发现是C#编写的,使用dnSpy分析
dnSpy项目地址:https://github.com/dnSpy/dnSpy
在这里插入图片描述

2.分析程序逻辑

​将程序用dnSpy打开后,点击From1,可以找到check1~check5函数
在这里插入图片描述
在这里插入图片描述
tips:可以使用上方的搜索功能搜索关键字符串从而定位
在这里插入图片描述
在这里插入图片描述

3.button1_conClick函数

可以看到做了对flag的判断,分别截取flag的不同部分并调用不同的check函数最后将加密结果拼接起来并输出结果
在这里插入图片描述

4.check1函数

md5加密,解密得到1998-8-2
在这里插入图片描述

5.check2函数

check2是sha1
在这里插入图片描述

很奇怪参考wp:Neepu Re Writeup里说sha1也是md5,而且真的能解密出来jinitaimei
查了一下也没看出个所以然,如果有大佬知道请告诉我

在这里插入图片描述

6.check3函数

给了个’-’
在这里插入图片描述
注意是两个字符串所以有两个’-’
在这里插入图片描述
在这里插入图片描述

7.check4函数

AES加密
text是密文,bytes是密钥,并且可以看到Mode是ECB,PaddingMode是PKCS7
在这里插入图片描述
可以使用密码学工具箱解出xiaoheizishiba
在这里插入图片描述

8.check5函数

sha256,也就是把上面得到的结果拼接起来进行hash(也可以运行程序通过验证得到flag)
拼接结果:1998-8-2-jinitaimei-xiaoheizishiba
sha256:b8688fc33b5786095dc70a34ad14b9623905185663fa26dcc75d3b6b1f69999e
flag:Neepu{b8688fc33b5786095dc70a34ad14b9623905185663fa26dcc75d3b6b1f69999e}
在这里插入图片描述

四.junk code

程序貌似会给flag,但是输出速度非常之慢

1.使用32位动态调试工具调试

可以使用32位debug工具调试
打开之后按f9运行程序,然后右键查找字符串
在这里插入图片描述
可以直接找到flagNeepu{it-1s-not-junk-code-1u-1u-the-qq-bin-mat}

在这里插入图片描述

2.使用CheatEngine

附加进程,选择搜索字符串并搜索Neepu{
在这里插入图片描述

然后对该地址右键并选择浏览相关内存区域
在这里插入图片描述
然后就可以看到flag
Neepu{it-1s-not-junk-code-1u-1u-the-qq-bin-mat}
在这里插入图片描述

五.奇怪的ELF

这题当时用attach附加调试没做出来

1.脱壳

upx -d move

2.函数逻辑

mov混淆,有相似的题movfuscator混淆——re5-packed-movement讲的挺好
关于mov混淆原理这里推荐几篇文章:

  1. movfuscator混淆
  2. 漫谈混淆技术----从Citadel混淆壳说起

反混淆环境由于我git下载很慢还没配好,这里使用search搜索机器码可以直接出
在这里插入图片描述

六.Xor

这题是go语言逆向,使用ida8.2可以分析出一些函数,低版本分析出来的结果比较丑陋
IDA8.2FreeWare下载地址:IDA Freeware Download Page

1. 定位主函数

进去后发现找不到主函数,这题有两个方法可以定位
首先运行程序可以看到输出Please input the flag
那么我们可以根据字符串引用去查找,交叉引用两次即可
在这里插入图片描述
第二种方法,由于需要输入flag,所以可以搜索scan函数,对Fscanln交叉引用向上查找即可
在这里插入图片描述
然后就可以定位到主函数,向下翻找可以看到关键逻辑异或

2. 程序逻辑

这里的v17每次循环都有个是否大于等于4的判断,然后用v17作为偏移在qwer中查找字符
所以可以猜测是类似于qwer[i%4]的功能,然后和data进行异或(果然逆向还得靠猜)
在这里插入图片描述

3. 解题脚本

这里比较坑的一点是ida8.2free ware不能写idapython脚本
使用idapro7.7打开刚刚8.2分析出来的数据库文件,下断点动态调试(静态看不到v25密文的值)
点击v25跟进查看地址(或者根据相对于rsp,rbp的偏移来算出地址)
在这里插入图片描述
使用idapython脚本输出flag即可(idapython脚本我总结过一点基础操作这题足够用了:IDAPython入门基础语法)
在这里插入图片描述
flag:Neepu{X0r_is_easy_1234123412345}

七.参考wp:

  1. Neepu Re Writeup
  2. NEEPUCTF 2023 Official Writeups(Neepu群内有)

猜你喜欢

转载自blog.csdn.net/OrientalGlass/article/details/130807443
sec