reverse-for-the-holy-grail-350 攻防世界
工具
IDA+虚拟机(kali)
思路展开
1.查壳,无壳,64位,放到虚拟机运行
灵魂三连问
2.iDA(64-bit)启动
先从下往上找,找关键比较,再从上往下,找用户输入与函数关系
找关键函数的原则:用户的输入变量,第一个过程判断输入符合条件,第二个过程实现算法(输入字符串+算法=结果字符串)
stringMod关键函数
__int64 __fastcall stringMod(__int64 *a1)
{__int64 len; // r9__int64 c_str; // r10__int64 i; // rcxsigned int v4; // er8int *temp_2; // rdiint *temp_3; // rsisigned int t; // ecxsigned int j; // er9int g; // er10unsigned int h; // eaxint sign; // esiint v12; // esiint temp[24]; // [rsp+0h] [rbp-60h]memset(temp, 0, 0x48uLL);len = a1[1];if ( len ){c_str = *a1;i = 0LL;v4 = 0;do{v12 = *(char *)(c_str + i);temp[i] = v12; // temp=a1if ( 3 * ((unsigned int)i / 3) == (_DWORD)i && v12 != firstchar[(unsigned int)i / 3] )// 当i是3的倍数时,str=first[i/3]v4 = -1;++i;}while ( i != len );}else{v4 = 0;} // 将正确的a1赋值给temptemp_2 = temp;temp_3 = temp;t = 666;do{ // 将temp里的每个字符与v7异或,v7变化*temp_3 = t ^ *(unsigned __int8 *)temp_3;t += t % 5;++temp_3;}while ( &temp[18] != temp_3 );j = 1;g = 0;h = 1;sign = 0;do{if ( sign == 2 ){if ( *temp_2 != thirdchar[g] ) // 2 5 8 11 15 17v4 = -1;if ( h % *temp_2 != masterArray[g] ) // 1 4 7 10 14 16v4 = -1;++g;h = 1;sign = 0;}else{h *= *temp_2;if ( ++sign == 3 )sign = 0;}++j;++temp_2;}while ( j != 19 );return (unsigned int)(t * v4);
}
看了一圈,函数分三层,第一层赋值操作,当i是3的倍数时,对字符有规定(确定0 3 6 9 12 15 18六个字符),第二层异或操作,异或的值变化,第三层对异或后的值循环,0 1 2 三个为一组
3.脚本
firstchar=[65, 105, 110, 69, 111, 97]
thirdchar=[751, 708, 732, 711, 734, 764]
masterArray=[471, 12, 580, 606, 147, 108 ]
t=[]
x=666
for i in range(18):t.append(x)x+=x%5
flag=[0 for i in range(18)]
index=0
for i in range(0,18,3):flag[i]=firstchar[index] #0,3,6,9,12,15index+=1
index=0
for i in range(2,18,3):flag[i]=thirdchar[index]^t[i] #2 5,8,11,14,17index+=1
index=0
for i in range(1,18,3):for f in range(32,126): #常用可输入字符,符合条件的留下来if (flag[i-1]^t[i-1])*(f^t[i])%(flag[i+1]^t[i+1])==masterArray[index]:flag[i]=findex+=1break;print('tuctf{'+''.join(map(chr,flag))+'}')
tuctf{AfricanOrEuropean?}
reverse-for-the-holy-grail-350 攻防世界相关推荐
- 攻防世界 Reverse高手进阶区 2分题 reverse-for-the-holy-grail-350
前言 继续ctf的旅程 攻防世界Reverse高手进阶区的2分题 本篇是reverse-for-the-holy-grail-350的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数 ...
- 攻防世界reverse进阶easyre-153 writeup(#gdb调试父子进程、#ida版本差异)
文章目录 学习目标: 引言 第一步.查脱壳 1.查壳 2.脱壳 3.查看文件格式 第二步.IDA静态分析 1.IDA版本的小坑 2.分析main函数 3.分析lol函数 第三步.gdb动态分析 1.m ...
- 攻防世界Reverse进阶区-EasyRE-writeup
1. 介绍 本题是xctf攻防世界中Reverse的进阶区的题EasyRE. 下载下来以后是一个exe文件:210f1e18ac8d4a15904721a2383874f5.exe 2. 分析 首先看 ...
- 攻防世界Reverse进阶区-answer_to_everything-writeup
本题是xctf攻防世界中Reverse的进阶区的题answer_to_everything 题目来源: 2019_ISCC 题目描述:sha1 得到了一个神秘的二进制文件.寻找文件中的flag,解锁宇 ...
- Revers篇:攻防世界reverse进阶re2-cpp-is-awesome
攻防世界reverse进阶re2-cpp-is-awesome IDA分析 很简单的一个程序 程序流程分析 首先检查参数,参数少于2就退出,并提示:Usage: ./re2-cpp-is-awesom ...
- 攻防世界 Reverse高手进阶区 3分题 crackme
前言 继续ctf的旅程 攻防世界Reverse高手进阶区的3分题 本篇是crackme的writeup 攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 查壳,显示nsPack壳 找了个 ...
- 攻防世界 REVERSE 新手区/game
攻防世界 REVERSE 新手区/game 下载得到附件 看题目说一共有8个围成一圈的灯,需要输入1-8个数,输入的数会让相应的数字的灯改变状态(亮或灭),且该灯的前一个灯和后一个灯也会改变状态.输入 ...
- 攻防世界 REVERSE 新手区/maze
攻防世界 REVERSE 新手区/maze 老规矩先查壳,没加壳而且是64位的 用IDA64位打开,找到main函数F5查看伪代码 这是一个迷宫题,必然是有迷宫图在里面,然后走的路径就是输出的flag ...
- 攻防世界reverse高手进阶 ----- gametime
gfsj ----- gametime 昨天做了一道攻防世界的题key和这个gametime,都是动态调试的题.key还稍微简单一些,gametime稍微费点时间,记录一下. 昨天晚上可能是没进入做题 ...
- pingpong 攻防世界
安卓题 JEB打开 主函数逻辑不难,1000000,ping一下pong一下减到0,输出flag,细看有两个反作弊,一个是MainActivity.this.tt % 2 == 0.MainActiv ...
最新文章
- WinForm窗体设置
- [BZOJ 4827][Hnoi2017]礼物
- c++类的静态成员特性
- 检测和语义分割_分割和对象检测-第5部分
- Windows 8系统平台上应用软件安装心得
- linux不重启换root密码是什么原因,在Linux下修改和重置root密码的方法(超简单)
- 一步一步写算法(之爬楼梯)
- background 图片比例缩小_如何更精准控制背景图片?
- markdown html 注释,在 Markdown 注释
- Blocking Queue三种加入队列方法对比
- 屠龙之技 作者:长铗
- java8 collectors_java8的Collectors.reducing()
- 中继链路trunk详解
- 工作第十六七周:生活这么繁琐,我们还要努力爱她
- 第12讲:Python列表对象中元素的增操作
- panda开始python的数据科学
- 华为机考108题(c++)(52-61)
- “Metro”,移动设备视觉语言的新新人类
- 吹爆CSDN插件助手的细节功能(保姆级图文)
- 无处不在的蓝牙—真的很危险吗?
热门文章
- CCF201809-01 卖菜
- 如何在CSDN删除自己上传的资源
- AntV使用方法详解
- 推荐几个练习键盘打字的工具【自己用过的】
- C语言编程>第二十七周 ③ 请补充fun函数,该函数的功能是计算并输出下列多项式的值:
- 搭建一套直播平台需要多少钱
- iPhone 小技巧/实用功能
- uni.getUserProfile报错:fail can only be invoked by user TAP gesture
- Java源码——一个简单的洗牌(shuffling)程序 (Card shuffling and dealing with Collections method shuffle)
- 项目经理与技术经理的区别