工具

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 攻防世界相关推荐

  1. 攻防世界 Reverse高手进阶区 2分题 reverse-for-the-holy-grail-350

    前言 继续ctf的旅程 攻防世界Reverse高手进阶区的2分题 本篇是reverse-for-the-holy-grail-350的writeup 发现攻防世界的题目分数是动态的 就仅以做题时的分数 ...

  2. 攻防世界reverse进阶easyre-153 writeup(#gdb调试父子进程、#ida版本差异)

    文章目录 学习目标: 引言 第一步.查脱壳 1.查壳 2.脱壳 3.查看文件格式 第二步.IDA静态分析 1.IDA版本的小坑 2.分析main函数 3.分析lol函数 第三步.gdb动态分析 1.m ...

  3. 攻防世界Reverse进阶区-EasyRE-writeup

    1. 介绍 本题是xctf攻防世界中Reverse的进阶区的题EasyRE. 下载下来以后是一个exe文件:210f1e18ac8d4a15904721a2383874f5.exe 2. 分析 首先看 ...

  4. 攻防世界Reverse进阶区-answer_to_everything-writeup

    本题是xctf攻防世界中Reverse的进阶区的题answer_to_everything 题目来源: 2019_ISCC 题目描述:sha1 得到了一个神秘的二进制文件.寻找文件中的flag,解锁宇 ...

  5. Revers篇:攻防世界reverse进阶re2-cpp-is-awesome

    攻防世界reverse进阶re2-cpp-is-awesome IDA分析 很简单的一个程序 程序流程分析 首先检查参数,参数少于2就退出,并提示:Usage: ./re2-cpp-is-awesom ...

  6. 攻防世界 Reverse高手进阶区 3分题 crackme

    前言 继续ctf的旅程 攻防世界Reverse高手进阶区的3分题 本篇是crackme的writeup 攻防世界的题目分数是动态的 就仅以做题时的分数为准了 解题过程 查壳,显示nsPack壳 找了个 ...

  7. 攻防世界 REVERSE 新手区/game

    攻防世界 REVERSE 新手区/game 下载得到附件 看题目说一共有8个围成一圈的灯,需要输入1-8个数,输入的数会让相应的数字的灯改变状态(亮或灭),且该灯的前一个灯和后一个灯也会改变状态.输入 ...

  8. 攻防世界 REVERSE 新手区/maze

    攻防世界 REVERSE 新手区/maze 老规矩先查壳,没加壳而且是64位的 用IDA64位打开,找到main函数F5查看伪代码 这是一个迷宫题,必然是有迷宫图在里面,然后走的路径就是输出的flag ...

  9. 攻防世界reverse高手进阶 ----- gametime

    gfsj ----- gametime 昨天做了一道攻防世界的题key和这个gametime,都是动态调试的题.key还稍微简单一些,gametime稍微费点时间,记录一下. 昨天晚上可能是没进入做题 ...

  10. pingpong 攻防世界

    安卓题 JEB打开 主函数逻辑不难,1000000,ping一下pong一下减到0,输出flag,细看有两个反作弊,一个是MainActivity.this.tt % 2 == 0.MainActiv ...

最新文章

  1. WinForm窗体设置
  2. [BZOJ 4827][Hnoi2017]礼物
  3. c++类的静态成员特性
  4. 检测和语义分割_分割和对象检测-第5部分
  5. Windows 8系统平台上应用软件安装心得
  6. linux不重启换root密码是什么原因,在Linux下修改和重置root密码的方法(超简单)
  7. 一步一步写算法(之爬楼梯)
  8. background 图片比例缩小_如何更精准控制背景图片?
  9. markdown html 注释,在 Markdown 注释
  10. Blocking Queue三种加入队列方法对比
  11. 屠龙之技 作者:长铗
  12. java8 collectors_java8的Collectors.reducing()
  13. 中继链路trunk详解
  14. 工作第十六七周:生活这么繁琐,我们还要努力爱她
  15. 第12讲:Python列表对象中元素的增操作
  16. panda开始python的数据科学
  17. 华为机考108题(c++)(52-61)
  18. “Metro”,移动设备视觉语言的新新人类
  19. 吹爆CSDN插件助手的细节功能(保姆级图文)
  20. 无处不在的蓝牙—真的很危险吗?

热门文章

  1. CCF201809-01 卖菜
  2. 如何在CSDN删除自己上传的资源
  3. AntV使用方法详解
  4. 推荐几个练习键盘打字的工具【自己用过的】
  5. C语言编程>第二十七周 ③ 请补充fun函数,该函数的功能是计算并输出下列多项式的值:
  6. 搭建一套直播平台需要多少钱
  7. iPhone 小技巧/实用功能
  8. uni.getUserProfile报错:fail can only be invoked by user TAP gesture
  9. Java源码——一个简单的洗牌(shuffling)程序 (Card shuffling and dealing with Collections method shuffle)
  10. 项目经理与技术经理的区别