BUUCTF--Reverse
目录
easyre
reverse1
reverse2
内涵的软件
新年快乐
xor
helloword
reverse3
不一样的flag
SimpleRev
easyre
用notepad++打开文件,直接用搜索就搜索出来flag{this_Is_a_EaSyRe}
用DIE打开,搜txt:flag,可发现flag
reverse1
reverse1 注意:得到的 flag 请包上 flag{} 提交
用DIE打开发现为64位,用ida打开,shift+F12查看Strings window窗口,this is the right flag!'点进去,发现页面,然后在那一行右键List cross references to,然后点击ok。
进入汇编语言中,如果看不懂,可以按下F5,变成伪代码
发现str2,点进去,发现{hello_world},然后在分析伪代码,右键111转换为char格式。
if ( Str2[j] == 'o' )
Str2[j] = '0';
发现是将o转换为0,所以得出flag{hell0_w0rld}
reverse2
用DIE打开发现为64位,用ida打开,shift+F12查看Strings window窗口,this is the right flag!'点进去,发现页面,然后在那一行右键List cross references to,然后点击ok。F5
if ( *(&flag + i) == 'i' || *(&flag + i) == 'r' )
*(&flag + i) = '1';
双击flag常量,发现
将hacking_for_fun中i和r替换为1,得到flag{hack1ng_fo1_fun}}
内涵的软件
发现为32位,用32为打开发现
v2 = "DBAPP{49d3c93df25caad81232130f3d2ebfad}";
试试flag{49d3c93df25caad81232130f3d2ebfad}出现答案。
新年快乐
用od工具包查壳提取,发现为32为有壳,先脱壳,od工具包内查壳脱壳工具,脱壳后用ida打开得到代码
int __cdecl main(int argc, const char **argv, const char **envp)
{
int result; // eax
char v4; // [esp+12h] [ebp-3Ah]
__int16 v5; // [esp+20h] [ebp-2Ch]
__int16 v6; // [esp+22h] [ebp-2Ah]sub_401910();
strcpy(&v4, "HappyNewYear!"); //strcpy函数为stringcopy缩写,将HappyNewYear!复制到v4中
v5 = 0;
memset(&v6, 0, '\x1E');
printf("please input the true flag:");
scanf("%s", &v5);
if ( !strncmp((const char *)&v5, &v4, strlen(&v4)) )
result = puts("this is true flag!");
else
result = puts("wrong!");
return result;
}
猜测flag为HappyNewYear!
xor
key = [ 'f',0xA,'k',0xC,'w','&','O','.','@',0x11,'x',0xD,'Z',';','U',0x11,'p',0x19,'F',0x1F,'v','"','M','#','D',0xE,'g',6,'h',0xF,'G','2','O' ]
flag = "f"
x = 0
for i in range(0,len(key)-1):
if isinstance(key[i],str):
if isinstance(key[i+1],str): x = ord(key[i]) ^ ord(key[i+1]) # key[i],key[i+1]同时为字符串
else: x = ord(key[i]) ^ key[i+1] # key[i]为字符串,key[i+1]为整数
else:
if isinstance(key[i+1],str): x = key[i] ^ ord(key[i+1]) # key[i]为整数,key[i+1]为字符串
else: x = key[i] ^ key[i+1] # key[i],key[i+1]同时为整数
flag = flag + chr(x)
print(flag)
flag{QianQiuWanDai_YiTongJiangHu}
helloword
apk文件,需要用android killer工具打开
直接用工程搜索搜flag{得到文件打开发现
flag{7631a988259a00816deda84afb29430a}
主文件在这里
reverse3
点击main_0跟进,来到主函数,如下(重要的语句已经做好了标记):
接下来先查看一下Str2这个字符串是啥,点进去,
再跟进sub_411AB0函数,如下(太长了叭…):
void *__cdecl sub_411AB0(char *a1, unsigned int a2, int *a3)
{
int v4; // STE0_4
int v5; // STE0_4
int v6; // STE0_4
int v7; // [esp+D4h] [ebp-38h]
signed int i; // [esp+E0h] [ebp-2Ch]
unsigned int v9; // [esp+ECh] [ebp-20h]
int v10; // [esp+ECh] [ebp-20h]
signed int v11; // [esp+ECh] [ebp-20h]
void *Dst; // [esp+F8h] [ebp-14h]
char *v13; // [esp+104h] [ebp-8h]if ( !a1 || !a2 )
return 0;
v9 = a2 / 3;
if ( (signed int)(a2 / 3) % 3 )
++v9;
v10 = 4 * v9;
*a3 = v10;
Dst = malloc(v10 + 1);
if ( !Dst )
return 0;
j_memset(Dst, 0, v10 + 1);
v13 = a1;
v11 = a2;
v7 = 0;
while ( v11 > 0 )
{
byte_41A144[2] = 0;
byte_41A144[1] = 0;
byte_41A144[0] = 0;
for ( i = 0; i < 3 && v11 >= 1; ++i )
{
byte_41A144[i] = *v13;
--v11;
++v13;
}
if ( !i )
break;
switch ( i )
{
case 1:
*((_BYTE *)Dst + v7) = aAbcdefghijklmn[(signed int)(unsigned __int8)byte_41A144[0] >> 2];
v4 = v7 + 1;
*((_BYTE *)Dst + v4++) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | 16 * (byte_41A144[0] & 3)];
*((_BYTE *)Dst + v4++) = aAbcdefghijklmn[64];
*((_BYTE *)Dst + v4) = aAbcdefghijklmn[64];
v7 = v4 + 1;
break;
case 2:
*((_BYTE *)Dst + v7) = aAbcdefghijklmn[(signed int)(unsigned __int8)byte_41A144[0] >> 2];
v5 = v7 + 1;
*((_BYTE *)Dst + v5++) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | 16 * (byte_41A144[0] & 3)];
*((_BYTE *)Dst + v5++) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | 4 * (byte_41A144[1] & 0xF)];
*((_BYTE *)Dst + v5) = aAbcdefghijklmn[64];
v7 = v5 + 1;
break;
case 3:
*((_BYTE *)Dst + v7) = aAbcdefghijklmn[(signed int)(unsigned __int8)byte_41A144[0] >> 2];
v6 = v7 + 1;
*((_BYTE *)Dst + v6++) = aAbcdefghijklmn[((byte_41A144[1] & 0xF0) >> 4) | 16 * (byte_41A144[0] & 3)];
*((_BYTE *)Dst + v6++) = aAbcdefghijklmn[((byte_41A144[2] & 0xC0) >> 6) | 4 * (byte_41A144[1] & 0xF)];
*((_BYTE *)Dst + v6) = aAbcdefghijklmn[byte_41A144[2] & 0x3F];
v7 = v6 + 1;
break;
}
}
*((_BYTE *)Dst + v7) = 0;
return Dst;加密过程十分复杂,但是后面我们注意到一个名叫aAbcdefghijklmn的数组,有点怪怪的我们点进去看看
哦嚯!这不是base64编码嘛!
我们直接将Str2字符串减去 j,再将其base64逆运算(base64是一个可逆的加密算法)就可以得到结果!
python代码如下:
import base64
str = 'e3nifIH9b_C@n@dH'
flag = ''
index = ''
for i in range(0,len(str)):
index = chr(ord(str[i]) - i)
flag += index
flag = base64.b64decode(flag)
print(flag)运行,flag出来了!!!{i_l0ve_you}
不一样的flag
打开查看程序发现上下左右,查看程序
直接按照命令来进行走
走0不走1
得到字符串:222441144222
SimpleRev
BUUCTF--Reverse相关推荐
- BUUCTF Reverse/findKey
BUUCTF Reverse/findKey 先看文件信息:32位程序,没有加壳 打开看看,标题为find flag,也没啥有用的信息 IDA32位打开,找到start函数,看到有个main,跟随跳转 ...
- BUUCTF Reverse helloword、findit
BUUCTF Reverse helloword.findit helloword findit 一天一道CTF题目,能多不能少 记录一下这两道题,这两道题是安卓逆向的题目~ 第一次接触安卓逆向的题目 ...
- BUUCTF Reverse/Ultimate Minesweeper
BUUCTF Reverse/Ultimate Minesweeper 先看文件信息,没有加壳,且为net编写的程序 运行是一个扫雷游戏,只要点错一个就会自动退出(左上角显示的是雷的数目,一共有897 ...
- BUUCTF Reverse xor
题目:BUUCTF Reverse xor 一些犯傻后学到了新东西的记录 查壳,没壳,IDA打开 main函数很好理解,输入一个长度为33的字符串,1-32位与前一位异或后与global相等,则判定f ...
- BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker
BUUCTF Reverse/[网鼎杯 2020 青龙组]jocker 先看下文件信息,没有加壳,32位程序 运行一下,又是一道字符串比较的题目 用IDA32位打开,分析一下 // positive ...
- BUUCTF Reverse/[GWCTF 2019]pyre
BUUCTF Reverse/[GWCTF 2019]pyre 下载得到一个pyc文件,用这个在线反编译pyc,pyo反汇编出代码 print 'Welcome to Re World!' print ...
- BUUCTF Reverse(helloworld)
BUUCTF Reverse(helloworld) 题目附件下载下来之后,是.apk后缀,所以可能是安卓逆向. 这里我用的工具是Android Killer,下载地址:https://xiazai. ...
- BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun
BUUCTF Reverse/[WUSTCTF2020]Cr0ssfun 先看文件信息, IDA64位打开,很简单的题目,只要一个个输入就行 都是返回的这种元素 _BOOL8 __fastcall i ...
- BUUCTF reverse题解汇总
本文是BUUCTF平台reverse题解的汇总 题解均来自本人博客 目录 Page1 Page2 Page3 Page4 Page1 easyre reverse1 reverse2 内涵的软件 新年 ...
- [BUUCTF]Reverse——[网鼎杯 2020 青龙组]jocker
网上大部分是动调,我尝试IDC解一下, 无壳,32位,放入IDApro,查看main函数 查看wrong和str函数,借出假的flag a=[0x66,0x6B,0x63,0x64,0x7F,0x61 ...
最新文章
- 使用MySQL Proxy解决MySQL主从同步延迟
- 计算机科学与技术的深度研究,专业深度分析--计算机科学与技术.docx
- caffe框架下目标检测——faster-rcnn实战篇操作
- php调整表格样式,表格的创建以及样式修改
- maven原型_Maven原型创建技巧
- jquery $(function(){}) $(document).ready(function(){}); (function(){}); 的区别以及作用
- 面试官:你对多线程熟悉吗,谈谈线程安全中的原子性,有序性和可见性?
- Android图片压缩
- 数据处理任务量级巨大?构建预置容器镜像的Amazon EKS解决方案了解一下!
- 面试题--5个数能组成多少中不同的二叉搜索树的结构--卡特兰数
- 餐馆会员管理系统 - MySQL数据库课程设计
- 设计模式-业务代表模式-个人思考
- 使用for循环同时便利两个列表
- 基于微信小程序的疫情智慧社区管理系统 计算机毕业设计 后台管理系统
- python实现用伏羲八卦对ASCII码进行加密
- SpringBoot消息转换器:HttpMessageConverter
- Mac不能复制拷贝写入文件到移动硬盘/U盘解决办法
- 2022 Java面试题道通科技
- Android接入微信登陆
- gedit命令和vim异常退出处理
热门文章
- 号码吉凶算法+对照表
- ES 7.16.2 Linux环境集群搭建
- 各纬度气候分布图_世界气候类型分布图
- vue中使用sortable插件实现拖拽 upload上传图片改变顺序
- 2019大二暑假总结
- 计算机东北大学与兰州大学哪个好,2016东北大学VS兰州大学 谁执牛耳?
- 每天一个kali无线命令--airmon-ng
- 计算机毕业设计JAVA基于智能推荐的良品店铺平台mybatis+源码+调试部署+系统+数据库+lw
- 牛腩新闻发布系统:Web窗体无法显示所应用的样式表
- 关于 java 学习的一点心得体会