两道逆向CTF题

2024-03-02 16:59
文章标签 ctf 逆向 两道

本文主要是介绍两道逆向CTF题,希望对大家解决编程问题提供一定的参考价值,需要的开发者们随着小编来一起学习吧!

题目链接:https://pan.baidu.com/s/1rToDORyPLcsrlVT3WSWuCA
提取码:2f1m

第一题re1

1、用查壳工具检查程序没加壳,使用IDA64打开,找到main()函数,按F5进行反编译
在这里插入图片描述
2、(方法一)把v7转化成字符串,有7个字符以及一个结束符‘\0’,可以注意到v7和v8的地址是连着的,又是小端存储的方式,所以v7实际上"harambe"
在这里插入图片描述
sub_4007C0()函数打印不正确,所以flag的长度就等于v8的长度,而v8[i % v6 - 8]实际上就是v7[i % v6]
在这里插入图片描述
在这里插入图片描述
(方法二)或者直接把v7的类型改成char类型,已经知道v7和v8的地址是连着的,v7的长度是8+v8的长度28=36,所以直接把v7改成char v7[36],后面的代码也会相应的改变
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
3、编写脚本

//方法一
#include<stdio.h>int main()
{int i;char flag[19]="";char v7[]="harambe";char v8[]=":\"AL_RT^L*.?+6/46";int v6=7;for(i=0;i<18;i++){flag[i] = (char)(v7[i % v6] ^ v8[i]);}printf("%s",flag);return 0;
}//方法二
#include<stdio.h>
#include<string.h>int main()
{int i;char v7[36]="";char flag[19]="";int v6=7;strcpy(&v7[8], ":\"AL_RT^L*.?+6/46");strcpy(v7, "harambe");for(i=0;i<18;i++){flag[i] = (char)(v7[i % v6] ^ v7[i + 8]);}printf("%s",flag);return 0;
}

在这里插入图片描述

第二题IgniteMe

1、用查壳工具检查程序没加壳,使用IDA32打开,在start()函数,按F5进行反编译
在这里插入图片描述
2、所以sub_401050()函数要返回1,byte_403180就等于byte_403000,而byte_403000和v4已知,所以就知道byte_403078
在这里插入图片描述
在这里插入图片描述
v4的值
3、求v4的值
(1)__ROL4__函数是向左移了4位,0x80070000是十六进制,移4位以后的十六进制就是0x00700008,在右移一位,后16位就是0x0004,v4是char类型,就是0x04
(2)使用Ollydbg动态调试,在00401000处按F2下个断点,按F9运行,在命令行里面随便输入字符回车,再按F8单步调试RETN,可以看到EAX值为函数返回的v4的值,v4为char类型,即0x04
在这里插入图片描述
在这里插入图片描述
(3)在给v4赋值后面一句代码以及sub_401000函数里面返回处下断点按F2下断点,按F9进行调试
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
点击按钮运行,输入字符串,点击Debugger windows选择Locals
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述
按F8进行单步调试,可以看到v4的值为0x04
在这里插入图片描述
4、已经知道byte_403078,它等于v5,flag又等于v5,倒推回去就可以得到flag
在这里插入图片描述
5、编写脚本

#include<stdio.h>int main()
{int flag[40] = {0};int v4 = 4;int i;int v1=39;   //byte_403180的长度int byte_403180[40]={0x0D,0x26,0x49,0x45,0x2A,0x17,0x78,0x44,0x2B,0x6C,0x5D,0x5E,0x45,0x12,0x2F,0x17,0x2B,0x44,0x6F,0x6E,0x56,0x09,0x5F,0x45,0x47,0x73,0x26,0x0A,0x0D,0x13,0x17,0x48,0x42,0x01,0x40,0x4D,0x0C,0x02,0x69};for ( i = v1 - 1; i >= 0; --i ){flag[i] = v4 ^ byte_403180[i];v4 = flag[i];}for(i=0; i<39; i++){printf("%c", flag[i]);}return 0;
}

在这里插入图片描述

这篇关于两道逆向CTF题的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



http://www.chinasem.cn/article/766827

相关文章

逆向学习汇编篇:内存管理与寻址方式

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/3ceeb9ae6d98​​ 在汇编语言的世界中,内存管理和寻址方式是构建程序的基础。理解这些概念不仅对于编写高效的汇编代码至关重要,也是进行逆向工程分析的关键技能。本文将深入探讨内存管理的基本原则和多种寻址方式,并通过代码案例来展示它们的实际应用。 1. 内存管理 内存管理涉及如何分配

【Android逆向】小白也能学会的一个小时破解某猫社区VIP会员

第二步:使用 dex2jar 将 classes.dex 转成 jar 文件 cmd到dex2jar文件夹目录,执行 d2j-dex2jar D://xxx/xxx/classes.dex 得到 jar 文件 静态分析 拿到源码后,首先我们需要找到应用的限制点,绕过App里面的判断。 然后分析源码,该从哪里开始入手呢? 我们都知道,一个完整Android应用,可能会存在各

CTF-蓝帽杯 2022 初赛Misc计算机取证题目详解

使用工具:Volatility、Passware Kit、Arsenal Image Mounter、DiskGenius 题目文件如下: 首先要知道这些文件是什么: dmp后缀指Dump文件,是windows系统中的错误转储文件。包含计算机程序运行时的内存信息的文件。通常操作系统或应用程序在遇到系统崩溃、死机或其他严重错误时,会自动将程序运行环境的所有信息导出到一个.dmp文件中。所以

【java编程(在线笔试)】【链表】两道k个一组翻转链表题目(包含非递归和递归两种解法)

一、给你一个链表,每 k 个节点一组进行翻转,请你返回翻转后的链表。如果节点总数不是 k 的整数倍,那么请将最后剩余的节点也翻转顺序。 1. 非递归解法 /*** Definition for singly-linked list.* public class ListNode {* int val;* ListNode next;* ListNode(int x) {

记一次好笑的逆向过程

为什么说是好笑,看到最后就明白了。 目标链接:url 打xhr断点并发起请求: 查看调用栈,发现了发起request的位置: 向上查看代码,发现了这个东西: 知道ajax请求里的signature参数和rs参数是从哪里来的。看一下这部分代码,可以知道构造url时的u,d,t来自哪里 u,d,t三个参数里,u和d很容易理解,主要是t参数如何获取,所以在这里重新开始打断点。

记一次js逆向过程

目标:sec 通过抓包可以知道,列表页内容来自: 一共请求了两次这个链接,通过截图可知道,第一次请求什么都没拿到,第二次请求才拿到数据。看一下第二次请求的参数,可以知道,主要是post的data中加了参数:code=***,所以现在主要问题就是找到这一串参数怎么来的。因为在其他请求中找不到同样的参数内容,所以考虑基本就是js加载出来的,所以开始打断点调试。根据链接打一个xhr断点: 打断点调

逆向学习COM篇:通过注册表管理COM组件

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/a1b4228ba501​​ 在Windows操作系统中,COM(Component Object Model)组件的注册和反注册是开发和维护过程中的重要环节。本文将详细介绍如何通过注册表来注册和反注册COM组件,以及如何利用接口ID(IID)和组件ID(CLSID)在注册表中查找组件路径。

120.网络游戏逆向分析与漏洞攻防-邮件系统数据分析-邮件发送功能的封装

免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动! 如果看不懂、不知道现在做的什么,那就跟着做完看效果,代码看不懂是正常的,只要会抄就行,抄着抄着就能懂了 内容参考于:易道云信息技术研究院 上一个内容:119.邮件读取与删除功能的封装 码云版本号:656c6614f9e14f880c1d3db2c1583031933b52de 代码下载地址,在 titan 目录下,文件名

MyBatis逆向生成配置XML及详解

配置XML示例: <?xml version="1.0" encoding="UTF-8"?><!DOCTYPE generatorConfigurationPUBLIC "-//mybatis.org//DTD MyBatis Generator Configuration 1.0//EN""http://mybatis.org/dtd/mybatis-generator-config_1_

逆向学习网络篇:通过Socket建立连接并传输数据

本节课在线学习视频(网盘地址,保存后即可免费观看): ​​https://pan.quark.cn/s/992f89f6f1f4​​ 在网络编程中,Socket是一种提供不同计算机之间通信的机制。通过Socket,我们可以建立客户端和服务器之间的连接,并实现数据的传输。本文将详细介绍如何使用Socket在客户端和服务器之间建立连接,并进行数据传输。我们将通过几个代码案例来展示这一过程。 1.