SICTF Round#3 RE WP

1. BabyC++

Shift+F12 一眼出

2. ez_pyc

好多wp里直接反编译出了源码,md5都能直接看见……我用的一样版本的uncompyle6但是没有这样的效果

这种事情也没法强求,老老实实逆吧

程序是一个数独,我实在没看出来……

首先看到一个9*9的棋盘,上面有一些数字

019000307

800000000

400000200

000030000

500060020

070000031

000000000

008090700

000000000

然后要输入一些16进制数转化为整数,范围是1-9。不符合的话指针就会飞到一个莫名其妙的地方,触发指针越界,异常处理导致退出。

转化之后填入0内,指针一行一行从左往右移动

这部分应该是检查每行、每列是不是都有1-9

这部分就是对3*3的九宫格进行遍历,检查数字1-9。为了排除多解,增加了一个md5校验的部分(有的队反编译出md5这里显示的是flag……奇了怪了)

所以这是一个解数独的题目

2548656723194376198518245679931748649825721856943342156965374812

flag{6320870e5352469014668584c7f3229334e22689b45a64f926b5c}

强烈吐槽一下这个数独多解,而且多解不是一个两个

跑了几十分钟,有8166944个解

3. SweetTofu

字符串定位

静态分析跑不了,所以只能动调

这个地方F7进去,得到加密部分

#SweetTofu wp
enc = [ 0x00, 0x0A, 0x07, 0x01, 0x1D, 0x3F, 0x09, 0x13, 0x39, 0x07, 
  0x08, 0x02, 0x39, 0x2F, 0x39, 0x21, 0x09, 0x02, 0x41, 0x15, 
  0x39, 0x25, 0x14, 0x03, 0x07, 0x12, 0x0F, 0x09, 0x08, 0x47, 
  0x22, 0x09, 0x08, 0x41, 0x12, 0x39, 0x04, 0x03, 0x39, 0x15, 
  0x03, 0x14, 0x0F, 0x09, 0x13, 0x15, 0x47, 0x1B]
flag = ''
for i in enc:
    flag += chr(i^0x66)
print(flag)
#flag{You_and_I_God's_Creation!Don't_be_serious!}

4. ArtBreaker

最大节点数改成99999

使用了Artfuscator的C编译器

GitHub - JuliaPoo/Artfuscator: A C compiler targeting an artistically pleasing nightmare for reverse engineers

5. Battle City

IDA分析有点费劲,还是rust编译的

关卡文件是ldtk文件,ldtk是一个2d游戏编译器

尝试把敌人都删掉了,发现进不了下一关,可以用水把它们卡在一起

每个关卡都用这个思路改一下,通关后得到

SICTF{Y0u_@Re_bat71e_C1ty_Ma5t3r}

6. Closeme

main的第一个函数跟进去

有一个疑似对资源进行解码的异或(注意&0xff防溢出)

#Closeme wp
v44 = [ 0x23, 0x11, 0x0D, 0x1B, 0x13, 0x4B, 0x18, 0x04, 0x03, 0x0A, 
  0x50, 0x08, 0x1D, 0x06, 0x54, 0x16, 0x1A, 0x18, 0x0B, 0x1C, 
  0x5A, 0x0F, 0x14, 0x18, 0x5E, 0x12, 0xE5, 0xF2, 0xF1, 0xE2, 
  0xE3, 0xE0, 0xE4, 0xE8, 0xF0, 0xA9, 0xE8, 0xF2, 0xAC, 0xEE, 
  0xE2, 0xE6, 0xF3, 0xFA, 0xB2, 0xF3, 0xCD, 0xF0, 0xE5, 0xF7, 
  0xB8, 0xF6, 0xE8, 0xBB, 0xFC, 0xD3, 0xF1, 0xFF, 0x8C, 0x81, 
  0xCB, 0xD7, 0x84, 0xD2, 0xCF, 0xCB, 0xC4, 0x89, 0xC8, 0xCE, 
  0x8C, 0xDE, 0xDA, 0xC0, 0xC2, 0xD4, 0xD6, 0x9D, 0x94, 0xFF, 
  0xC3, 0xC4, 0xCC, 0x99, 0xD9, 0xD3, 0xD3, 0xD2, 0xCD, 0xDA, 
  0xE0, 0x98, 0xA7, 0xB0, 0xEB, 0x8B, 0xA9, 0xEF, 0xF9, 0xE6, 
  0xFA, 0xE2, 0xEC, 0xA4, 0xA0, 0xEF, 0xB1, 0xF1, 0xB1, 0xB6, 
  0xA6, 0xA1, 0xB7, 0xBE, 0xB6, 0xF9, 0xB5, 0xA9, 0xB8, 0xB8, 
  0xAC, 0xFF, 0x97, 0x89, 0x8B, 0x80, 0x8C, 0xC5, 0x8F, 0x94, 
  0xC8, 0x9D, 0x82, 0x8E, 0xCC, 0x8B, 0x82, 0x8E, 0x97, 0xDD, 
  0xD2, 0x80, 0x81, 0x96, 0x9E, 0xD7, 0x99, 0x8A, 0xDA, 0xCB, 
  0xCD, 0xCD, 0xCE, 0xCE, 0x31, 0x31, 0x32, 0x2D, 0x24, 0x55, 
  0x6A, 0x62, 0x69, 0x7A, 0x6F, 0x2B, 0x7F, 0x78, 0x6C, 0x62, 
  0x79, 0x65, 0x32, 0x75, 0x78, 0x74, 0x71, 0x37, 0x6F, 0x71, 
  0x73, 0x78, 0x74, 0x3D, 0x6A, 0x77, 0x45, 0x01, 0x44, 0x4C, 
  0x56, 0x48, 0x47, 0x53, 0x08, 0x45, 0x43, 0x40, 0x49, 0x0D, 
  0x4E, 0x7C, 0x79, 0x72, 0x66, 0x75, 0x4F, 0x05, 0x07, 0x07, 
  0x08, 0x08, 0x0B, 0x0B, 0x0C, 0x40, 0x5E]
hint = ''
for i in range(len(v44)):
    hint += chr(v44[i] ^ (i+102) & 0xff)
print(hint)
#Every time you close the messagebox by click `Yes` or `No`, it will be stored. Just choose Yes/No(1/0) in a certain order which is the flag, such as 01001100. Please submit flag which the format like `SICTF{01001100}`

解出来得到一段hint,flag的输入是通过是否的点击表示的。

回到上面

这里应该是在创建弹窗

v20存储输入的是1还是0,v61用来计算长度,共16位

v60实际上是指向flag地址的指针,LABEL_4把每一位flag依次存入v22,v23,v24,v25,v26,v27,v28,v29,v30,v31,IpWindowNmae,v73,v54, v55,v32,v33

这里很复杂,似乎是转十进制的一个操作,实际上输入的1和0构成的是十进制,逆序之后按十进制存储

静态分析比较麻烦,这里我是动调

先利用点击是否进行输入,输入存储在v60里面,对着地址d几下就得到存储的偏移地址

比如说输入1010 1010 1010 1010

断在这里,查看v52

看起来很奇怪,实际上是小端序存储的十六进制数

输入进行了逆序

中间的算法实在看不懂,直接到判断这里看一看

取的高16位,1010 1001 1111 0001,应该经过了某种加密,大概率只是位置调换,不过只有两个数字,有点难看出来

输入1010 1001 1111 0001,动调得到63E5 0000

1010 1001 1111 0001逆序是1000 1111 1001 0101,对比密文勉强能看出来最后两位扔到前面去了

那么还原一下输入就应该是1010 1001 1111 0001前两位放到最后面(1010 0111 1100 0110),再逆序(0110 0011 1110 0101),也就是

SICTF{0110001111100101}

7. virus-?n?lys1s

32位的易语言程序

直接反编译啥也看不出来,后来才知道易语言有压缩壳

7.1. 第一问

免杀根本没学过,就随便看看吧。

白加黑就是通过DLL劫持在应用程序的导出目录中通过创建一个DLL并通过LoadLibrary函数(或者找一个已有的DLL注入恶意代码)来加载DLL文件。当目标尝试执行该文件(注意:不是执行受恶意的DLL文件)时,这个白文件会在应用程序加载时加载恶意的DLL。目标只要加载包含恶意代码的文件,攻击者就可以访问目标计算机了。

7.2. 第二问

Nw8f6里面看到对一个网址的请求 google,就是第二问答案了

010Editor看里面有没有PE文件

搜索DOS字段,发现PE文件头的特征

把这之后的数据复制下来新建一个十六进制文件,发现可以用dnspy打开了。

(这里如果虚拟机不走代理,会没有办法继续动调,可以把Nw8f6改一下保证它只会返回ok)

7.3. 第三问

虽然尚不清楚这个函数是怎么找到的,但是这里的16字节数组应该就是密钥

在这里下断点动调一波

密钥有了:0x264C7298BEE400000000000000000000

7.4. 第四问

要动调到这个位置, ArgenTINA.dll

7.5. 第五问

wyt.exe微步云沙箱可以扫出来(这里用的是修改过网络判定OK的版本)

7.6. 第六问

(这里用的是网络判定OK未修改的版本,就是刚提出来的PE文件),动态IP所以和官方wp可能会不一样

(甚至能看到第二问的网址)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:/a/405345.html

如若内容造成侵权/违法违规/事实不符,请联系我们进行投诉反馈qq邮箱809451989@qq.com,一经查实,立即删除!

相关文章

springboot网站开发01-如何搭建Maven类型父子嵌套结构项目

springboot网站开发01-如何搭建Maven类型父子嵌套结构项目!众所周知,实际上,在真正的公司项目开发中为了让代码实现更多的复用,提升项目的开发效率,节省开发的成本(人力成本较高,代码可以尽量复…

Django——ORM增删改查

基本对象 model.objects 创建数据 可以通过django编写的命令行方式快捷创建数据 python manage.py shell 如果对模型层有任何修改都需要重启shell,否则操作容易出错 在shell中我们需要先引入我们的模型,如from bookstore.models import Book 然后通过…

TiDB离线部署、Tiup部署TiDB

先做tidb准备工作: 部署 TiDB 前的环境检查操作:TiDB 环境与系统配置检查 | PingCAP 文档中心 1.查看数据盘 fdisk -l (2,3)本人的分区已经是 ext4 文件系统不用分区,具体官方文档的分区: 4.查看数据盘…

7.(数据结构)堆

7.1 相关概念 堆(Heap)在计算机科学中是一种特殊的数据结构,它通常被实现为一个可以看作完全二叉树的数组对象。以下是一些关于堆的基本概念: 数据结构: 堆是一个优先队列的抽象数据类型实现,通过完全二叉树…

Upload-Labs-Linux1【CTF】

拿到这道题目一看&#xff0c;发现是upload靶场&#xff1b;这不简简单单吗&#xff1b;结果中间还是遇到了一些小问题 小坑总结&#xff1a;该关只识别标准php语法&#xff1a;<?php phpinfo()?>格式&#xff1b;即<?php ?> 不识别<? phpinfo()?> &…

LeetCode---385周赛

题目 3042. 统计前后缀下标对 I 3043. 最长公共前缀的长度 3044. 出现频率最高的质数 3045. 统计前后缀下标对 II 一、最长公共前缀的长度 这题可以用字典树来做。 这里简单介绍一下字典树&#xff0c;顾名思义&#xff0c;这是用来存放单词的树&#xff0c;如何存&#x…

ThreeJS 几何体顶点position、法向量normal及uv坐标 | UV映射 - 法向量 - 包围盒

文章目录 几何体的顶点position、法向量normal及uv坐标UV映射UV坐标系UV坐标与顶点坐标设置UV坐标案例1&#xff1a;使用PlaneGeometry创建平面缓存几何体案例2&#xff1a;使用BufferGeometry创建平面缓存几何体 法向量 - 顶点法向量光照计算案例1&#xff1a;不设置顶点法向量…

第2讲:C语言数据类型和变量

第2讲&#xff1a;C语言数据类型和变量 目录1.数据类型介绍1.1字符型1.2整型1.3浮点型1.4 布尔类型1.5 各种数据类型的长度1.5.1 sizeof 操作符1.5.2 数据类型长度1.5.3 sizeof 中表达式不计算 2.signed 和 unsigned3.数据类型的取值范围4. 变量4.1 变量的创建4.2 变量的分类 5…

【前端素材】推荐优质后台管理系统Upcube平台模板(附源码)

一、需求分析 后台管理系统在多个层次上提供了丰富的功能和细致的管理手段&#xff0c;帮助管理员轻松管理和控制系统的各个方面。其灵活性和可扩展性使得后台管理系统成为各种网站、应用程序和系统不可或缺的管理工具。 当我们从多个层次来详细分析后台管理系统时&#xff0…

Conmi的正确答案——将JAVA中maven的.m2文件夹放到D盘

系统&#xff1a;WIN11 1、将.m2文件夹移动到D盘 移动后&#xff1a; 2、创建目录链接 mklink /j "C:\Users\Administrator\.m2" "D:\.m2"至此&#xff0c;maven默认的jar包会加载到D盘的.m2文件夹

C语言:数组的地址和数组首元素的地址的区别

数组的地址和数组首元素的地址在编译器上可能输出相同的地址 int main() {int arr[] { 1 };printf("%p\n", &arr);printf("%p\n", arr);return 0; }C和C等语言中&#xff0c;数组是一种复合数据类型&#xff0c;可以存储相同类型的多个元素。当我们谈…

重大更新:GPT-4 API 现全面向公众开放!

重大更新&#xff1a;GPT-4 API 现全面向公众开放&#xff01; 在 AIGC&#xff08;人工智能生成内容&#xff09;领域内&#xff0c;我们一直致力于跟踪和分析如 OpenAI、百度文心一言等大型语言模型&#xff08;LLM&#xff09;的进展及其在实际应用中的落地情况。我们还专注…

类型转换(C++)

一、C语言中的类型转换 在C语言中&#xff0c;如果赋值运算符左右两侧类型不同&#xff0c;或者形参与实参类型不匹配&#xff0c;或者返回值类型与 接收返回值类型不一致时&#xff0c;就需要发生类型转化&#xff0c;C语言中总共有两种形式的类型转换&#xff1a;隐式类型 …

Redis篇之缓存雪崩、击穿、穿透详解

学习材料&#xff1a;https://xiaolincoding.com/redis/cluster/cache_problem.html 缓存雪崩 什么是缓存雪崩 在面对业务量较大的查询场景时&#xff0c;会把数据库中的数据缓存至redis中&#xff0c;避免大量的读写请求同时访问mysql客户端导致系统崩溃。这种情况下&#x…

vite+ts+vue3项目配置

如何生成用户代码片段&#xff08;快捷生成代码&#xff09; 点击用户代码片段 新建全局代码片段&#xff0c;然后起个名字 {"vue": {"prefix": "vue","body": ["<template>"," <div class\"contai…

汽车大灯尾灯破裂修复用什么胶?

汽车大灯尾灯破裂可以使用硅酮玻璃胶或者环氧树脂胶进行修复。 硅酮玻璃胶的优点主要包括&#xff1a; 粘接力强&#xff1a;硅酮玻璃胶具有很强的粘接力&#xff0c;可以有效地将裂缝两侧的材料紧密粘合在一起。拉伸强度大&#xff1a;硅酮玻璃胶固化后形成的固体具有较高的…

2023最新盲盒交友脱单系统源码

源码获取方式 搜一搜&#xff1a;万能工具箱合集 点击资源库直接进去获取源码即可 如果没看到就是待更新&#xff0c;会陆续更新上 或 源码软件库 最新盲盒交友脱单系统源码&#xff0c;纸条广场&#xff0c;单独抽取/连抽/同城抽取/高质量盒子 新增功能包括心动推荐&#xff…

【深入理解设计模式】原型设计模式

原型设计模式 原型设计模式&#xff08;Prototype Pattern&#xff09;是一种创建型设计模式&#xff0c;它允许通过复制已有对象来创建新对象&#xff0c;而无需直接依赖它们的具体类。这种模式通常用于需要频繁创建相似对象的场景&#xff0c;以避免昂贵的创建操作或初始化过…

QT-串口工具

一、演示效果 二、关键程序 &#xff1a; #include "mainwindow.h" #include "ui_mainwindow.h"#include <QMessageBox>MainWindow::MainWindow(QWidget *parent) :QMainWindow(parent),ui(new Ui::MainWindow),listPlugins(QList<TabPluginInt…

ESP8266智能家居(4)——开发APP基础篇

1.前期准备 安装好Android studio 开发环境 准备一台完好的安卓手机 手机要处于开发者模式 设置 --->关于手机---> 一直点击版本号 &#xff08;不同手机进入开发者模式的步骤可能不太一样&#xff09; 进入开发者模式后&#xff0c;找到辅助功能&#xff0c;打开开…