攻防世界 re 新手模式 2

news2024/9/9 0:22:45

IgniteMe

32位无壳

一些简单信息,看关键函数

可以得到v7[i]的值

比较简单的逆向

#include<stdio.h>
#include<string.h>
int main()
{
	char flag[40];
	char s[40];
	char str[]="GONDPHyGjPEKruv{{pj]X@rF";
	char ch[] =
{
  0x0D, 0x13, 0x17, 0x11, 0x02, 0x01, 0x20, 0x1D, 0x0C, 0x02, 
  0x19, 0x2F, 0x17, 0x2B, 0x24, 0x1F, 0x1E, 0x16, 0x09, 0x0F, 
  0x15, 0x27, 0x13, 0x26, 0x0A, 0x2F, 0x1E, 0x1A, 0x2D, 0x0C, 
  0x22, 0x04
};
	int i,j;
	for(i=0;i<32;i++)
	{
		s[i]=str[i]^ch[i];
		flag[i]=(s[i]-72)^0x55;
	}
	puts(flag);
	return 0;
 } 
 //WADX_TDGK_AIHC_IHKN_PJLM

把大写变为小写,然后加上EIS前缀即可

BABYRE

学习:http://t.csdnimg.cn/zKQAl

一开始看到有点蒙,学习

 (__fastcall **)是函数的调用约定

__stdcall、__cdecl和__fastcall是三种函数调用协议,函数调用协议会影响函数参数的入栈方式、栈内数据的清除方式、编译器函数名的修饰规则等。

 开始for循环那里可能是混淆

静态

学习:http://t.csdnimg.cn/qlbUD

我们大概思路了解了以后发现由于ida版本不同脚本不能直接使用了

http://t.csdnimg.cn/kkOyp

sfift  f2选择python

from ida_bytes import *
addr=0x600b00
for i in range(182):
    patch_byte(addr+i,get_byte(addr+i)^0xC)

 先c 再p构建函数,f5

 得到关键函数了

V2V3,有一点问题,影响不大

写个脚本逆回去即可

#include<stdio.h>
#include<string.h>
int main()
{
	int i,n;
	char ch[]="fmcd\x7fk7d;V`;np" ;
	char flag[80];
	for(i=0;i<=13;i++)
	{
		flag[i]=ch[i]^i;
	}
	puts(flag);
	return 0;
 } 
//flag{n1c3_j0b}

动态

远程连接虚拟机,在judge那里下断点

parallel-comparator-200

下载得到的是一个C语言的代码文件

#include <stdlib.h>
#include <stdio.h>
#include <pthread.h>

#define FLAG_LEN 20

void * checking(void *arg) {//checking函数 
    char *result = malloc(sizeof(char));//分配空间 
    char *argument = (char *)arg;//赋值 
    *result = (argument[0]+argument[1]) ^ argument[2];//关键异或 
    return result;
}

int highly_optimized_parallel_comparsion(char *user_string)
{
    int initialization_number;
    int i;
    char generated_string[FLAG_LEN + 1];
    generated_string[FLAG_LEN] = '\0';

    while ((initialization_number = random()) >= 64);
    
    int first_letter;
    first_letter = (initialization_number % 26) + 97;//小写字母 

    pthread_t thread[FLAG_LEN];
    //pthread_t thread; 声明了一个线程标识符ID ,只有通过线程ID才能运行函数
    char differences[FLAG_LEN] = {0, 9, -9, -1, 13, -13, -4, -11, -9, -1, -7, 6, -13, 13, 3, 9, -13, -11, 6, -7};
    char *arguments[20];
    for (i = 0; i < FLAG_LEN; i++) {
        arguments[i] = (char *)malloc(3*sizeof(char));//分配空间 
        arguments[i][0] = first_letter;//小写字母 
        arguments[i][1] = differences[i];//已知 
        arguments[i][2] = user_string[i];//待求 
		//二维数组,userstring待求 
        pthread_create((pthread_t*)(thread+i), NULL, checking, arguments[i]);
        //创建一个线程,调用了checking函数 
    }

    void *result;
    int just_a_string[FLAG_LEN] = {115, 116, 114, 97, 110, 103, 101, 95, 115, 116, 114, 105, 110, 103, 95, 105, 116, 95, 105, 115};
    for (i = 0; i < FLAG_LEN; i++) {
        pthread_join(*(thread+i), &result);
        generated_string[i] = *(char *)result + just_a_string[i];
        //结合下面,应该是的result为0 
        free(result);
        free(arguments[i]);
    }

    int is_ok = 1;
    for (i = 0; i < FLAG_LEN; i++) {
        if (generated_string[i] != just_a_string[i])//使其相等,右边数组已知 
            return 0;
    }
    return 1;
}

int main()
{
    char *user_string = (char *)calloc(FLAG_LEN+1, sizeof(char));//分配内存 
    fgets(user_string, FLAG_LEN+1, stdin);//读入 
    int is_ok = highly_optimized_parallel_comparsion(user_string);//调用函数 
    if (is_ok)//要求isok不为0 
        printf("You win!\n");
    else
        printf("Wrong!\n");
    return 0;
}

头文件pthread.h

http://t.csdnimg.cn/4reHy

参考pthrad.h中的函数以及man手册,列举了pthread库中的工具函数并做了分类。pthread库中的重点当然是thread、mutex和condition。此外,pthread提供了读写锁、自旋锁的实现,以及控制多线程启动的pthread_barrier和线程全局变量(thread_local)的实现。帮助我们快速开发多线程的访问控制。

 读取代码,just数组给了值,但用不到,是为了得到result=0,分析写暴力脚本,随机数取值在外面注意。

 发现lucky长得像flag

 secret-galaxy-300

http://t.csdnimg.cn/g4fRsg

感觉这个题有点难

给了三个文件

发现这只是三个同一类型文件的三个不同版本而已,一个windows32位exe,另外两个分别是32位和64位的ELF的linux可执行文件

看main函数里面主要有两个函数

先看fill函数

Galaxy里面有六个元素,而只打印了五个,所以问题就出现在了这里

对dark交叉引用

想试试动调

不知道有什么问题

闪退

我要摆烂啦!!!!

 

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

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

AI到底有没有前景?到底要不要学习AI?

前言 在当今这个科技飞速发展的时代&#xff0c;人工智能&#xff08;AI&#xff09;已经成为了一个热门话题。对于想要进入这一领域的学习者来说&#xff0c;心中难免会有一些疑问&#xff1a;“AI到底有没有前景&#xff1f;”、“我到底要不要学习AI&#xff1f;”、“我学…

Vue使用阿里巴巴字体

阿里巴巴字体使用效果 字体包下载 官方下载链接 解压字体文件到指定的文件夹 引用字体文件 我的是uniApp的项目&#xff0c;所以在公共css样式中引用这个字体文件 /*每个页面公共css */ font-face {font-family: "alimamFont";font-weight: 400;src: url("~/s…

Could not install packages due to an EnvironmentError: [WinError 5]

Could not install packages due to an EnvironmentError: [WinError 5] 欢迎来到英杰社区https://bbs.csdn.net/topics/617804998 欢迎来到我的主页&#xff0c;我是博主英杰&#xff0c;211科班出身&#xff0c;就职于医疗科技公司&#xff0c;热衷分享知识&#xff0c;武汉城…

WordPress原创插件:启用关闭经典编辑器和小工具

WordPress原创插件&#xff1a;启用关闭经典编辑器和小工具 主要功能 如图所示&#xff0c;用于启用或禁用经典编辑器和经典小工具&#xff0c;以替代Gutenberg编辑器。 插件下载 https://download.csdn.net/download/huayula/89592822

[Windows CMD] 检测网络连通性 ping

ping 是一个非常常用的网络工具&#xff0c;用于测试网络连接的可达性和测量网络延迟。它通过发送 ICMP (Internet Control Message Protocol) Echo Request 数据包到目标主机&#xff0c;并等待接收回显应答 (Echo Reply) 来工作。ping 命令可以帮助您快速检测网络问题&#x…

oracle 19c RAC-OracleLinux8.10安装19c遇到的问题

问题一&#xff1a; 操作系统是OracleLinux8.10 使用$ORACLE_HOME/gridSetup.sh -applyPSU /patch/36582629 安装集群正常&#xff0c;但安装数据库软件时 $ORACLE_HOME/runInstaller -applyPSU /patch/36582629报错&#xff0c;因赶工不使用applyPSU参数安装正常&#xff0c…

一款超实用的网络实时监控工具,助你轻松掌握 Docker 容器网络状态

1. 什么是 check-docker-connection check-docker-connection 主要用于监控 Docker 容器的网络连接情况。它可以显示指定容器的网络连接状态&#xff0c;包括 TCP 和 UDP 连接的数量。用户可以通过容器 ID 或名称来指定要监控的容器&#xff0c;或者指定显示连接数最多的前 N …

linux:用户管理,增删改

1.查看当前登录的用户信息 [root@bgx ~]# id #查看当前所登陆的用户信息 # uid:用户id,系统只能识别uid,不能识别名字,人看名字 # gid:组id uid=0(root) gid=0(root) groups=0(root) [root@bgx ~]# id oldboy #查看其它用户的信息 uid=1000(oldboy) gid=1000(oldboy) g…

【CTFHub】文件上传漏洞详解!

Webshell&#xff1a; 又称一句话木马。WebShell就是以网页文件形式存在的一种代码执行环境&#xff0c;主要用于网站管理、服务器管理、权限管理等操作。 WebShell根据不同的语言分为:ASP木马、PHP木马、JSP木马(上传解析类型取决于网站服务端编写语言类)&#xff0c;该类木马…

生成式人工智能的下一代基础设施是集群系统

GenAI 的存储和网络 本研究报告探讨了生成式人工智能 (GenAI) 在转变人工智能数据中心方面的关键作用。强调了存储和网络在支持人工智能/机器学习工作负载方面的重要性。 我们强调需要高容量、经济高效的存储&#xff0c;以处理不同数据处理阶段的不同 I/O 模式。 还讨论了检…

如何使用CANoe自带的TCP/IP Stack验证TCP的零窗口探测机制

如果想利用CANoe自带的TCP/IP协议栈验证TCP的零窗口探测机制,就必须添加一个网络节点并配置独立的CANoe TCP/IP协议栈,作为验证对象。而与它进行TCP通信的对端也是一个网络节点,但不要配置TCP/IP协议栈,而是使用CAPL代码在底层组装TCP报文模拟TCP通信过程。这样可以尽量减少…

项目实战_表白墙(简易版)

你能学到什么 一个比较简单的项目&#xff1a;表白墙&#xff08;简易版&#xff09;&#xff0c;浏览器&#xff1a;谷歌升级版将在下个博客发布 效果如下 正文 说明 我们是从0开始一步一步做这个项目的&#xff0c;里面的各种问题&#xff0c;我也会以第一人称视角来解…

国服最强文字转音频?Fish Speech

官网文档与示例 Fish Speech V1.2 是一款领先的文本到语音 (TTS) 模型&#xff0c;使用 30 万小时的英语、中文和日语音频数据进行训练。我尝试用1066运行&#xff0c;但是质量不尽如人意&#xff0c;建议使用RTX系列的显卡进行推理。 使用结果展示 text """20…

有哪些高性价比开放式耳机推荐?五大实力超群热门款分享

开放式耳机的优点包括不堵塞耳道&#xff0c;佩戴稳固性高&#xff0c;能较好的感知外界的声音等等&#xff0c;以上这些优势使得开放式耳机特别适配户外运动场景&#xff0c;在工作、日常生活等场景下使用也是绰绰有余。有哪些高性价比开放式耳机推荐&#xff1f;如果你还不知…

常用传感器讲解十五--触摸传感器(KY-036)

常用传感器讲解十五–触摸传感器&#xff08;KY-036&#xff09; 具体讲解 这个比较简单&#xff0c;就是触摸后给个信号 电路连接 在Arduino上将VCC引脚连接到5V。 将GND连接到Arduino的GND。 将OUT连接到Arduino上的D2 代码实现 void setup() {pinMode(2, INPUT);Seri…

鸿蒙HarmonyOS开发:@Observed装饰器和@ObjectLink装饰器:嵌套类对象属性变化

文章目录 一、装饰器二、概述三、限制条件四、装饰器说明五、Toggle组件1、子组件2、接口3、ToggleType枚举4、事件 六、示例演示1、代码2、效果 一、装饰器 State装饰器&#xff1a;组件内状态Prop装饰器&#xff1a;父子单向同步Link装饰器&#xff1a;父子双向同步Provide装…

大模型是如何“炼”成的?揭秘AI背后的训练秘籍!

在当今科技飞速发展的时代&#xff0c;大模型&#xff08;Large Language Models&#xff09;已成为人工智能领域的璀璨明星。它们如同经过精心雕琢的艺术品&#xff0c;能够处理各种复杂的任务。然而&#xff0c;这些大模型并非天生如此强大&#xff0c;它们需要经过严格的训练…

VScode | 我的常用插件分享

系列文章目录 本系列文章主要分享作位前端开发的工具之------VScode的使用分享。 文章目录 目录 系列文章目录 文章目录 前言 一、Vetur 三、别名路径跳转 四、Prettier 五、koroFileHeader 六、vue-helper 总结 前言 本文主要分享VScode的好用插件。 一、Vetur Vue的Vetur插…

秒懂C++之vector(上)

目录 一.vector定义 二.vector常用接口 2.1 vector iterator迭代器 2.2 reserve 扩容 2.3 insert 插入 三.对象数组 3.1 例题 3.2 小拓展 一.vector定义 vector本质就是一个顺序表 #include <iostream> #include <vector> using namespace std;void func(ve…