reverse-for-the-holy-grail-350   tu-ctf-2016

程序流程很简单,就一个检验函数:

 1 __int64 __fastcall stringMod(__int64 *a1)
 2 {
 3   __int64 length; // r9
 4   char *c_str; // r10
 5   __int64 i; // rcx
 6   signed int v4; // er8
 7   int *temp_2; // rdi
 8   int *temp_3; // rsi
 9   signed int t; // ecx
10   signed int j; // er9
11   int index; // er10
12   unsigned int tmp; // eax
13   int sign; // esi
14   int v12; // esi
15   int temp[24]; // [rsp+0h] [rbp-60h]
16
17   memset(temp, 0, 0x48uLL);
18   length = a1[1];
19   if ( length )
20   {
21     c_str = (char *)*a1;
22     i = 0LL;
23     v4 = 0;
24     do
25     {
26       v12 = c_str[i];
27       temp[i] = v12;
28       if ( 3 * ((unsigned int)i / 3) == (_DWORD)i && v12 != firstchar[(unsigned int)i / 3] )// 当i是3的倍数时,str=first[i/3]
29                                                 // { 65, 105, 110, 69, 111, 97}
30         v4 = -1;
31       ++i;
32     }
33     while ( i != length );
34   }
35   else
36   {
37     v4 = 0;
38   }
39   temp_2 = temp;
40   temp_3 = temp;
41   t = 666;
42   do
43   {
44     *temp_3 = t ^ *(unsigned __int8 *)temp_3;
45     t += t % 5;
46     ++temp_3;
47   }
48   while ( &temp[18] != temp_3 );                // 异或操作
49   j = 1;
50   index = 0;
51   tmp = 1;
52   sign = 0;
53   do                                            // 0,1,2  每三个数验证
54   {
55     if ( sign == 2 )
56     {
57       if ( *temp_2 != thirdchar[index] )        // { 751, 708, 732, 711, 734, 764, 0, 0 }
58                                                 // temp[2]=
59         v4 = -1;
60       if ( tmp % *temp_2 != masterArray[index] )// { 471, 12, 580, 606, 147, 108 }
61                                                 //
62                                                 // temp[0]*temp[1]%temp[2]=
63         v4 = -1;
64       ++index;
65       tmp = 1;
66       sign = 0;
67     }
68     else                                        // sign  0,1,
69     {
70       tmp *= *temp_2;                           // 0 tmp=temp[0]
71                                                 // 1 tmp=temp[0]*temp[1]
72       if ( ++sign == 3 )
73         sign = 0;
74     }
75     ++j;
76     ++temp_2;
77   }
78   while ( j != 19 );                            // 18循环
79   return (unsigned int)(t * v4);
80 }

wp:

 1 firstchar=[65, 105, 110, 69, 111, 97]
 2 thirdchar=[751, 708, 732, 711, 734, 764]
 3 masterArray=[471, 12, 580, 606, 147, 108 ]
 4 t=[]
 5 x=666
 6 for i in range(18):
 7     t.append(x)
 8     x+=x%5
 9 flag=[0 for i in range(18)]
10 index=0
11 for i in range(0,18,3):
12     flag[i]=firstchar[index]  #0,3,6
13     index+=1
14 index=0
15 for i in range(2,18,3):
16     flag[i]=thirdchar[index]^t[i]  #2 5,8
17     index+=1
18 index=0
19 for i in range(1,18,3):
20     for f in range(32,126):  #常用可输入字符
21         if (flag[i-1]^t[i-1])*(f^t[i])%(flag[i+1]^t[i+1])==masterArray[index]:
22             flag[i]=f
23             index+=1
24             break;
25
26 print('tuctf{'+''.join(map(chr,flag))+'}')

tuctf{AfricanOrEuropean?}

转载于:https://www.cnblogs.com/DirWang/p/11575270.html

攻防世界 reverse reverse-for-the-holy-grail-350相关推荐

  1. 【攻防世界】REVERSE新手练习区 - Hollo,CTF

    Hollo,CTF - wp 点开附件发现是exe文件,需要输入正确的flag,才能得到 success!,否则得到 wrong!. 将附件拖入ida中: F5(Fn+F5)查看伪代码: 分析36-4 ...

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

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

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

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

  4. 攻防世界逆向初级训练

    攻防世界逆向新手训练区wp 文章目录 re1 做题实录 分析总结 game 做题实录 分析总结 Hello,CTF 做题实录 分析总结 open-source 做题实录 分析总结 simple-unp ...

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

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

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

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

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

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

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

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

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

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

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

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

最新文章

  1. 文件读取输出-python
  2. php趣味小程序,php常用小程序
  3. CloudStack 制作window模板
  4. c++ eos智能合约开发_干货|EOS智能合约开发(一)EOS环境搭建和启动节点
  5. 0322 第一天 心得体会
  6. [转载]对复旦食堂的印象
  7. 收藏 | EXCEL的36个逆天功能,动画教程
  8. 通过Java和Spring Boot应用程序将Gmail用作SMTP服务器
  9. linux如何设置mac快捷键,在Ubuntu上使用macOS的快捷键
  10. mysql 查看root_Mysql的Root密码忘记,查看或修改的解决方法(图文介绍)
  11. 《Python编程从入门到实践》记录之json模块(数据存储)
  12. shell中source的作用
  13. python数据分析df_Python数据分析pandas入门!(附数据分析资料)
  14. 【信息学奥赛一本通 提高组】第一章 贪心算法
  15. c++线程间通信的几种方法_JAVA并发之线程amp;进程
  16. Internet Download Manager 6.37.14 Final
  17. [AndroidO] [RK3399] -- CH341驱动移植
  18. starbound服务器未响应,星界边境starbound
  19. android判断字符中是否包含表情符
  20. SurfaceView打造自定义时钟ClockView

热门文章

  1. 《炬丰科技-半导体工艺》集成微加工平台各向异性腐蚀
  2. sortby降序java_lodash多列sortBy降序
  3. MySQL中更新时间字段的更新时点问题
  4. JavaEE进阶知识学习-----Java8新特性知识学习-4-1-StreamAPI
  5. Swift 优化OC接口 NS_REFINED_FOR_SWIFT
  6. 远程oracle 不通,Oracle开放1521端口 telnet不通解决办法
  7. linux读取excel文件内容,如何读取EXCEL文件到内表
  8. android exoplayer最好用的视频播放器,倍速播放
  9. 学与思的关系?(中国文化史)
  10. Deel:20个月,ARR 1M to 100M。