IT数码 购物 网址 头条 软件 日历 阅读 图书馆
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
图片批量下载器
↓批量下载图片,美女图库↓
图片自动播放器
↓图片自动播放器↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁
 
   -> C++知识库 -> buu-[ACTF新生赛2020]SoulLike -> 正文阅读

[C++知识库]buu-[ACTF新生赛2020]SoulLike

64位elf文件
在这里插入图片描述
64位ida查看字符串跟进main函数

__int64 __fastcall main(__int64 a1, char **a2, char **a3)
{
  char v3; // al
  __int64 result; // rax
  char v5; // [rsp+7h] [rbp-B9h]
  signed int i; // [rsp+8h] [rbp-B8h]
  signed int j; // [rsp+Ch] [rbp-B4h]
  int v8[14]; // [rsp+10h] [rbp-B0h]
  int v9; // [rsp+4Ah] [rbp-76h]
  __int16 v10; // [rsp+4Eh] [rbp-72h]
  char v11[17]; // [rsp+50h] [rbp-70h]
  char v12; // [rsp+61h] [rbp-5Fh]
  unsigned __int64 v13; // [rsp+B8h] [rbp-8h]

  v13 = __readfsqword(0x28u);
  printf("input flag:", a2, a3);
  scanf("%s", v11);
  v9 = 'ftca';
  v10 = '{';
  v5 = 1;
  for ( i = 0; i <= 4; ++i )
  {
    if ( *((_BYTE *)&v9 + i) != v11[i] )
    {
      v5 = 0;
      goto LABEL_6;
    }
  }
  if ( !v5 )
    goto LABEL_19;
LABEL_6:
  for ( j = 0; j <= 11; ++j )
    v8[j] = v11[j + 5];
  v3 = (unsigned __int8)sub_83A(v8) && v12 == '}' ? 1 : 0;
  if ( v3 )
  {
    printf("That's true! flag is %s", v11);
    result = 0LL;
  }
  else
  {
LABEL_19:
    printf("Try another time...");
    result = 0LL;
  }
  return result;
}

上下是判定头字符串的actf{}
主要看sub_83A
ida提示too big function
在这里插入图片描述
百度得到只需要修改配置文件IDA\cfg\hexrays.cfg

找到:
MAX_FUNCSIZE            = 64        // Functions over 64K are not decompiled
修改为:
MAX_FUNCSIZE            = 1024        // Functions over 64K are not decompiled

重启ida,让函数再跑一会儿
在这里插入图片描述

卡完是一个三千多行的函数
在这里插入图片描述
总结:
输入的值经历三千行的变换后等于数组v4的值
逆向是不可能逆向的,直接开始爆破

#include <stdlib.h>
#include <stdio.h>
#include <string.h>
int v4[]={126,50,37,88,89,107,53,110,0,19,30,56};
int sub_83A(char *v1,int i)
{
	*v1 ^= 43u;
	v1[1] ^= 108u;
	v1[2] ^= 126u;
	v1[3] ^= 86u;
	//略 直接复制源代码就行
	v1[8] ^= 0x6Bu;
	v1[9] ^= 0x70u;
	v1[10] ^= 0x29u;
	v1[11] ^= 0x3Bu;
	if(v1[i] == v4[i])
		return 1;
	else
	    return 0;
}

int main()
{
	int i,j;
	char flag[13] = "";
	char tmp[13] = "";
	for(i = 0; i < 12 ; i++)
	{
	    for(j = 33; j <= 126 ; j++)
	    {
	        strcpy(flag,tmp);
	        flag[i] = j;
	        if(sub_83A(flag,i))
	        {
	            tmp[i] = j;
	            break;
	        }
	    }
	}
	printf("actf{%s}\n",tmp);
	return 0;
}

在这里插入图片描述

flag{b0Nf|Re_LiT!}

  C++知识库 最新文章
【C++】友元、嵌套类、异常、RTTI、类型转换
通讯录的思路与实现(C语言)
C++PrimerPlus 第七章 函数-C++的编程模块(
Problem C: 算法9-9~9-12:平衡二叉树的基本
MSVC C++ UTF-8编程
C++进阶 多态原理
简单string类c++实现
我的年度总结
【C语言】以深厚地基筑伟岸高楼-基础篇(六
c语言常见错误合集
上一篇文章      下一篇文章      查看所有文章
加:2022-04-04 11:50:13  更:2022-04-04 11:50:40 
 
开发: C++知识库 Java知识库 JavaScript Python PHP知识库 人工智能 区块链 大数据 移动开发 嵌入式 开发工具 数据结构与算法 开发测试 游戏开发 网络协议 系统运维
教程: HTML教程 CSS教程 JavaScript教程 Go语言教程 JQuery教程 VUE教程 VUE3教程 Bootstrap教程 SQL数据库教程 C语言教程 C++教程 Java教程 Python教程 Python3教程 C#教程
数码: 电脑 笔记本 显卡 显示器 固态硬盘 硬盘 耳机 手机 iphone vivo oppo 小米 华为 单反 装机 图拉丁

360图书馆 购物 三丰科技 阅读网 日历 万年历 2024年11日历 -2024/11/24 0:57:36-

图片自动播放器
↓图片自动播放器↓
TxT小说阅读器
↓语音阅读,小说下载,古典文学↓
一键清除垃圾
↓轻轻一点,清除系统垃圾↓
图片批量下载器
↓批量下载图片,美女图库↓
  网站联系: qq:121756557 email:121756557@qq.com  IT数码