首页 > 其他分享 >0xgame Re wk1 writeup

0xgame Re wk1 writeup

时间:2024-10-21 19:44:48浏览次数:1  
标签:__ 0xgame Pro Re int 字符串 v6 wk1 IDA

Oct 6
下午刚到北京的我又来水了

0xgame Re wk1 writeup

BabyBase

IDA Pro打开,找到encode方法,裸的base64。

BinaryMaster

这标题以为是在暗示二进制,结果跟二进制一点关系都没有。

运行程序,将八进制转化为十六进制数并输入即可获得flag,也可以直接用IDA Pro打开来找。盐豆不带盐的。出题人这样做,一定有他的意图。

SignSign

运行一下,给了一半flag,用IDA Pro打开,看字符串窗口可得到另一半。

Xor-Beginning

IDA Pro打开可看到对v5的赋值,这个就是密文了。下面有一个对v5的异或加密,可直接正向爆破,或逆向算法,逐项+i再^78。

#include<bits/stdc++.h>
using namespace std;
int main()
{
  string v5="~5\v*',3";
  for(int i=7;i<=29;i++)
   v5+='*';
  v5[7] = 31;
  v5[8] = 118;
  v5[9] = 55;
  v5[10] = 27;
  v5[11] = 114;
  v5[12] = 49;
  v5[13] = 30;
  v5[14] = 54;
  v5[15] = 12;
  v5[16] = 76;
  v5[17] = 68;
  v5[18] = 99;
  v5[19] = 114;
  v5[20] = 87;
  v5[21] = 73;
  v5[22] = 8;
  v5[23] = 69;
  v5[24] = 66;
  v5[25] = 1;
  v5[26] = 90;
  v5[27] = 4;
  v5[28] = 19;
  v5[29] = 76;
 // cout<<v5;
  for(int i=0;i<v5.length();i++)
   for(char j='!';j<='~';j++)
    {
    	if(char(j^78-i)==v5[i])
    	{
    		printf("%c",j);
    		break;
		}
	}
      
  return 0;
 } 
//0xGame{X0r_1s_v3ry_Imp0rt4n7!}

Xor-Endian

想到了名曲《奇异恩典》

用DIE看一眼,是ELF文件。打开后发现:

根据下文v7与v6比较,按理来说v6应该是一个完整的字符串,但是却以int型存储(IDA Pro特有的整型走天下),所以v6事实上是一个长度为12*4=48的字符型数组(也就是字符串)。再点进encrypt:

__int64 __fastcall encrypt(__int64 a1, __int64 a2, int a3, int a4)
{
  int i; // [rsp+24h] [rbp-4h]

  for ( i = 0; i < a3; ++i )
    *(_BYTE *)(i + a1) ^= *(_BYTE *)(i % a4 + a2);
  return 0LL;
}

把_BYTE一顿改(其实不改也挺清楚)就能看出该段加密是对输入字符串的每一项进行一个异或操作,异或的值是字符串“Key0xGame2024”中的某一项(每13个字符轮回一次),所以我们解密的时候再异或回去就行。

这题的一个重点是如何正确地获取v6的值。由于我对IDA Pro还不是很熟悉,改了几次v6的类型还是没什么效果,直接Shift+e又有中文混入其中。所以只能逐项按热键R:

  v6[0] = 'Q>\x1D{';
  v6[1] = '\x0F\x1A"\x15';
  v6[2] = 'VQ\nV';
  v6[3] = 'T](\0';
  v6[4] = '\x05tK\a';
  v6[5] = '\bTQ@';
  v6[6] = 'Vr\x19T';
  v6[7] = 'vU\x04\x1D';
  v6[8] = 'WT\vV';
  v6[9] = 'sU\v\a';
  v6[10] = '\x05\bO\x01';
  v6[11] = 0;

然后让AI来帮我提取:

转的时候注意小端序存储,每四位ASCII应该倒过来。然后写脚本来解密:

#include<bits/stdc++.h>
using namespace std;
char v6[]={123,29,62,81,21,34,26,15,86,10,81,86,0,40,93,84,7,75,116,5,64,81,84,8,84,25,114,86,29,4,85,118,86,9,84,87,7,9,85,115,1,79,8,5,0};
int main()
{
	string a2="Key0xGame2024";
	for(int i=0;i<44;i++)
	{
	    if(v6[i]==9)v6[i]=11;//修正AI转换时的错误 
		int x=(a2[i%13]);
		v6[i]^=x;
       printf("%c",v6[i]);
	}
	return 0;
	
}
//0xGame{b38ad4c8-733d-4f8f-93d4-17f1e79a8d68}

解释一下第9行。由于不知道什么原因,AI将转义‘\v’的ASCII值识别为9,但其实应该是11。本来我也没发现这一点,但是直接按AI提取的字符串来解密结果会有一个分号,在一众小写字母,数字和连字符中显得格格不入,所以找到它并修正。然后就可以得到正确的flag。

END

准备被wk2薄纱了QAQ

踊レ、歌エ、一心不乱に回レ!今宵は雪月花

ーー「回レ!雪月花

​ 日日夜夜(bushi

话说夜夜真的很像一位绿头发的老奶奶啊(各方面),是谁呢是谁呢(

标签:__,0xgame,Pro,Re,int,字符串,v6,wk1,IDA
From: https://www.cnblogs.com/misaki-mei2024/p/18449322

相关文章

  • 0xgame re wk2 writeup
    0xgamerewk2wpFirstSight-Pyc直接在线反编译。#!/usr/bin/envpython#visithttps://tool.lu/pyc/formoreinformation#Version:Python3.8importhashlibuser_input=input('请输入神秘代号:')ifuser_input!='Ciallo~':print('代号不是这个哦&#......
  • 目前最新 ReflectorInstaller_11.1.0.2067 .NET 反编译软件
    目前最新ReflectorInstaller_11.1.0.2067.NET反编译软件一、简介二、.NETReflector的主要功能包括:1.**反编译**:反编译是将已编译的.NET程序集(如.dll或.exe文件)转换回可读的源代码。这使得开发者可以查看和学习第三方库的实现细节,或者在没有源代码的情况下进行故障......
  • nodejs+vue+express化妆品商城购物推荐系统9t10
    目录项目介绍具体实现截图技术栈支持phpnodejsjavapython开发工具和技术简介错误处理和异常处理nodejs类核心代码部分展示解决的思路其他题目推荐源码获取/联系我项目介绍论文主要是对化妆品购物商城系统进行了介绍,包括研究的现状,还有涉及的开发背景,然后还对系统......
  • 内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)
    内网穿透:如何借助Cloudflare连接没有公网的电脑的远程桌面(RDP)-含详细原理配置说明介绍前言远程桌面协议(RDP,RemoteDesktopProtocol)可用于远程桌面连接,Windows系统(家庭版除外)也是支持这种协议的,无需安装额外客户端即可实现类似向日葵、toDesk等的远程桌面访问与控......
  • Mongodb(4)索引,查看执行计划,聚合操作aggregate,表关联查询,批量插入测试数据,执行计
    创建索引,支持:单键索引、复合索引,唯一索引创建索引后台执行db.books.createIndex({open:1,close:1},{background:true})对内嵌文档字段创建索引:db.books.createIndex({"author.name":1})创建唯一索引db.books.createIndex({title:1},{unique:true})在包含嵌套对象的......
  • 当coretypes.dll守护者缺席:一键解锁应用程序故障自救秘籍
    在计算机的世界里,每一个小小的文件都承载着巨大的责任。而coretypes.dll,这个看似不起眼的动态链接库文件,却是许多应用程序正常运行的守护神。它负责提供核心类型定义和功能支持,一旦丢失或损坏,你的应用程序可能会立刻陷入困境,出现无法启动、崩溃或功能异常等问题。然而,面对这......
  • Nuxt.js 应用中的 build:before 事件钩子详解
    1.概述build:before 钩子提供了一种方法,让开发者能够在构建即将开始时修改配置或执行特定的前置逻辑。这对配置和文件准备工作尤其有用。2.build:before钩子的详细说明2.1钩子的定义与作用定义: build:before 是Nuxt.js生命周期的一部分,允许开发者在打包......
  • 五款实用报表工具推荐:从山海鲸到 JasperReports,哪个更适合你?
    概述在现代数据驱动的商业环境中,选择一款合适的报表工具对于企业的决策制定和数据管理至关重要。本文将为您介绍五款各具特色的免费或开源报表工具,包括国内的山海鲸报表、开源的Superset、云端友好的LookerStudio以及企业级的ZohoAnalytics和JasperReports。本文将详细对......
  • 使用 Cloudlfare 获取 IPV4 以及 IPV6 的测试
    前言,最近Cloudflare的IP获取有些变化,导致获取用户的IP出现一些问题,经过测试记录一下以下解释以PHP中的$_SERVER中的值为例一般来说,在不使用反向代理的情况下,我们通常使用REMOTE_ADDR获取客户端的IPREMOTE_ADDR但是在使用了反向代理之后,我们使用HTTP_X_FORWARD......
  • JAVA拦截器配合JWT、ThreadLocal的登录校验
    @TOC拦截器配合JWT、ThreadLocal的登录校验关于为什么要写这篇文章,今天在做项目的时候发现配置了拦截器,但是不生效,最后排查半天发现引入包有问题,遂决定写一篇详细的拦截器的使用。举例也都是根据案例写的,可能会有些许阅读困难,这里面的示例的TOKEN是在请求头里面的。使用......