BUUCTF reverse题解汇总

Posted 御麟蹬辉

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF reverse题解汇总相关的知识,希望对你有一定的参考价值。

本文是BUUCTF平台reverse题解的汇总

题解均来自本人博客

目录

Page1

Page2

Page3

Page4


Page1

  1. easyre
  2. reverse1
  3. reverse2
  4. 内涵的软件
  5. 新年快乐
  6. xor
  7. helloworld
  8. reverse3
  9. 不一样的flag
  10. SimpleRev
  11. Java逆向解密
  12. [GXYCTF2019]luck_guy
  13. [BJDCTF2020]JustRE
  14. 刮开有奖
  15. 简单注册器
  16. pyre​​​​​​​
  17. [ACTF新生赛2020]easyre
  18. findit
  19. rsa
  20. [ACTF新生赛2020]rome
  21. [FlareOn4]login
  22. CrackRTF
  23. [GUET-CTF2019]re
  24. [WUSTCTF2020]level1
  25. [2019红帽杯]easyRE
  26. [MRCTF2020]Transform
  27. [SUCTF2019]SignIn
  28. [WUSTCTF2020]level2
  29. [ACTF新生赛2020]usualCrypt
  30. [HDCTF2019]Maze
  31. [MRCTF2020]Xor
  32. Youngter-drive

Page2

  1. 相册
  2. [MRCTF2020]hello_world_go
  3. [WUSTCTF2020]level3
  4. [FlareOn4]IgniteMe
  5. [GWCTF 2019]xxor
  6. [WUSTCTF2020]Cr0ssfun
  7. [FlareOn6]Overlong
  8. [UTCTF2020]basic-re
  9. [FlareOn3]Challenge1
  10. [ACTF新生赛2020]Oruga
  11. 特殊的 BASE64
  12. [BJDCTF2020]BJD hamburger competition
  13. [Zer0pts2020]easy strcmp
  14. [ACTF新生赛2020]Universe_final_answer
  15. [WUSTCTF2020]level4
  16. crackMe
  17. [网鼎杯 2020 青龙组]singal
  18. [GUET-CTF2019]number_game
  19. findKey
  20. [羊城杯 2020]easyre
  21. [网鼎杯 2020 青龙组]jocker
  22. [FlareOn5]Minesweeper Championship Registration
  23. firmware
  24. [ACTF新生赛2020]SoulLike
  25. [GWCTF 2019]re3
  26. [GXYCTF2019]simple CPP
  27. [FlareOn5]Ultimate Minesweeper
  28. [MRCTF2020]PixelShooter
  29. [FlareOn1]Bob Doge
  30. [2019红帽杯]xx
  31. [CFI-CTF 2018]IntroToPE
  32. equation

Page3

  1. [2019红帽杯]childRE
  2. [SWPU2019]ReverseMe
  3. [羊城杯 2020]login
  4. [QCTF2018]Xman-babymips
  5. [安洵杯 2019]crackMe
  6. [GKCTF 2021]QQQQT
  7. [NPUCTF2020]你好sao啊
  8. [UTCTF2020]babymips
  9. [WUSTCTF2020]funnyre
  10. [GUET-CTF2019]encrypt
  11. [WMCTF2020]easy_re
  12. [CISCN2018]2ex
  13. [RoarCTF2019]polyre
  14. [watevrCTF 2019]Timeout
  15. [SCTF2019]babyre
  16. [安洵杯 2019]game
  17. [SCTF2019]Strange apk
  18. [2019红帽杯]Snake
  19. [ACTF新生赛2020]fungame
  20. [羊城杯 2020]Bytecode
  21. [FlareOn2]very_success
  22. [网鼎杯 2020 青龙组]bang
  23. [GWCTF 2019]babyvm
  24. [SUCTF2018]babyre
  25. [BSidesSF2019]blink
  26. [SCTF2019]Who is he
  27. [SCTF2019]creakme
  28. [HDCTF2019]MFC
  29. [NPUCTF2020]Baby Obfuscation
  30. [MRCTF2020]EasyCpp
  31. [NPUCTF2020]BasicASM
  32. [ACTF新生赛2020]Splendid_MineCraft

Page4

  1. [SUCTF2019]hardcpp
  2. Dig the way
  3. [MRCTF2020]Shit
  4. [watevrCTF 2019]Repyc
  5. [CFI-CTF 2018]powerPacked
  6. [FlareOn6]Memecat Battlestation
  7. [De1CTF2019]Re_Sign
  8. [FlareOn1]Javascrap
  9. [GKCTF 2021]Crash
  10. [FlareOn1]Shellolololol
  11. HellScream
  12. [FlareOn4]greek_to_me
  13. [b01lers2020]chugga_chugga
  14. [INSHack2018]Tricky-Part1
  15. [FBCTF2019]go_get_the_flag
  16. [FlareOn6]FlareBear
  17. [MRCTF2020]VirtualTree
  18. [watevrCTF 2019]esreveR
  19. [watevrCTF 2019]esreveR
  20. [CFI-CTF 2018]Automated Reversing
  21. [FlareOn2]starter
  22. [FlareOn2]starter
  23. [2019红帽杯]calc
  24. [De1CTF2019]cplusplus
  25. [XMAN2018排位赛]Dragon Quest
  26. [b01lers2020]little_engine
  27. [GKCTF 2021]SoMuchCode
  28. [FlareOn2]YUSoMeta
  29. [SWPU2019]EasiestRe
  30. [GXYCTF2019]minecraft
  31. [QCTF2018]babyre
  32. [NPUCTF2020]EzObfus-Chapter2

以上是BUUCTF reverese的题解汇总,本文会持续更新

Buuctf-Reverse FlareOn3-Challenge Write up

0x00 日常查壳

无壳32位

0x01 主函数

观察一下主程序 发现就是比较字符串的题目

加密函数再401260

0x02 分析加密函数

分析401260

这不就是base加密吗

shift + e 导出数据 这是码表打乱的base64加密

所以只要拿个base脚本 然后改个码表 就出flag

0x03 细谈base加密

但是只懂用加密脚本的我一开始是怀疑这是base加密 但看着加密不是很难就自己在分析

直到做完题看了别人的wp才终于懂了这是base的加密过程

所以这里就记录一下对base的理解

加密过程

1. 取出3个数 再创建一个无符号数用来存放 0000 0000(v7) 0000 0000(v6) 0000 0000(v5)

2. 然后再拆分这24位 拆成四组(为什么是原数组的4/3倍的原因)每个数都是6位

3. 拆的数是2^6次方 也就是64 所以为什么是base64 于是在码表里找对应下标

4. 于是出来的数就是base64加密

解密过程

1. 目标v3恢复 所以要恢复每个6位 encode == table[decode_6]

2. 四个为一组(因为加密的时候是三个一组变四位) 找到数据的对应下标 也就是原始数据的24位中的6位

3. 再讲4个6位合并成24位 再拆分为3个8位

4. 恢复原始数据

0x04 GetFlag

解密脚本!

#include <stdio.h>
#include <string.h>

int main(void)
{
	char key[] = "x2dtJEOmyjacxDemx2eczT5cVS9fVUGvWTuZWjuexjRqy24rV29q";//打乱码表出的数据 
	int data[] =														//data放打乱的码表 
	{
  		0x5A, 0x59, 0x58, 0x41, 0x42, 0x43, 0x44, 0x45, 0x46, 0x47, 
  		0x48, 0x49, 0x4A, 0x4B, 0x4C, 0x4D, 0x4E, 0x4F, 0x50, 0x51, 
  		0x52, 0x53, 0x54, 0x55, 0x56, 0x57, 0x7A, 0x79, 0x78, 0x61, 
  		0x62, 0x63, 0x64, 0x65, 0x66, 0x67, 0x68, 0x69, 0x6A, 0x6B, 
  		0x6C, 0x6D, 0x6E, 0x6F, 0x70, 0x71, 0x72, 0x73, 0x74, 0x75, 
  		0x76, 0x77, 0x30, 0x31, 0x32, 0x33, 0x34, 0x35, 0x36, 0x37, 
  		0x38, 0x39, 0x2B, 0x2F
	};
	
	unsigned int v3 = 0;
  	int flag[100] = {0};
  	int i, j;
  	
	for(i = 0; i < 52; i++)					//这边注意 52比较好 用strlen识别到0就停了 
		for(j = 0; j < 64; j++)
			if(key[i] == data[j])
			{
				key[i] = j;					//当是第35时 给赋值成0 于是后面再用strlen会导致在35停下 
//				printf("%d:%d ",i,j);
				break;
			}
	
	for(i = 0, j = 0; i < 52; i += 4, j += 3)	//这边也就是注意用加密后字符串长度 
	{
		v3 = key[i+3] + (key[i+2] << 6) + (key[i+1] << 12) + (key[i] << 18);
		flag[j] = (v3 >> 16) & 0xFF;
		flag[j+1] = (v3 >> 8) & 0xFF;
		flag[j+2] = v3 & 0xFF;
	}
	
	for(i = 0; i < 39; i++)						//52/4*3也就是39 原始数据长度 
		printf("%c",flag[i]); 
	
  return 0;
} 

GetFlag

以上是关于BUUCTF reverse题解汇总的主要内容,如果未能解决你的问题,请参考以下文章

安全-rsarsa(BUUCTF)

buuctf reverse [UTCTF2020]babymips

安全-snake(BUUCTF)

记一道简单的re--BUUctf reverse1

安全-RSA(BUUCTF)

Buuctf-Reverse(逆向) 2019RedHat(红帽杯)-xx