1、 EasyRe

IDA载入附件,搜索字符串得 flag:

FLAG:flag{fc5e038d38a57032085441e7fe7010b0}

2、 findme

常规的流程,flag的加密和校验都在 off_403844:

跟进去发现 指向strcmp:

然后它又被 sub_401A0E 动过,向上回溯:


所以我们的目标是 sub_401866:


大概看了一下,确定是 RC4,整体还是挺干净的就一个库函数 strlen,当时是想偷懒,用以前的Unicorn脚本改了一下直接跑出来的:

from unicorn import *
from unicorn.x86_const import *
from capstone import *
import binasciichall_base = 0x400000  # 程序加载的地址
chall_stack_base = 0x470000
with open("chall.exe", "rb") as f:f.seek(0x400)code = f.read()f.close()
with open("chall.mem", "rb") as f:chall_mem = f.read()f.close()ascii_code = [b'\x00', b'\x01', b'\x02', b'\x03', b'\x04', b'\x05', b'\x06', b'\x07', b'\x08', b'\x09', b'\x0a', b'\x0b',b'\x0c', b'\x0d', b'\x0e', b'\x0f', b'\x10', b'\x11', b'\x12', b'\x13', b'\x14', b'\x15', b'\x16', b'\x17',b'\x18', b'\x19', b'\x1a', b'\x1b', b'\x1c', b'\x1d', b'\x1e', b'\x1f', b'\x20', b'\x21', b'\x22', b'\x23',b'\x24', b'\x25', b'\x26', b'\x27', b'\x28', b'\x29', b'\x2a', b'\x2b', b'\x2c', b'\x2d', b'\x2e', b'\x2f',b'\x30', b'\x31', b'\x32', b'\x33', b'\x34', b'\x35', b'\x36', b'\x37', b'\x38', b'\x39', b'\x3a', b'\x3b',b'\x3c', b'\x3d', b'\x3e', b'\x3f', b'\x40', b'\x41', b'\x42', b'\x43', b'\x44', b'\x45', b'\x46', b'\x47',b'\x48', b'\x49', b'\x4a', b'\x4b', b'\x4c', b'\x4d', b'\x4e', b'\x4f', b'\x50', b'\x51', b'\x52', b'\x53',b'\x54', b'\x55', b'\x56', b'\x57', b'\x58', b'\x59', b'\x5a', b'\x5b', b'\x5c', b'\x5d', b'\x5e', b'\x5f',b'\x60', b'\x61', b'\x62', b'\x63', b'\x64', b'\x65', b'\x66', b'\x67', b'\x68', b'\x69', b'\x6a', b'\x6b',b'\x6c', b'\x6d', b'\x6e', b'\x6f', b'\x70', b'\x71', b'\x72', b'\x73', b'\x74', b'\x75', b'\x76', b'\x77',b'\x78', b'\x79', b'\x7a', b'\x7b', b'\x7c', b'\x7d']class Unidbg:def __init__(self, flag, except_hit):self.except_hit = except_hitself.hit = 0self.flag = flagself.fff = 0self.temp = 0mu = Uc(UC_ARCH_X86, UC_MODE_32)# 程序基址为 0x1000,分配 128 KB内存mu.mem_map(chall_base, 0x100000)mu.mem_write(0x401000, code)mu.mem_write(0x420000, b'SETCTF2021\x00')mu.mem_write(0x420022, self.flag)mu.mem_write(0x403000, chall_mem)mu.mem_write(chall_stack_base + 0, b'\x00\x00\x42\x00')mu.mem_write(chall_stack_base + 4, b'\x00\x00\x42\x00')mu.mem_write(chall_stack_base + 8, b'\x22\x00\x42\x00')# 设置寄存器的值mu.reg_write(UC_X86_REG_EAX, 0x00401866)mu.reg_write(UC_X86_REG_EBX, 0x00000001)mu.reg_write(UC_X86_REG_ECX, 0x00406040)mu.reg_write(UC_X86_REG_EDX, 0)mu.reg_write(UC_X86_REG_ESI, 0)mu.reg_write(UC_X86_REG_EDI, 0)mu.reg_write(UC_X86_REG_EBP, chall_stack_base + 0x50)mu.reg_write(UC_X86_REG_ESP, chall_stack_base)mu.reg_write(UC_X86_REG_EIP, 0x00401866)# patch strlenmu.mem_write(0x004018DB, b'\x6A\x0A\x58\x90\x90')mu.mem_write(0x0040192D, b'\x6A\x1A\x58\x90\x90')mu.mem_write(0x0040193F, b'\x6A\x1A\x58\x90\x90')mu.mem_write(0x00401950, b'\x6A\x0A\x58\x90\x90')mu.hook_add(UC_HOOK_CODE, self.trace)self.mu = muself.md = Cs(CS_ARCH_X86, CS_MODE_32)def trace(self, mu, address, size, data):if address == 0x004019E5:self.temp += 1def solve(self):try:self.mu.emu_start(0x00401866, 0x00401A0D)except:passreturn self.temp - 1flag = b''
for j in range(26):for i in b'0123456789abcdef{}-_#!?ABCDEFGHIJKLMNOPQRSTUVWXYZghijklmnopqrstuvwxyz':tem = bytearray(flag + b'x' * (26 - len(flag)))tem[j] = irecv = Unidbg(bytes(tem), 127).solve()if recv == j + 1 :flag += ascii_code[i]print(flag.decode())

后面发现,把对应位置的值dump出来与结果进行异或解密好像还更快一点。

FLAG:SETCTF{Th1s_i5_E2_5tRcm9!}

3、 power

一段 Arm 汇编,看得头挺大的,跳过代码,在里面翻找看有没有一些特征比较明显的函数或者字符串:
在某处发现了这个:

好像有点搞头,希望不是出题人自写的魔鬼算法。
再往下翻:

AES实锤,后面就是找个站解密的事了:

FLAG:flag{y0u_found_the_aes_12113112}

4、 EasyRE_Revenge

main函数长得和第一题 EasyRe 一样,很遗憾不是白给:

那个加密函数也是有问题,一堆的花指令,根本没法看,动调吧:

开始一串连跑带跳的,初始化了一个数组:

再往后到这里是第一轮加密:

没别的,就是异或。

再往后就是另一轮加密,后面说,把这两轮加密的硬编码直接dump下来,扔到IDA里面:

虽然看着还是难受,但逻辑好歹是出来了,整理了一下:

char flag[] = "xxxxxxxxxxxxxxxxxxxxxxxxxxxxxxxx";
DWORD key[] = { 0x271E150C, 0x3B322920, 0x5F564D44, 0x736A6158, 0x978E857C, 0xABA29990, 0xCFC6BDB4, 0xE3DAD1C8 };
DWORD v5[10]{0};
for (i = 0; i < 8; i++) {v5[i] = *(DWORD*)(flag+i*4) ^ key[(7 * i + 2) % 8];}
for (i = 0; i < 8; i++) {v5[i] ^= v5[i] << 7;v5[i] ^= key[(7 * i + 3) % 8];v5[i] ^= v5[(5 * i + 3) % 8];v5[i] ^= v5[i] << 13;v5[i] ^= key[(7 * i + 5) % 8];v5[i] ^= v5[i] << 17;}

EXP:

DWORD key[] = { 0x271E150C, 0x3B322920, 0x5F564D44, 0x736A6158, 0x978E857C, 0xABA29990, 0xCFC6BDB4, 0xE3DAD1C8 };
BYTE v6[] = { 0x42,0xb0,0xe8,0xee,0x6c,0xee,0xd0,0x57,0x32,0x4b,0xf5,0xf3,0xd6,0xb7,0xf0,0xd3,0x89,0xc3,0x61,0x0a,0x40,0xba,0xc7,0x38,0x2c,0x9e,0x3d,0x0c,0x84,0x92,0x4a,0xd6,0x00};
int i = 0;
DWORD* v5 = (DWORD*)v6;
DWORD xx, yy = 0;
for (i = 7; i >= 0; i--) {v5[i] ^= (v5[i] & 0b111111111111111) << 17;v5[i] ^= key[(7 * i + 5) % 8];xx = v5[i] & 0b1111111111111;  // 后 13 位v5[i] ^= xx << 13;  // 修复 6 - 19 位xx = (v5[i] & 0b1111110000000000000) << 13;v5[i] ^= xx;v5[i] ^= v5[(5 * i + 3) % 8];v5[i] ^= key[(7 * i + 3) % 8];yy = v5[i] & 0b1111111;  // 获取 25 - 32 位v5[i] ^= yy << 7;  // 修复 18 - 25 位yy = v5[i] & 0b11111110000000;  // 后 7 位v5[i] ^= yy << 7;  // 修复 11 - 18 位yy = v5[i] & 0b111111100000000000000;v5[i] ^= yy << 7;  // 修复 4 - 11 位yy = ((v5[i] << 7) & 0xFFFFFFFF) & 0b11110000000000000000000000000000;v5[i] ^= yy;  // 修复 4 - 11 位}
for (i = 0; i < 8; i++) {*(DWORD*)(v6 + i * 4) ^= key[(7 * i + 2) % 8];}
printf("%s\n", (char*)v5);

FLAG : flag{bd6a64f17bb3dc065b41a0aad1e48e98}

5、O

打开 run.log ,在其中发现一些比较可疑的长整型数:

试着将其转为hex:

有Unicode字符串那味了。全部提取出来看看:

V@QFQC~=a<<5dd==5<121c63<4c260`706cafd`x

回 log 里面翻了一下,有这个 XorI,应该是异或,然后试着简单爆破一下

import binasciixxx = [19703596266291286, 17170514749620305, 14918431467634785, 17170235578908772, 14073959292862517, 14355455746965553,14074174040703036, 15481536039092278, 27303497946234928, 33777409528692838]
xx = ""
for i in xxx:temp = hex(i)[2:].replace("00", "")xx = xx + temp[6:8] + temp[4:6] + temp[2:4] + temp[0:2]
print()xx = binascii.a2b_hex(xx)for i in range(1, 256):for j in xx:print(chr(j ^ i), end="")print()
FLAG: SETCTF{8d990aa8809474f3691f735e253fdcae}

6、Eat_something

陇原战“疫“2021网络安全大赛 Re相关推荐

  1. 陇原战“疫“2021网络安全大赛 Web eaaasyphp

    eaaasyphp 文章目录 eaaasyphp 读取phpinfo 打fastcgi 恶意的ftp服务 构造pop链 参考链接 题目给出了源码 读取phpinfo 尝试反序列化读取phpinfo 但 ...

  2. 陇原战疫2021网络安全大赛_Crypto_复现

    陇原战疫2021网络安全大赛_Crypto_复现 mostlycommon D e c r y p t i o n c o d e Decryption~code Decryptioncode eas ...

  3. 陇原战“疫“2021网络安全大赛Writeup

    Web CheckIN 源代码的这两处: 先尝试访问/wget:/wget?argv=a,看出来这里应该是可以进行攻击的了 接着尝试利用wget的--post-file进行数据外带,读取源代码 在自己 ...

  4. 陇原战疫2021网络安全大赛 Web

    前言 题挺有意思的,Web有点难,而且后面三道难题放的有点晚了,时间不够(肝了一下午的Java).这个比赛的难度,能早9晚9的话可能还好一些,早9晚5就有点紧了. Java还是太菜了,需要学很多的东西 ...

  5. 陇原战“疫“2021 复现Re

    继续在去年的比赛找,再水一篇 Re EasyRe 发现关键函数 int __cdecl main_0(int argc, const char **argv, const char **envp) { ...

  6. 四个有关文件传输的CTF WEB题(深育杯FakeWget、极客大挑战where_is_my_FUMO、2021陇原战疫CheckIN、N1CTF-curl trick)

    文章目录 深育杯FakeWget 极客大挑战where_is_my_FUMO 2021陇原战疫CheckIN N1CTF-curl trick wp来自官方发布和个人想法,觉得这四个题挺有意思的所以整 ...

  7. 2021【陇原战“疫”】crypto部分writeup

    这次BUUCTF月赛对我来说确实还行了,不会太难,也能学到东西,主要想说说比特翻转攻击的问题,最近这种题碰的特别多,CBC的,CFB的,GCM的,各种各样的AES模式的攻击问题,从最基本的CBC开始, ...

  8. [2021首届“陇剑杯”网络安全大赛 决赛]内存取证writeup

    决赛不能联网-手上有只有vol2.6,这道题完全死了 文章目录 [2021首届"陇剑杯"网络安全大赛 决赛]内存取证 writeup 产品密钥 匿名邮箱 远控后门 数据清除时间 [ ...

  9. [2021首届“陇剑杯”网络安全大赛] webshell

    [2021首届"陇剑杯"网络安全大赛] webshell 题目描述 单位网站被黑客挂马,请您从流量中分析出webshell,进行回答: 1.黑客登录系统使用的密码是___Admin ...

  10. 4373支队伍报名2020数字中国创新大赛-数字政府赛道 数字战“疫”彰显社会责任...

    2月25日,2020数字中国创新大赛-数字政府赛道进入复赛阶段.根据本赛道承办方--阿里云天池竞赛平台的数据显示,自1月1日赛事报名通道上线至今,共吸引了全球16个国家和地区共计4373支队伍参赛. ...

最新文章

  1. Postfix用户收发控制
  2. 插入ASP代码让网站数据库成为ASP木马
  3. oracle约束应用实例,oracle 约束的novalidate 应用
  4. C/C++ http协议发送字段,文件,单个和多张图片
  5. python连接mysql_Python 连接mysql与impala
  6. spark学习-38-Spark的MemoryManager
  7. 计算机初试占比高的学校,复试压力小,初试占比70%及以上的院校汇总!
  8. javascript设计模式系列
  9. Android UI系列-----ScrollView和HorizontalScrollView
  10. 详解c++[指针的指针] 和 [指针的引用]
  11. 蓝桥杯国赛 记录一下
  12. 恒星结构和演化-学习记录3-第三章-物态方程2
  13. matlab图像噪声处理,基于matlab图像处理的去噪处理.doc
  14. HDU 5956 The Elder(斜率优化DP)
  15. 用tikz画球坐标系下的体积微元
  16. 空间直角坐标系、大地坐标系、平面坐标系、高斯平面直角坐标系
  17. 微信小程序如何同时获取用户信息和用户手机号
  18. 响应式布局:CSS3弹性盒flex布局模型
  19. SQLServer SubString函数提示[传递给 LEFT 或 SUBSTRING 函数的长度参数无效]错误的解决方法
  20. 51单片机——点亮第一盏灯详细操作过程

热门文章

  1. segnet---训练
  2. 中国网络游戏行业研究报告-2010
  3. Linux中ls颜色含义
  4. 关于iphone5和iphone4兼容的尺寸问题
  5. ant design vue 描述列表Descriptions数据绑定
  6. css面试题手写九宫格
  7. C++排列与组合算法详解
  8. 图像的代数运算与逻辑运算——Matlab实现
  9. 登录英雄联盟lol后无法显示界面出不来问题解决
  10. 打开u盘显示参数错误