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相关推荐

  1. BUUCTF Reverse/findKey

    BUUCTF Reverse/findKey 先看文件信息:32位程序,没有加壳 打开看看,标题为find flag,也没啥有用的信息 IDA32位打开,找到start函数,看到有个main,跟随跳转 ...

  2. BUUCTF Reverse helloword、findit

    BUUCTF Reverse helloword.findit helloword findit 一天一道CTF题目,能多不能少 记录一下这两道题,这两道题是安卓逆向的题目~ 第一次接触安卓逆向的题目 ...

  3. BUUCTF Reverse/Ultimate Minesweeper

    BUUCTF Reverse/Ultimate Minesweeper 先看文件信息,没有加壳,且为net编写的程序 运行是一个扫雷游戏,只要点错一个就会自动退出(左上角显示的是雷的数目,一共有897 ...

  4. BUUCTF Reverse xor

    题目:BUUCTF Reverse xor 一些犯傻后学到了新东西的记录 查壳,没壳,IDA打开 main函数很好理解,输入一个长度为33的字符串,1-32位与前一位异或后与global相等,则判定f ...

  5. BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker

    BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...

  6. BUUCTF Reverse/[GWCTF 2019]pyre

    BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...

  7. BUUCTF reverse题解汇总

    本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...

  8. BUUCTF Reverse(helloworld)

    BUUCTF Reverse(helloworld) 题目附件下载下来之后,是.apk后缀,所以可能是安卓逆向. 这里我用的工具是Android Killer,下载地址:https://xiazai. ...

  9. BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun

    BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun 先看文件信息, IDA64位打开,很简单的题目,只要一个个输入就行 都是返回的这种元素 _BOOL8 __fastcall i ...

  10. [BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker

    网上大部分是动调,我尝试IDC解一下, 无壳,32位,放入IDApro,查看main函数 查看wrong和str函数,借出假的flag a=[0x66,0x6B,0x63,0x64,0x7F,0x61 ...

最新文章

  1. Git从入门到放不下
  2. c++ url下载图片
  3. java word 纸张大小_如何在Java中为Word文档(.doc或.docx)设置背景色(页面颜色)?...
  4. JavaWeb-Spring中注解大全与详解
  5. 烂泥虚拟机硬盘简简单单扩容
  6. 30-- 返回倒数第 k 个节点
  7. 如何得到webbrowser的句柄
  8. python 柱形图_Python 写入 Excel III 详解图形生成-柱形图
  9. 数字电路逻辑设计 总结
  10. @JSONField的一些使用基础
  11. java开花_那是花开-javaweb开发-51CTO博客
  12. html中document和Document的区别。
  13. Room 使用解析(2.4.2 版本)
  14. 静态博客网站——vuepress功能进化
  15. 年会邀请函如何制作?教你一分钟快速制作年会邀请函
  16. 5G无线定位技术标准化及发展趋势
  17. 最老程序员创业札记:全文检索、数据挖掘、推荐引擎应用31
  18. 2020最受欢迎的7个vue管理后台框架
  19. 泛微 OA 集成平台介绍
  20. ST-PUZZLE-2.0(一个益智游戏)

热门文章

  1. uva11361数位dp
  2. 一些有用的javascript实例分析(二)
  3. 树的直径,树的最长路dp思想
  4. 基于知识图谱的问答系统实践
  5. 752. Open the Lock
  6. [Leetcode][第632题][JAVA][最小区间][堆][滑动窗口]
  7. 审计署计算机培训心得体会,审计署计算机中级培训心得体会2018
  8. UE4版本和vs版本的对应关系
  9. a5d27 emmc启动 修改1
  10. asterisk几个通用函数说明