NSSCTF逆向2023题目《easy_re》《世界上最棒的程序员》《Check_Your_Luck》《Tea》
Posted Corax0o0
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了NSSCTF逆向2023题目《easy_re》《世界上最棒的程序员》《Check_Your_Luck》《Tea》相关的知识,希望对你有一定的参考价值。
题目easy_re
解法
很简单的一道题
考的就是upx脱壳 base64加解密
拿到文件
upx壳 upx -d 脱壳
无壳
放进ida
很明显关键在于这个判断的两个字符串是啥。现在我们看看我们输入的s变成了什么。
进入func
func的内容主要是对s进行操作然后给encode_
这次我看明白了,这个很明显是个base64。
我们再出去看a是什么
a被base64了。
直接点a看看
直接解密
出flag
题目世界上最棒的程序员
解法
这道题在比赛时候做的,也是一道签到题,直接扔进ida里看strings窗口就可以了
题目Check_Your_Luck
解法
也是一道很简单的签到题,考的就是五元一次方程组的解
笨办法,直接找在线的计算器
https://www.buildenvi.com/gongju/formula/3lck4
计算出flag
题目Tea
解法
这道题算是我做的的第一道tea题目。拿到题目先exeinfo一下
ok这道题没壳,放进ida里面,是start函数,暂时没有入口,我们直接找关键字符串,定位到这个关键函数位置
ok,先学习一下tea的知识吧
1.是一个新知识啊,简单来讲待加密数据是两个2个32位,秘钥是4个32位。关键的过程也就如上图所示(为一轮的过程,在这一轮过程中v1数据由三个表达式拼接,分别是k【0】<<4,DELTA,K[1]>>5三者异或组成,下面的也是同样的原理,然后32轮或者64轮得到最终加密的数据。而这个算法也是可逆的,可以完全将加密过程逆转,加减相倒即可。)
ok,大概就是tea的主题思路。
我们找一找这个tea加密函数具体在哪。
ok在这里,在这里看的时候其实刚开始迷惑的是这个4i64怎么这么多,后面看到其实把四位进行一个处理也是可以的。
更让我感到奇怪的是
16*到底是什么意思。
后面看了一下别人的博客才明白是我对左移右移还欠缺理解。
`左移右移用简单的算术运算实际上是乘以(除以)几个2。32 >> 2 = 32 / 2^2 = 8
17 >> 2 = 17 / 2^2 = 4.25 = 4(因为只取整数部分)
512 >> 10 = 512 / 2^10 = 0.5 = 0(因为只取整数部分)`
所以这个16*,如果以四位为一组,其实也就是每个左移了四位的意思。
ok,逆向思路已有,写脚本(脚本没存贴别的师傅的wp了)
总结
easy_re upx脱壳 base64
世界上最棒的程序员 字符串查找
Check_Your_Luck 线性方程组求解
Tea tea 算法
RC4加密及逆向对应题目
title: RC4加密及逆向对应题目
date: 2021-10-09 10:29:23
tags: 逆向学习
categories: 逆向学习
前言
学习了RC4加密算法,做一下记录顺便拿一个题目来说
RC4加密算法分为两部分,初始化KAS和伪随机子密钥生成PRGA
我的理解就是:首先进行初始化,然后就是生成随机数
第一步初始化:
对S的初始化
for i in range(256):
S[i]=i
#对K初始化 密钥长度可变这里以256来说
用密钥的ascii 来遍历K
K[i]= key[i%len(key)] #key 是密钥
第二步:生成置换S表 就是将S表打乱
i=k=j=0
while(i<n)
s[i]=i
j=(j+s[i]+s[j])%n #这里n取256
然后交换s[i] s[j]
i+=1
#至于为啥要这么做 我的理解就是打乱s表
第三步伪随机密钥生成
i=j=k=0
for w in range(len(明文长度))
i=(i+1)%n
j=(j+S[i])%n
交换S[i],S[j]
随机值在S表中的序号:k= (s[i]+s[j])%n
取得迭代值:R=S[k]
最后与明文单位xor就行
解密的时候就很简单了
重复上次过程只把明文换成密码在xor就行了
这里注意的是要,用ascii码值来进行操作
三步完成
以绿城杯[warmup]easy_re来说
首先查壳,没有发现 看到是32位的
打开后 f5 不了
看到 开头有个花指令
给nop掉就行了
然后按c 将其转换为代码就行了
得到主代码
根据上面所的rc4特征一眼就可以看出来
不过这里改了一点地方,问题不大我们代码跟着跑一遍,最后xor一下就行了
首先找密文
看到v18-v21是连续的 v17 v18点进去 然后 shift +e 复制出来 再加上v19 v20v21 拼接出来就行了
这里注意是小端存储所以要从后面读
找到密文
enc='F58C8DE49FA5286530F4EBD324A9911A6FD46AD70B8DE8B8834A5A6EBECBF44B99D6E6547A4F5014'
根据特征找到v25就是key
key='tallmewhy'
然后跟着写一遍最后xor就行了
贴一下脚本
enc='F58C8DE49FA5286530F4EBD324A9911A6FD46AD70B8DE8B8834A5A6EBECBF44B99D6E6547A4F5014E5EC'
enc_flag=[]
for i in range(0,len(enc),2):
enc_flag.append(int(enc[i:i+2],16))
v24=[0]*256
Dst=[0]*256
key='tallmewhy'
key_=[]
for i in key:
key_.append(ord(i))
v6=0
v5= len(key)
#初始化
for v6 in range(256):
Dst[v6]=v6
v24[v6]= key_[v6%v5]
v7=0
v8=0
for v7 in range(256):
v9=Dst[v7]
v8=(v8+v24[v7]+v9)%256
Dst[v7]=Dst[v8]
v7+=1
Dst[v8]=v9^0x37
v10 = 0
v22 = 0
v11 = 0
#print(len(enc_flag))
for w in range(0,42):
v10=(v10+1)%256
v12= Dst[v10]
v11= (v12+v11)%256
Dst[v10]= Dst[v11]
Dst[v11]=v12
t= (Dst[v10]+Dst[v11])%256
R= Dst[t]
print(chr(R^enc_flag[w]),end='')
以上是关于NSSCTF逆向2023题目《easy_re》《世界上最棒的程序员》《Check_Your_Luck》《Tea》的主要内容,如果未能解决你的问题,请参考以下文章
NSSCTF逆向2023题目《doublegame》《fake_game》《easy_pyc》《For Aiur》
NSSCTF逆向2023题目《程序和人有一个能跑就行了》《encode》
[NSSCTF 2022 Spring Recruit]babysql