Reverse 高校网络信息安全运维挑战赛

  1 signed int sub_403CC0()
2 {
3 unsigned int v0; // eax
4 int key_lens; // eax
5 FILE *v2; // eax
6 FILE *v3; // eax
7 signed int result; // eax
8 int data; // [esp+10h] [ebp-44h]
9 int v6; // [esp+14h] [ebp-40h]
10 int v7; // [esp+18h] [ebp-3Ch]
11 int v8; // [esp+1Ch] [ebp-38h]
12 int v9; // [esp+20h] [ebp-34h]
13 int v10; // [esp+24h] [ebp-30h]
14 int v11; // [esp+28h] [ebp-2Ch]
15 int v12; // [esp+2Ch] [ebp-28h]
16 int mykey[8]; // [esp+30h] [ebp-24h]
17
18 sub_401AD0();
19 data = 'F2A1'; // 1A2F943C4D8C5B6EA3C9BCAD7E
20 v6 = 'C349';
21 v0 = 0;
22 v7 = 'C8D4';
23 v8 = 'E6B5';
24 v9 = '9C3A';
25 v10 = 'DACB';
26 v11 = 'E7';
27 v12 = 0;
28 do
29 {
30 mykey[v0] = 0;
31 ++v0;
32 }
33 while ( v0 < 8 );
34 puts("input your key:");
35 scanf("%s", mykey);
36 key_lens = strlen((const char *)mykey);
37 if ( key_lens <= 19 )
38 {
39 printf("too short!");
40 result = -1;
41 }
42 else if ( key_lens > 30 )
43 {
44 printf("too long!");
45 result = -1;
46 }
47 else
48 {
49 if ( check_4014A0((char *)mykey, (char *)&data, key_lens) )
50 printf("congratulations, your input is the flag ^_^");
51 else
52 printf("try agian");
53 v2 = (FILE *)((char *)iob[1] - 1);
54 iob[1] = v2;
55 if ( (signed int)v2 < 0 )
56 {
57 filbuf(iob[0]);
58 v2 = iob[1];
59 }
60 else
61 {
62 ++iob[0];
63 }
64 v3 = (FILE *)((char *)v2 - 1);
65 iob[1] = v3;
66 if ( (signed int)v3 < 0 )
67 filbuf(iob[0]);
68 else
69 ++iob[0];
70 result = 0;
71 }
72 return result;
73 }signed int sub_403CC0()
74 {
75 unsigned int v0; // eax
76 int key_lens; // eax
77 FILE *v2; // eax
78 FILE *v3; // eax
79 signed int result; // eax
80 int data; // [esp+10h] [ebp-44h]
81 int v6; // [esp+14h] [ebp-40h]
82 int v7; // [esp+18h] [ebp-3Ch]
83 int v8; // [esp+1Ch] [ebp-38h]
84 int v9; // [esp+20h] [ebp-34h]
85 int v10; // [esp+24h] [ebp-30h]
86 int v11; // [esp+28h] [ebp-2Ch]
87 int v12; // [esp+2Ch] [ebp-28h]
88 int mykey[8]; // [esp+30h] [ebp-24h]
89
90 sub_401AD0();
91 data = 'F2A1'; // 1A2F943C4D8C5B6EA3C9BCAD7E
92 v6 = 'C349';
93 v0 = 0;
94 v7 = 'C8D4';
95 v8 = 'E6B5';
96 v9 = '9C3A';
97 v10 = 'DACB';
98 v11 = 'E7';
99 v12 = 0;
100 do
101 {
102 mykey[v0] = 0;
103 ++v0;
104 }
105 while ( v0 < 8 );
106 puts("input your key:");
107 scanf("%s", mykey);
108 key_lens = strlen((const char *)mykey);
109 if ( key_lens <= 19 )
110 {
111 printf("too short!");
112 result = -1;
113 }
114 else if ( key_lens > 30 )
115 {
116 printf("too long!");
117 result = -1;
118 }
119 else
120 {
121 if ( check_4014A0((char *)mykey, (char *)&data, key_lens) )
122 printf("congratulations, your input is the flag ^_^");
123 else
124 printf("try agian");
125 v2 = (FILE *)((char *)iob[1] - 1);
126 iob[1] = v2;
127 if ( (signed int)v2 < 0 )
128 {
129 filbuf(iob[0]);
130 v2 = iob[1];
131 }
132 else
133 {
134 ++iob[0];
135 }
136 v3 = (FILE *)((char *)v2 - 1);
137 iob[1] = v3;
138 if ( (signed int)v3 < 0 )
139 filbuf(iob[0]);
140 else
141 ++iob[0];
142 result = 0;
143 }
144 return result;
145 }

关键函数check_4014A0((char *)mykey, (char *)&data, key_lens)

 1 signed int __cdecl check_4014A0(char *mykey, char *data, int key_lens)
2 {
3 unsigned int v3; // ebx
4 int j; // eax
5 int k; // ebx
6 char v7; // dl
7 int i; // eax
8 char v9; // [esp+Ah] [ebp-4Ah]
9 char v10; // [esp+Bh] [ebp-49h]
10 char v11; // [esp+Ch] [ebp-48h]
11 char v12; // [esp+Dh] [ebp-47h]
12 char v13; // [esp+Eh] [ebp-46h]
13 char v14; // [esp+Fh] [ebp-45h]
14 char v15; // [esp+10h] [ebp-44h]
15 char v16; // [esp+11h] [ebp-43h]
16 char v17; // [esp+12h] [ebp-42h]
17 char v18; // [esp+13h] [ebp-41h]
18 char v19; // [esp+14h] [ebp-40h]
19 char v20; // [esp+15h] [ebp-3Fh]
20 char v21; // [esp+16h] [ebp-3Eh]
21 char v22; // [esp+17h] [ebp-3Dh]
22 char v23; // [esp+18h] [ebp-3Ch]
23 char v24; // [esp+19h] [ebp-3Bh]
24 char v25; // [esp+1Ah] [ebp-3Ah]
25 char v26; // [esp+1Bh] [ebp-39h]
26 char v27; // [esp+1Ch] [ebp-38h]
27 char v28; // [esp+1Dh] [ebp-37h]
28 char v29; // [esp+1Eh] [ebp-36h]
29 char v30; // [esp+1Fh] [ebp-35h]
30 char v31; // [esp+20h] [ebp-34h]
31 char v32; // [esp+21h] [ebp-33h]
32 char v33; // [esp+22h] [ebp-32h]
33 int v34; // [esp+24h] [ebp-30h]
34 char v35[44]; // [esp+28h] [ebp-2Ch]
35
36 v3 = 0;
37 v34 = 0;
38 do
39 {
40 *(_DWORD *)(&v11 + v3) = 0;
41 v3 += 4; // 置零初始化
42 }
43 while ( v3 < ((&v9 - &v11 + 30) & 0xFFFFFFFC) );// <28
44 v9 = 0xF; //encryptArray
45 v10 = 0x87u;
46 v11 = 0x62;
47 v12 = 0x14;
48 v13 = 1;
49 v14 = 0xC6u;
50 v15 = 0xF0u;
51 v16 = 33;
52 v17 = 48;
53 v18 = 17;
54 v19 = 80;
55 v20 = 0xD0u;
56 v21 = 0x82u;
57 v22 = 35;
58 v23 = 0xAEu;
59 v24 = 35;
60 v25 = 0xEEu;
61 v26 = 0xA9u;
62 v27 = 0xB4u;
63 v28 = 82;
64 v29 = 120;
65 v30 = 87;
66 v31 = 12;
67 v32 = 0x86u;
68 v33 = 0x8Bu; // 0F 87 62 14 01 C6 F0 21 30 11 50 D0 82 23 AE 23 EE A9 B4 52 78 57 0C 86 8B
69 //
70 //
71 if ( key_lens == 25 )
72 {
73 j = 0;
74 do
75 {
76 v35[j] = __ROL1__(mykey[j], 2); // 循环左移2位
77 ++j;
78 }
79 while ( j != 25 );
80 k = 0;
81 do
82 {
83 v35[k] ^= numb_401460(data, k); // data:(ASCII "1A2F943C4D8C5B6EA3C9BCAD7E")
84 // numb函数根据data、k生成一系列数,
85 //
86 ++k;
87 }
88 while ( k != 25 );
89 v7 = 15;
90 for ( i = 0; v35[i] == v7; v7 = *(&v9 + i) )//关键比较,v35存储内容:(key循环左移2位 异或 numb数据) 结果与encryptArray比较
91 {
92 if ( ++i == 25 )
93 return 1;
94 }
95 }
96 return 0;
97 }
numb_401460(data, k)函数:
int __cdecl sub_401460(char *data, int index)
{
char a; // al
char b; // cl
int x; // eax
int y; // edx 1A2F943C4D8C5B6EA3C9BCAD7E a = data[index];
b = data[index + 1];
if ( (unsigned __int8)(a - 0x30) > 9u )
a -= 0x37;
x = a & 0xF;
y = (b - 0x37) & 0xF;
if ( (unsigned __int8)(b - 0x30) <= 9u )
y = b & 0xF;
return y | 16 * x;

‘wp:

 1 encryptArray=[0x0F, 0x87, 0x62, 0x14, 0x01, 0xC6, 0xF0, 0x21, 0x30, 0x11, 0x50, 0xD0, 0x82, 0x23, 0xAE, 0x23,0xEE, 0xA9, 0xB4, 0x52, 0x78, 0x57, 0x0C, 0x86, 0x8B]
2 data='1A2F943C4D8C5B6EA3C9BCAD7E'
3 numbs=[]
4 # numbs=[0x1a, 0xa2, 0x2f, 0xf9, 0x94, 0x43, 0x3c, 0xc4, 0x4d, 0xd8, 0x8c, 0xc5, 0x5b, 0xb6, 0x6e, 0xea, 0xa3, 0x3c, 0xc9, 0x9b, 0xbc, 0xca, 0xad, 0xd7, 0x7e]
5
6 # def ROLN_(val,N,n):
7 # 假如将一个无符号的数据val,长度为N,需要循环移动n位。可以利用下面的公式:
8 # 循环左移:(val >> (N - n) | (val << n))
9 # 循环右移:(val << (32 - n) | (val >> n))
10 def ROL_2(val):#8字节数循环左移2位
11 return ((val>>6)&0xff)|((val<<2)&0xff)
12 def ROR_2(val):#8字节数循环右移2位
13 return ((val<<6)&0xff)|((val>>2)&0xff)
14 def numb(data,index):
15 a = ord(data[index]);
16 b = ord(data[index + 1]);
17 if ((a - 0x30) > 9):
18 a -= 0x37;
19 x = a & 0xF;
20 y = (b - 0x37) & 0xF;
21 if ((b - 0x30) <= 9):
22 y = b & 0xF;
23 return y | 16 * x;
24
25 for i in range(25):
26 numbs.append(numb(data,i))
27 print('numbs=[',','.join(map(hex,numbs)),']')
28
29 key=[]
30 for i in range(25):
31 x=encryptArray[i]^numbs[i]
32 x=ROR_2(x)
33 key.append(chr(x))
34 print(''.join(key))

 EIS{ea3y_r7Eve0rSe_r1ghT}

在攻防世界中提交失败0.0,Orz

Reverse 高校网络信息安全运维挑战赛的更多相关文章

  1. IgniteMe -高校网络信息安全运维挑战赛

    1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 void *v3; // eax 4 int v4; ...

  2. 【NetDevops】网络自动化运维--1获取用户基本信息

     版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明.  之前博客的云主机到期了没续费,被删啦最重要的是没有备份!此处省略几个字.....      ...

  3. python网络自动化运维之环境搭建(EVE-NG+pycharm)

    参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...

  4. python网络自动化运维paramiko实验

    运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.5 ...

  5. python网络自动化运维之telnetlib实验(EVE-NG+pycharm)

    运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.3 ...

  6. 浅谈SDN架构下的运维工作

    导读 目前国内的网络运维还处于初级阶段,工作人员每天就像救火一样,天天疲于奔命.运维人员只能埋头查找系统运行的日志,耗时耗力,老眼昏花不说,有时候忙了半天还一无所获,作为运维工程师的你,有木有遇到过类 ...

  7. [Linux] day01——运维

    开发和运维,本质都是提供一种服务. ---------------------------------(最终用户)1 应用2 中间件 服务平台 存储 架构 3 操作系统 硬件驱动4 计算机 网络设备 ...

  8. 网易OpenStack部署运维实战

    OpenStack自2010年项目成立以来,已经有超过200个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的 ...

  9. [转] 运维知识体系 -v3.1 作者:赵舜东(赵班长)转载请注明来自于-新运维社区:https://www.unixhot.com

    [From]https://www.unixhot.com/page/ops [运维知识体系]-v3.1 作者:赵舜东(赵班长) (转载请注明来自于-新运维社区:https://www.unixhot ...

随机推荐

  1. Fetch API & cancel duplicate API & cache API

    Fetch API & cancel duplicate API & cache API const usersCache = new Map<string, User>( ...

  2. convert URL Query String to Object All In One

    convert URL Query String to Object All In One URL / query string / paramas query string to object le ...

  3. gitignore auto generator

    gitignore auto generator .gitignore https://gitignore.io/ https://www.toptal.com/developers/gitignor ...

  4. user tracker with ETag

    user tracker with ETag 用户追踪, without cookies clear cache bug 实现原理 HTTP cache hidden iframe 1px image ...

  5. auto embedded component in an online code editor

    auto embedded component in an online code editor how to auto open a component in the third parts onl ...

  6. Flutter: 判断是Android还是Ios

    /// 在ui中使用下面的这个判断 Theme.of(context).platform == TargetPlatform.android /// 而不是 import 'dart:io' Plat ...

  7. [转]ROS 传感器消息及RVIZ可视化Laserscan和PointCloud

    https://blog.csdn.net/yangziluomu/article/details/79576508 https://answers.ros.org/question/60239/ho ...

  8. DatePicker日期选择器的使用

    效果展示: 代码如下: <el-date-picker v-model="listQuery.times" type="daterange" range- ...

  9. Go的map

    目录 map 一.map的创建 1.map的类型 2.定义并初始化 二.给map添加元素 三.获取map的元素 四.删除map的元素 五.获取map的长度 六.map的类型 七.map的相等性 八.循 ...

  10. Tango with django 1.9 中文——3.Django基础

    让我们开始运用Django.本章主要是给你一个关于创建新项目和新应用过程的概览.在本章的末尾,你将建立起一个简单的由Django驱动的网站. 3.1 配置测试 让我们测试以下你的Python和Djan ...