REVERSE-PRACTICE-BUUCTF-9
REVERSE-PRACTICE-BUUCTF-9
- [ACTF新生赛2020]usualCrypt
- [MRCTF2020]Transform
- [V&N2020 公开赛]CSRe
- [WUSTCTF2020]level1
[ACTF新生赛2020]usualCrypt
exe程序,运行后提示输入flag,无壳,ida分析
main函数逻辑清晰,获取输入,sub_401080函数对输入进行变表base64变换,结果存储到v5,然后check,验证输入
sub_401080函数是很明显的base64,在函数开始部分,sub_401000函数对表进行了变换,在函数结束返回部分,sub_401030函数对变表后的base64字符串进行了英文字母的大小写转换
sub_401000函数,将byte_40E0AA[6]到byte_40E0AA[14]和base64_table[6]到base64_table[14]两段交换
sub_401030函数,对变表后的base64字符串英文字母的大小写转换,其他字符不变
写脚本即可得到flag
#coding:utf-8
#base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" 原表
base=[0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 0x48, 0x49, 0x4A,0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 0x52, 0x53, 0x54,0x55, 0x56, 0x57, 0x58, 0x59, 0x5A, 0x61, 0x62, 0x63, 0x64,0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 0x6C, 0x6D, 0x6E,0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 0x76, 0x77, 0x78,0x79, 0x7A, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37,0x38, 0x39, 0x2B, 0x2F] #原表的ascii码表示,方便进行原表变换
#对原表进行变换
for i in range(6,15):base[i],base[10+i]=base[10+i],base[i]
#base_changed是变表,需要转成字符串的形式
base_changed=''.join(chr(i) for i in base)
print("Current Base:\n%s " %base_changed) #打印base_changed变表
def base64_decode(inputs): #inputs是base64字符串# 将字符串转化为2进制bin_str = []for i in inputs:if i != '=':x = str(bin(base_changed.index(i))).replace('0b', '')bin_str.append('{:0>6}'.format(x))# 输出的字符串outputs = ""nums = inputs.count('=')while bin_str:temp_list = bin_str[:4]temp_str = "".join(temp_list)# 补足8位字节if (len(temp_str) % 8 != 0):temp_str = temp_str[0:-1 * nums * 2]# 将四个6字节的二进制转换为三个字符for i in range(0, int(len(temp_str) / 8)):outputs += chr(int(temp_str[i * 8:(i + 1) * 8], 2))bin_str = bin_str[4:]print("Decoded String:\n%s " % outputs)
#enc是经变表base64以及大小写转换后的字符串
enc="zMXHz3TIgnxLxJhFAdtZn2fFk3lYCrtPC2l9"
#c将enc大小写转换回去 再解变表base64
c=""
for i in enc:if i.isupper():c+=i.lower()elif i.islower():c+=i.upper()else:c+=i
base64_decode(c)
运行结果
[MRCTF2020]Transform
exe程序,运行后提示输入code,输入错误打印Wrong,无壳,ida分析
main函数逻辑清晰,获取输入,检验输入的长度,对输入的内容变换位置后存储到byte_414040,byte_414040再异或一下,最后check
写脚本即可得到flag
[V&N2020 公开赛]CSRe
exe程序,运行出错
查壳,发现是.NET,而且加了de4dot壳
脱壳后用dnSpy打开,找到主逻辑函数
method_0函数是将两个传入的参数顺序异或的结果返回
smethod_0函数是对传入的参数进行sha1散列的结果返回
main函数,先获取输入的str,头部加个“3”,尾部加个“9”,拼接后的字符串进行sha1散列,与已知的值比较,验证输入的str是否正确
再获取输入的text,头部加“re”,拼接后的字符串进行sha1散列,散列的结果与已知的值进行异或,结果为全0,说明两个传入的参数完全相同,验证输入的text是否正确
flag即为flag{str+text}
using System;
using System.Security.Cryptography;
using System.Text;// Token: 0x02000006 RID: 6
internal sealed class Class3
{// Token: 0x0600000D RID: 13 RVA: 0x000022C8 File Offset: 0x000004C8public string method_0(string string_0, string string_1){string text = string.Empty;char[] array = string_0.ToCharArray();char[] array2 = string_1.ToCharArray();int num = (array.Length < array2.Length) ? array.Length : array2.Length;for (int i = 0; i < num; i++){text += (int)(array[i] ^ array2[i]);}return text;}// Token: 0x0600000E RID: 14 RVA: 0x0000231C File Offset: 0x0000051Cpublic static string smethod_0(string string_0){byte[] bytes = Encoding.UTF8.GetBytes(string_0);byte[] array = SHA1.Create().ComputeHash(bytes);StringBuilder stringBuilder = new StringBuilder();foreach (byte b in array){stringBuilder.Append(b.ToString("X2"));}return stringBuilder.ToString();}// Token: 0x0600000F RID: 15 RVA: 0x00002374 File Offset: 0x00000574private static void Main(string[] args){if (!Class1.smethod_1()){return;}bool flag = true;Class3 @class = new Class3();string str = Console.ReadLine();if (Class3.smethod_0("3" + str + "9") != "B498BFA2498E21325D1178417BEA459EB2CD28F8"){flag = false;}string text = Console.ReadLine();string string_ = Class3.smethod_0("re" + text);string text2 = @class.method_0(string_, "63143B6F8007B98C53CA2149822777B3566F9241");for (int i = 0; i < text2.Length; i++){if (text2[i] != '0'){flag = false;}}if (flag){Console.WriteLine("flag{" + str + text + "}");}}
}
用在线网站解第一段sha1,可知str为“1415”
用在线网站解第二段sha1,可知text为“turn”
[WUSTCTF2020]level1
elf文件,无壳,ida分析
main函数逻辑清晰,从文件读取flag,下标从1开始,下标为奇数,flag的内容移位,下标为偶数,flag的内容乘以下标
写脚本即可得到flag
REVERSE-PRACTICE-BUUCTF-9相关推荐
- BUUCTF Reverse/findKey
BUUCTF Reverse/findKey 先看文件信息:32位程序,没有加壳 打开看看,标题为find flag,也没啥有用的信息 IDA32位打开,找到start函数,看到有个main,跟随跳转 ...
- BUUCTF Reverse helloword、findit
BUUCTF Reverse helloword.findit helloword findit 一天一道CTF题目,能多不能少 记录一下这两道题,这两道题是安卓逆向的题目~ 第一次接触安卓逆向的题目 ...
- BUUCTF Reverse/Ultimate Minesweeper
BUUCTF Reverse/Ultimate Minesweeper 先看文件信息,没有加壳,且为net编写的程序 运行是一个扫雷游戏,只要点错一个就会自动退出(左上角显示的是雷的数目,一共有897 ...
- BUUCTF Reverse xor
题目:BUUCTF Reverse xor 一些犯傻后学到了新东西的记录 查壳,没壳,IDA打开 main函数很好理解,输入一个长度为33的字符串,1-32位与前一位异或后与global相等,则判定f ...
- BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker
BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...
- BUUCTF Reverse/[GWCTF 2019]pyre
BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...
- BUUCTF reverse题解汇总
本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...
- BUUCTF Reverse(helloworld)
BUUCTF Reverse(helloworld) 题目附件下载下来之后,是.apk后缀,所以可能是安卓逆向. 这里我用的工具是Android Killer,下载地址:https://xiazai. ...
- BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun
BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun 先看文件信息, IDA64位打开,很简单的题目,只要一个个输入就行 都是返回的这种元素 _BOOL8 __fastcall i ...
- [BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker
网上大部分是动调,我尝试IDC解一下, 无壳,32位,放入IDApro,查看main函数 查看wrong和str函数,借出假的flag a=[0x66,0x6B,0x63,0x64,0x7F,0x61 ...
最新文章
- Git从入门到放不下
- c++ url下载图片
- java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
- JavaWeb-Spring中注解大全与详解
- 烂泥虚拟机硬盘简简单单扩容
- 30-- 返回倒数第 k 个节点
- 如何得到webbrowser的句柄
- python 柱形图_Python 写入 Excel III 详解图形生成-柱形图
- 数字电路逻辑设计 总结
- @JSONField的一些使用基础
- java开花_那是花开-javaweb开发-51CTO博客
- html中document和Document的区别。
- Room 使用解析(2.4.2 版本)
- 静态博客网站——vuepress功能进化
- 年会邀请函如何制作?教你一分钟快速制作年会邀请函
- 5G无线定位技术标准化及发展趋势
- 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用31
- 2020最受欢迎的7个vue管理后台框架
- 泛微 OA 集成平台介绍
- ST-PUZZLE-2.0(一个益智游戏)