中山大学本科SE专业的暑期实训分为三级,要求报名者在封闭的云桌面上独立完成编码、写文档任务,并在云桌面内部提交。云桌面环境不联网,因此所有的任务尤其是一些参考的配置文件都要独自手打一遍,十分繁琐,要解决这种不便就需要破解文件传输的问题。
请遵守实训规则,不要利用本文介绍的技术手段抄袭!
一、利用FTP服务器
(本方法已经暂时失效)
云桌面连接着内网,所有人都能在寝室或者实验室的计算机访问,因此,内网的通信必须保证,理论上可以利用内网传输文件。
许多人发现了可以在自己电脑简单建立FTP服务器来传文件,具体方法你懂的。
很遗憾,学院方面已经知道了这个“文件传输错误”,特地在2016年6月30日重置了云桌面,屏蔽了内网。
二、利用模拟键盘,输入字符
一个模拟键盘的例子: [ 利用键盘事件keybd_event(Win32 API)模拟键盘按键 ]
很遗憾,Win32API的键盘事件不够底层,在云桌面没有输入任何字符。
可以考虑利用更加底层的winio库,编写键盘驱动,写入到云桌面。
为了实训的进度,我最终使用了按键精灵这一商业软件帮助我快速实现传输文件的功能。
安装好按键精灵后,可以熟悉下按键精灵的操作。
然后编写以下程序代码shixunCrackSprite.cpp,生成按键精灵的脚本代码。
#include <windows.h>
#include <cctype>
#include <fstream>
void sendKey(std::ostream &os, const int key, bool shift = false) {
if (shift)
os << "KeyDown 16, 1\n";
os << "KeyPress " << key << ", 1\n";
if (shift)
os << "KeyUp 16, 1\n";
}
void match(const char ch, int &key, bool &shift) {
if (ch == ' ') { key = 32; shift = false; return;}
if (ch == '\t') { key = 9; shift = false; return;}
if (ch == '\n') { key = 13; shift = false; return;}
if (ch == &