Reverse 高校网络信息安全运维挑战赛
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 高校网络信息安全运维挑战赛的更多相关文章
- IgniteMe -高校网络信息安全运维挑战赛
1 int __cdecl main(int argc, const char **argv, const char **envp) 2 { 3 void *v3; // eax 4 int v4; ...
- 【NetDevops】网络自动化运维--1获取用户基本信息
版权声明:本文为博主原创文章,遵循 CC 4.0 by-sa 版权协议,转载请附上原文出处链接和本声明. 之前博客的云主机到期了没续费,被删啦最重要的是没有备份!此处省略几个字..... ...
- python网络自动化运维之环境搭建(EVE-NG+pycharm)
参考了很多资料,发现现在很多环境用的都是GNS3加linux下的python,几乎没有是用EVE-NG加上pycharm的教程,EVE的功能如此强大,存在的教程却较少,这里我出一篇教程供使用EVE作为 ...
- python网络自动化运维paramiko实验
运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.5 ...
- python网络自动化运维之telnetlib实验(EVE-NG+pycharm)
运行环境: 物理机:win10 1903 网络设备:EVE-NG模拟器上运行思科三层路由器 网络设备OS版本:cisco ios(versions 15.6) python环境:pycharm 3.3 ...
- 浅谈SDN架构下的运维工作
导读 目前国内的网络运维还处于初级阶段,工作人员每天就像救火一样,天天疲于奔命.运维人员只能埋头查找系统运行的日志,耗时耗力,老眼昏花不说,有时候忙了半天还一无所获,作为运维工程师的你,有木有遇到过类 ...
- [Linux] day01——运维
开发和运维,本质都是提供一种服务. ---------------------------------(最终用户)1 应用2 中间件 服务平台 存储 架构 3 操作系统 硬件驱动4 计算机 网络设备 ...
- 网易OpenStack部署运维实战
OpenStack自2010年项目成立以来,已经有超过200个公司加入了 OpenStack 项目,目前参与 OpenStack 项目的开发人员有 17,000+,而且这些数字还在增加,作为一个开源的 ...
- [转] 运维知识体系 -v3.1 作者:赵舜东(赵班长)转载请注明来自于-新运维社区:https://www.unixhot.com
[From]https://www.unixhot.com/page/ops [运维知识体系]-v3.1 作者:赵舜东(赵班长) (转载请注明来自于-新运维社区:https://www.unixhot ...
随机推荐
- 属于我的md5sum程序
目录 前言 介绍 使用说明 总结 前言 之所以想做这个软件是因为一直在使用的http://keir.net/hash.html软件有很多功能不能满足. 经过自学C#,研究多线程,异步更新UI,等等知识 ...
- PWA & bug
PWA bug https://developer.mozilla.org/zh-CN/docs/Web/Progressive_web_apps https://learning.xgqfrms.x ...
- c++ string split function
#include <string> #include <vector> #include <regex> struct SplitListItem { std::s ...
- VAST助推NGK公链热度升温,日活超过以太坊!
在区块链市场,如果说过去是比特币和以太坊的时代,那么现在和未来绝对是NGK的时代. NGK公链的出现,让区块链市场看到了新的希望.它不仅仅是开放的和可编程的,而且是低Gas燃耗的,以及创新共识机制的. ...
- Baccarat项目专用代币BGV的价值如何?
NGK投资者对于NGK平台自身的DeFi项目呼声越来越高,经过数月的紧张研发,检验和内测工作,NGK官方将于近日推出其去中心化金融项目--Baccarat,此项目为避免以太坊易被攻击,网络拥堵出块慢以 ...
- Vue学习笔记-vue-element-admin 按装报错再按装
一 使用环境 开发系统: windows 后端IDE: PyCharm 前端IDE: VSCode 数据库: msyql,navicat 编程语言: python3.7 (Windows x86- ...
- 使用 Tye 辅助开发 k8s 应用竟如此简单(六)
续上篇,这篇我们来进一步探索 Tye 更多的使用方法.本篇我们将进一步研究 Tye 与分布式应用程序运行时 Dapr 如何碰撞出更精彩的火花. Newbe.Claptrap 是一个用于轻松应对并发问题 ...
- 记录vue springboot 跨域采坑
vue配置 域名src\main.js要与config\index.js一样 var axios = require('axios')axios.defaults.baseURL = 'http:// ...
- wxWidgets源码分析(4) - 消息处理过程
目录 消息处理过程 消息如何到达wxWidgets Win32消息与wxWidgets消息的转换 菜单消息处理 消息处理链(基于wxEvtHandler) 消息处理链(基于wxWindow) 总结 消 ...
- springboot整合jsp,完成公交车站路线图
转: springboot整合jsp,完成公交车站路线图 点赞再看,养成习惯 开发环境: jdk 8 intellij idea tomcat 8 mysql 5.7 maven 3.6 所用技术: ...