EasyRE WriteUp

2023-12-05 19:48
文章标签 writeup easyre

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

目录

  • 0x0 新知识
  • 0x1 运行
  • 0x2 查壳
  • 0x3 载入IDA 32bit
  • 0x4 关闭ASLR,地址对齐
  • 0x5 分析
  • 0x6 总结
  • 0x7 脚本编写
  • 0x8 尝试IDA一键反编译

题源:XCTF-Reverse进阶-004

0x0 新知识

XOR 常用于置0
XOR 运算可逆

0x1 运行

在这里插入图片描述
运行提示输入,回车后即退出

0x2 查壳

在这里插入图片描述

0x3 载入IDA 32bit

在这里插入图片描述
在这里插入图片描述
可以知道 sub_401020这个call是printf()
在这里插入图片描述
因为我还是个小白,并不能像大神们一样看静态汇编代码就完全理解程序逻辑,所以我使用IDA 与 OD动静结合的方式来进行分析。

0x4 关闭ASLR,地址对齐

我是在WIN7下进行测试,所以可以手动关闭ASLR使得程序运行不进行随机加载。
在这里插入图片描述
使用VIEW辅助查看文件偏移,使用WinHex修改数据。在Win下数据为小端序存储,所以在十六进制文件中将看到 40 81
在这里插入图片描述
关闭ASLR的目的在于将OD中的地址与IDA中的地址进行对齐方便查看,如果不会修改ASLR还可以通过下API断点进行定位。
在这里插入图片描述
在IAT中可以看到导入的所有API,我发现了这两个在IDA中出现过的函数,我们要定位程序开始运行的代码段,只要在 scanf 的函数头下断点并通过堆栈回到上一层即可。
在这里插入图片描述
在这里插入图片描述

0x5 分析

在这里插入图片描述
在这里插入图片描述
ecx被赋值为数组的首地址(char *)
在这里插入图片描述
经典的字符串数组遍历(说是经典,其实我是调试后才能知道这是取字符串长度,嘿嘿嘿),再来看看IDA中的Graph。
在这里插入图片描述

edx = ecx + 0x1 
do{al = ecxecx++
}while( al&al != 0)
sub ecx,edx
cmp ecx,0x10

最终字符串长度存放在ecx中,长度必须为0x18位

在这里插入图片描述
这里看到push esipop esi 临时保存esi的状态,可以知道esi是一个临时变量 。xor edx,edx自身与自身进行异或得到结果0x0,mov esi , ebp + ecx - 0x25 可知esi存放了数组的最后一个字符的地址。通过以下计算得到:
arr[0] = ebp - 0x24
arr[0x18-1] = ebp - 0x24 + ecx - 0x1

在这里插入图片描述
通过这个循环可以看出esi递减,edx递增,将字符串进行逆序操作。

在这里插入图片描述
紧跟着的循环再次将 edx 寄存器置0,用于循环计次
将每一个元素自增1后与0x6做异或运算后存回
在这里插入图片描述
比较两个字符串
在这里插入图片描述

0x6 总结

  1. 输入
  2. 长度限制为0x18 即24个字符
  3. 逆序数组
  4. 每个元素进行 +1 ^ 6 操作
  5. 对比字符串是否相等

0x7 脚本编写

在这里插入图片描述
异或运算是可逆的,下面是争对1bit的运算结果
明文 ^ 密文,相当于就是

#include<iostream>
#include<algorithm>
#include<string>
using namespace std;
/*
.rdata:00402124	00000012	C	xIrCj~<r|2tWsv3PtI
.rdata:00402137	00000006	C	zndka
*/
int main(){string str = "xIrCj~<r|2tWsv3PtIzndka";cout << str.length()<<endl;string flag = str;for(int i = 0; i < str.length() ;i++){flag[i] = (str[i] ^ 0x6) - 1;}reverse(flag.begin(),flag.end());cout << flag;
}

在这里插入图片描述

0x8 尝试IDA一键反编译

int __cdecl main(int argc, const char **argv, const char **envp)
{unsigned int v3; // kr00_4signed int v4; // edxchar *v5; // esichar v6; // alunsigned int v7; // edxint v8; // eax__int128 v10; // [esp+2h] [ebp-24h]__int64 v11; // [esp+12h] [ebp-14h]int v12; // [esp+1Ah] [ebp-Ch]__int16 v13; // [esp+1Eh] [ebp-8h]sub_401020(&unk_402150, v10);v12 = 0;v13 = 0;v10 = 0i64;v11 = 0i64;sub_401050((const char *)&unk_402158, (unsigned int)&v10);v3 = strlen((const char *)&v10);if ( v3 >= 0x10 && v3 == 24 ){v4 = 0;v5 = (char *)&v11 + 7;do{v6 = *v5--;byte_40336C[v4++] = v6;}while ( v4 < 24 );v7 = 0;do{byte_40336C[v7] = (byte_40336C[v7] + 1) ^ 6;++v7;}while ( v7 < 0x18 );v8 = strcmp(byte_40336C, (const char *)&unk_402124);if ( v8 )v8 = -(v8 < 0) | 1;if ( !v8 ){sub_401020("right\n", v10);system("pause");}}return 0;
}

可以发现,获取长度、逆序等,如果一开始直接看IDA的反编译结果效率会更高,虽然代码看着有点奇怪…慢慢适应吧!我也是今天刚刚安装好IDA!!!继续冲压。

这篇关于EasyRE WriteUp的文章就介绍到这儿,希望我们推荐的文章对编程师们有所帮助!



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

相关文章

【CTF Web】BUUCTF Upload-Labs-Linux Pass-13 Writeup(文件上传+PHP+文件包含漏洞+PNG图片马)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

2024年“羊城杯”粤港澳大湾区网络安全大赛 初赛 Web数据安全AI 题解WriteUp

文章首发于【先知社区】:https://xz.aliyun.com/t/15442 Lyrics For You 题目描述:I have wrote some lyrics for you… 开题。 看一下前端源码,猜测有路径穿越漏洞 http://139.155.126.78:35502/lyrics?lyrics=../../../../../etc/passwd 简单看

【CTF Web】BUUCTF Upload-Labs-Linux Pass-04 Writeup(文件上传+PHP+.htaccess绕过)

Upload-Labs-Linux 1 点击部署靶机。 简介 upload-labs是一个使用php语言编写的,专门收集渗透测试和CTF中遇到的各种上传漏洞的靶场。旨在帮助大家对上传漏洞有一个全面的了解。目前一共20关,每一关都包含着不同上传方式。 注意 1.每一关没有固定的通关方法,大家不要自限思维! 2.本项目提供的writeup只是起一个参考作用,希望大家可以分享出自己的通关思路

鹏城杯 2022 取证writeup

简单取证 我们进去首先使用imageinfo pslist screenshot clipboard filescan 等等插件查看相关信息。 这里找到一个password姑且先留着 然后使用filescan找到了一个jpg文件 我们先dump下来 vol -f file.raw --profile=WinXPSP2x86 dumpfiles -Q 0x000000000207e3d

【CTF Web】CTFShow 协议头信息泄露 Writeup(HTTP协议+信息收集)

协议头信息泄露 10 没思路的时候抓个包看看,可能会有意外收获 解法 按 F12 打开开发者工具,点开网络,刷新网页。 flag 在响应标头。 Flag ctfshow{7fa61c00-ff46-4b3e-8d08-1eaafae521cc} 声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶

实验吧唯快不破writeup

原文链接:http://b.zlweb.cc/shiyanbar-wkbp-writeup.html 题目是这个样子的: 点击解题链接显示如下: 下面来分析这道题目,首先从题目和内容可以看出,要想得到key值,必须要快!所以十之八九是考编程题,因为你再快也快不过机器 接着它题目的提示是看看响应头,可以知道我们想要的在响应头里,于是使用brupsuite拦截,查看响应头可以看到如下内

【pwnable.kr】0x02-collision Writeup

题目描述 解法 拉取文件 scp -P2222 col@pwnable.kr:col .scp -P2222 col@pwnable.kr:col.c . 分析源码 #include <stdio.h>#include <string.h>// hashcode值unsigned long hashcode = 0x21DD09EC;// 返回res,对main函数中传参进

ISCC2024 WriteUp

msic Funzip Funzip writeup解题思路 1.打开题目发现是一个base64 2.看了一遍后发现他不是很全于是写一个脚本进行补全 wf = open("5.txt", "w") with open("1 (2).txt", "r") as f:     data = f.read()     data = data.splitlines() for li

【CTF MISC】XCTF GFSJ0290 reverseMe Writeup(图像处理)

reverseMe 暂无 解法 导入 Photoshop。 水平翻转,得到 flag。 Flag flag{4f7548f93c7bef1dc6a0542cf04e796e} 声明 本博客上发布的所有关于网络攻防技术的文章,仅用于教育和研究目的。所有涉及到的实验操作都在虚拟机或者专门设计的靶机上进行,并且严格遵守了相关法律法规。 博主坚决反对任何形式的非法黑

魔法密文 Writeup| DASCTF Oct X 吉林工师

魔法秘文 这题思路还好吧……但是真的属于把我做吐了的那种……具体见后文 首先给了一个zip文件,解压出来一张魔法少女.png,通过binwalk分析出来隐藏了压缩包。 直接用binwalk -e分离发现压缩包大小有问题。 于是使用 hex 编辑器直接删掉了前面的图片部分,得到一个压缩包。 压缩包中有两个文件,flag.txt是加密的,魔法萝莉简体未加密。 提示内容为:密码为32位