IDA 打开

将main函数反编译为C代码

 1 int __cdecl __noreturn main(int argc, const char **argv, const char **envp)
2 {
3 int v3; // eax
4 char v4; // [rsp+Fh] [rbp-1h]
5
6 while ( 1 )
7 {
8 while ( 1 )
9 {
10 printf("Welcome to CTF game!\nPlease input d/D to start or input q/Q to quit this program: ", argv, envp);
11 v4 = getchar();
12 if ( v4 != 'd' && v4 != 'D' )
13 break;
14 Decry();
15 }
16 if ( v4 == 'q' || v4 == 'Q' )
17 Exit();
18 puts("Input fault format!");
19 v3 = getchar();
20 putchar(v3);
21 }
22 }

代码分析

这道题的关键在于Decry()

1 unsigned __int64 Decry()

2 {

3 char v1; // [rsp+Fh] [rbp-51h]

4 int v2; // [rsp+10h] [rbp-50h]

5 int v3; // [rsp+14h] [rbp-4Ch]

6 int i; // [rsp+18h] [rbp-48h]

7 int v5; // [rsp+1Ch] [rbp-44h]

8 char src[8]; // [rsp+20h] [rbp-40h]

9 __int64 v7; // [rsp+28h] [rbp-38h]

10 int v8; // [rsp+30h] [rbp-30h]

11 __int64 v9; // [rsp+40h] [rbp-20h]

12 __int64 v10; // [rsp+48h] [rbp-18h]

13 int v11; // [rsp+50h] [rbp-10h]

14 unsigned __int64 v12; // [rsp+58h] [rbp-8h]

15

16 v12 = __readfsqword(0x28u);

17 *(_QWORD *)src = 'SLCDN';

18 v7 = 0LL;

19 v8 = 0;

20 v9 = 'wodah';

21 v10 = 0LL;

22 v11 = 0;

23 text = join(key3, (const char *)&v9); // text = 'killshadow'

24 strcpy(key, key1);

25 strcat(key, src); // key = 'ADSFKNDCLS'

26 v2 = 0;

27 v3 = 0;

28 getchar();

29 v5 = strlen(key); // v5 = 10

30 for ( i = 0; i < v5; ++i )

31 {

32 if ( key[v3 % v5] > 64 && key[v3 % v5] <= 90 )// key = 'adsfkndcls'

33 key[i] = key[v3 % v5] + 32;

34 ++v3;

35 }

36 printf("Please input your flag:", src);

37 while ( 1 )

38 {

39 v1 = getchar();

40 if ( v1 == 10 )

41 break;

42 if ( v1 == 32 )

43 {

44 ++v2;

45 }

46 else

47 {

48 if ( v1 <= 96 || v1 > 122 )

49 {

50 if ( v1 > 64 && v1 <= 90 ) // 大写字母

51 str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;

52 }

53 else // 小写字母

54 {

55 str2[v2] = (v1 - 39 - key[v3++ % v5] + 97) % 26 + 97;

56 }

57 if ( !(v3 % v5) )

58 putchar(' ');

59 ++v2;

60 }

61 }

62 if ( !strcmp(text, str2) )

63 puts("Congratulation!\n");

64 else

65 puts("Try again!\n");

66 return __readfsqword(0x28u) ^ v12;

67 }

转为C语言逆向解出结果

#include<stdio.h>
int main()
{
char key[] = "adsfkndcls";
char text[] = "killshadow";
int i;
int v3=10;//长度
for (int i = 0; i < 10; i++)
{
for (int j = 0; j < 128; j++)
{
if (j < 'A' || j > 'z' || j > 'Z' && j < 'a')
{
continue;
}
if ((j - 39 - key[v3 % 10] + 97) % 26 + 97 == text[i])
{
printf("%c",j);
v3++;
break;
}
}
}
}

得到flag

buuctf-RE-SimpleRev的更多相关文章

  1. [BUUCTF]REVERSE——SimpleRev

    SimpleRev 附件 步骤: 例行查壳儿,,无壳,64位程序 64位ida载入,看main函数 关键代码段在Decry函数里 unsigned __int64 Decry() { char v1; ...

  2. 刷题记录:[BUUCTF 2018]Online Tool

    目录 刷题记录:[BUUCTF 2018]Online Tool 一.知识点 1.escapeshellarg和escapeshellcmd使用不当导致rce 刷题记录:[BUUCTF 2018]On ...

  3. BUUOJ reverse SimpleRev (爆破)

    SimpleRev SimpleRev(flag需加上flag{}再提交) 注意:得到的 flag 请包上 flag{} 提交 拖到ida 找到关键函数: unsigned __int64 Decry ...

  4. BUUCTF RE部分题目wp

    RE 1,easyre拖进ida,得到flag 2,helloworld 将文件拖入apk改之理,得到flag 3,xor拖进ida,就是简单异或,写脚本 glo=[0x66,0x0a,0x6b,0x ...

  5. BUUCTF 部分wp

    目录 Buuctf crypto 0x01传感器 提示是曼联,猜测为曼彻斯特密码 wp:https://www.xmsec.cc/manchester-encode/ cipher: 55555555 ...

  6. buuctf misc 刷题记录

    1.金三胖 将gif分离出来. 2.N种方法解决 一个exe文件,果然打不开,在kali里分析一下:file KEY.exe,ascii text,先txt再说,base64 图片. 3.大白 crc ...

  7. BUUCTF知识记录

    [强网杯 2019]随便注 先尝试普通的注入 发现注入成功了,接下来走流程的时候碰到了问题 发现过滤了select和where这个两个最重要的查询语句,不过其他的过滤很奇怪,为什么要过滤update, ...

  8. buuctf misc wp 01

    buuctf misc wp 01 1.金三胖 2.二维码 3.N种方法解决 4.大白 5.基础破解 6.你竟然赶我走 1.金三胖 root@kali:~/下载/CTF题目# unzip 77edf3 ...

  9. buuctf misc wp 02

    buuctf misc wp 02 7.LSB 8.乌镇峰会种图 9.rar 10.qr 11.ningen 12.文件中的秘密 13.wireshark 14.镜子里面的世界 15.小明的保险箱 1 ...

  10. BUUCTF WEB-WP(3)

    BUUCTF WEB 几道web做题的记录 [ACTF2020 新生赛]Exec 知识点:exec命令执行 这题最早是在一个叫中学生CTF平台上看到的类似,比这题稍微要复杂一些,多了一些限制(看看大佬 ...

随机推荐

  1. protobuf协议 待整理

    https://blog.51cto.com/wangjichuan/5691192 https://blog.csdn.net/lizhichao410/article/details/126032 ...

  2. 注释中的Unicode编码也会被转义

    现象 public class Unicode { public static void main(String[] args) { // \u000d System.out.println(&quo ...

  3. python:包含’e’和‘-’的 str 转 float

    from functools import reduce def str2float(s): s = s.split('.') a = s[0] b = s[1] if a[0] == '-': a ...

  4. python 如何以逗号为分隔符输出数组

    l = [1,2,3,4] print(" ".join(str(i) for i in l)) #输出结果为:1 2 3 4(注意,此时4后面没有空格啦) #以逗号为分隔符 l ...

  5. ceph 集群 健康状态报 clock skew detected on mon.tg-ceph-mon-2

    1.现象: health: HEALTH_WARN no active mgr mons are allowing insecure global_id reclaim clock skew dete ...

  6. 高并发解决方案之 redis原子操作(适用于秒杀场景)

    秒杀活动: 秒杀场景一般会在电商网站或(APP/小程序)举行一些活动或者节假日在12306网站上抢票时遇到.对于一些稀缺或者特价商品,一般会在约定时间点对其进行限量销售,因为这些商品的特殊性,会吸引大 ...

  7. Crypto入门 (五)混合编码

    前言: 这次得题目从本质上说没有什么难点,是多次利用base64和16进制编码,层层解开就好,通过这题得代码编写能很好得锻炼python代码能力,一起加油,尝试着自己写写看看把. 混合编码: 题目:J ...

  8. raft算法,cap理论中的c是数据一致性,是通过raft算法,

    raft算法中的两个重要概念,自旋时间,心跳时间, 领导,候选人,随从,通过日志同步.只要大多数随从同步成功,就算成功.

  9. idea的Tomcat的配置

    1.创建一个web项目 2.创建项目完成后,配置   点击add 3.点击扳手  选择tomcat Server ----->Local 4.选择tomcat的文件夹路径  点击ok 5.再次点 ...

  10. 持续集成环境(2)-Jenkins插件管理

    Jenkins本身不提供很多功能,我们可以通过使用插件来满足我们的使用.例如从Gitlab拉取代码,使用 Maven构建项目等功能需要依靠插件完成.接下来演示如何下载插件. 修改Jenkins插件下载 ...