记一次院赛CTF的Crypto和Re题(入门)
目录
- Crypto
- easy crypto
- bAcOn
- 敌军密报
- Re
- easy re
- 跳到对的地方
- 简单的XOR
- 多密码表替换
Crypto
easy crypto
首先,这个可以很容易的看出这是一个base64加密一串密文,然后用base64解密后是
可以看出这就是flag的格式,所以一般就是凯撒加密了,但是因为有花括号下划线之类的,所以是凯撒的一个变形rot13
bAcOn
这题是给了一个字符串baCoNBacoNbaconbACoNbacOnbAconBacOnbacoNbaconbacOnbACOnbACoN
可以看出给了我们的提示就是bacon,培根。
我这边的话是改了一个网上找的python代码,然后直接跑出来了。
因为培根密码是有两张密码表,同时因为大小写的话也有种情况,解出来应该是有四种(我这边另外一种以小写字母为b以大写字母为a的显示结果没有放出来)
import re
alphabet = ['a','b','c','d','e','f','g','h','i','j','k','l','m','n','o','p','q','r','s','t','u','v','w','x','y','z']
first_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","babaa","babab","babba","babbb","bbaaa","bbaab"]
second_cipher = ["aaaaa","aaaab","aaaba","aaabb","aabaa","aabab","aabba","aabbb","abaaa","abaaa","abaab","ababa","ababb","abbaa","abbab","abbba","abbbb","baaaa","baaab","baaba","baabb","baabb","babaa","babab","babba","babbb"]
def decode():upper_flag = False # 用于判断输入是否为大写e_string = input("please input string to decode:\n")e_string=change(e_string)print(e_string)if e_string.isupper():upper_flag = Truee_string = e_string.lower()e_array = re.findall(".{5}",e_string)d_string1 = ""d_string2 = ""for index in e_array:for i in range(0,26):if index == first_cipher[i]:d_string1 += alphabet[i]if index == second_cipher[i]:d_string2 += alphabet[i]if upper_flag:d_string1 = d_string1.upper()d_string2 = d_string2.upper()print ("first decode method result is:\n"+d_string1)print ("second decode method result is:\n"+d_string2)return
def change(s):str=""for i in s:if(i>='a' and i<='z'):str+="a"if(i>='A' and i<='Z'):str+="b"return str
def change2(s):str=""for i in s:if(i>='a' and i<='z'):str+="b"if(i>='A' and i<='Z'):str+="a"return str
if __name__ == '__main__':print ("\t\tcoding by qux")while True:print ("\t*******Bacon Encode_Decode System*******")print ("input should be only lowercase or uppercase,cipher just include a,b(or A,B)")print ("1.encode\n2.decode\n3.exit")s_number = input("please input number to choose\n")if s_number == "1":encode()input()elif s_number == "2":decode()input()elif s_number == "3":breakelse:continue
敌军密报
题目展示就是这样的,一个密文,以及一个文件可以下载。这边这个文件用记事本打开稍微看了一下,有很多类似.pyt、__main__之类的东西,所以应该就是一个python编译后的文件了,这边推荐一个在线反编译python的网站http://tools.bugscaner.com/decompyle/
可以发现的是有四层加密
第一层凯撒加密
第二层base32
第三层base16
第四层栅栏加密取2
这边分享下我是如何分析这些代码是如何加密的。
在得到这个python代码后,每一种加密其实都可以单独取出来,然后自己定义一些需要加密的字符,然后可以看到加密后的内容,然后可以判段,如果判断不出来也没关系。
只需要将他的程序逆着写,然后将我们测试的加密后的内容,可以还原出加密前的字符,那么我们逆着的程序也就没有写错了。这样我们就能一步一步逆向出明文了。
Re
easy re
这一题是真的太没有难度了
文本编辑器直接就搜出来了,当然更合适的做法肯定是用ida或od去搜
跳到对的地方
这一题的话,就是考察最基本的od动态调试的跳转,使用中文搜索引擎,然后找到相应的内容,双击进去,就可以看到这句话所在的汇编代码段了。然后一般是选择push ebp去跳转就能进去了。
启动程序,这边比较直接的就是直接跳进去,找一个能执行到的地方,改下汇编,让他jmp到我们之前找到的地址。
当然,这样可能会导致我们程序崩溃,但是我们只是要这个flag,只要让他显示出来就好了。
简单的XOR
这题我当时是没有做出来的,只要当时没有找到真正的main函数,后来我发现一个找main函数的技巧。因为你直接运行那个需要你逆向的程序,是会出现一些信息的
输入123,他提示我try again。于是可以在ida中搜索这个字符串,ALT+T。
然后我就找到了他真正的main函数,很容易有木有
找到了main函数,就可以看的出来,他就是要将我们输入的东西,和v11到v34的值进行异或,最后的结果要等于v35就是”hang_dian_xin_gong_ctf!!”。 这边需要的知识点就是,抑或的时候A ^ B=C那么A ^ C=B 、B ^ C=A就都成立了
于是写了个脚本
就获得了flag
多密码表替换
找到main函数如下
我把它改写成python代码大概是这个意思
然后最后这个v14等于v10就是正确的
这样我们就知道v14,于是上面的代码中我们不知道的就只有需要我们输入的buf[]。所以写一个求buf的代码
运行就能得到flag
记一次院赛CTF的Crypto和Re题(入门)相关推荐
- 记一次院赛CTF的Pwn和Misc题(入门)
目录 Pwn easy pwn 莽撞人 反向读取 Misc drop the beats 拼东东 消失的50px Pwn 见到别的比赛的pwn题才幡然醒悟,已经没有比这些更简单的pwn题了. easy ...
- 记一次院赛CTF的WEB题(入门级别)
目录 签到一 签到二 口算小天才 easy php 录取查询 我爱python Spring 这次院赛的题目比较基础,适合给刚入门CTF的小白提供一个大致CTF解题思路.(主要因为本人小白,表示能学到 ...
- 某新生院赛CTF 移动题writeup
题目提供了一个apk,常规考察内容一般为逆向.挖洞~ 1.程序初步分析 获取一个apk后第一件事情肯定是运行,看看题目到底是要干嘛,是要逆向分析算法,还是利用一些Androd机制.截图如下: 程序只有 ...
- 某次ctf 中crypto的基础题
文章目录 一.题目描述 二.解题分析 1.分析过程 2.还原加密 总结 一.题目描述 打开题目链接文件,一看妥妥的python代码,最后一行print函数后面注释了一串字符串: ]$^<[< ...
- 2017哈理工 低年级组院赛初赛 G-做游戏 【水题】
题目描述 今天是Tabris和mengxiang000来到幼儿园的第9天. 为了庆祝这美好的一天,老师组织同学们做游戏,拿来了好多骰子. 游戏规则: 1)两个人每人轮流掷骰子,操控同一个小人在一个有向 ...
- 记2015沈阳区域赛
前记 基本确定了要去沈阳和上海打区域赛,听说苏大cp也会沈阳,于是我们的最终目标变为了压苏大. 周五 下午一点左右的飞机,本来想要早上赶概率论作业然后交到学校去,结果睡晚了,干脆就早点去了机场,然后大 ...
- ZUFE 2017院赛 - Problem K: Jelly与狗头人的地下世界 (DP)
一个简单的DP. 只能往下和往右传递. 对DP不够敏感,打院赛的时候用记忆化搜索过的,浪费不少时间. #include <iostream> #include <stdio.h> ...
- CTF秀CRYPTO密码学签到
CTF秀CRYPTO密码学签到 继续开启全栈梦想之逆向之旅~ 这题是CTF秀CRYPTO密码学签到 发现类似flag的}wohs.ftc{galf: 直接反转得到flag . . 为什么怎么简单的题目 ...
- [SWPUCTF] 2021新生赛之Crypto篇刷题记录(11)
[SWPUCTF] 2021新生赛之Crypto篇刷题记录① [SWPUCTF 2021 新生赛]crypto6 [SWPUCTF 2021 新生赛]ez_caesar [SWPUCTF 2021 新 ...
最新文章
- 机器学习的入门平台天花板,还可免费实操经典教程,确实也没谁了
- 些许注意事项(初学)
- rough and crude
- 苹果官方首次松口:新款iPhone SE有望近期亮相
- non linear processor
- 力扣题目——53. 最大子序和
- Spring中为什么实体类不用注入
- keil uvision4 注册机 使用方法
- android代码改字体颜色,如何更改Android Studio的代码字体和颜色
- linux tar 命令安装,Linux tar 命令 command not found tar 命令详解 tar 命令未找到 tar 命令安装 - CommandNotFound ⚡️ 坑否...
- python 实现 n 次方_python实现pow函数(求n次幂,求n次方)
- java语言基础之关键字1(public、protested、private、static)
- FreeMarker源码分析(八)
- 如何顺利获得美国工作签证
- java多线程详解及线程池创建
- Android实现二维码扫描功能(三)-闪光灯控制
- SAP JCo业务情景:在线发票
- 【Go】用 Go 访问 Redis
- O2O、C2C、B2B、B2C、F2C的区别在哪里?
- windows11 安装vc++6.0
热门文章
- oracle画圆,元宵佳节:看Oracle技术粉们用SQL画团圆
- 【PowerBi】Power Query导入Excel数据
- 二十三、 爬取mzsock网站写真社区
- Python用泰勒公式模拟函数
- 叠加原理 戴维南定理
- tornado函数和类的导入和ui_modules , ui_methods
- python tfidf特征变换_Python机器学习之“特征工程”
- docker启动sqlserver_ASP.NET Core容器化技术Docker零基础从入门到实战演练
- 研究生一年级,非计算机专业,自学机器学习现实吗?
- GlobalPointer:用统一的方式处理嵌套和非嵌套NER