本文内容仅供学习,不得用于商业用途
- 使用说明
- 任务栏托盘图标
- 快捷键
- 杀掉极域进程
- 破解密码
- 杀掉学生机房管理助手
- 解除一些系统工具的禁用
- 黑屏或者全屏广播怎么办
- 顺便说说
源码也在内!
下载:https://wwt.lanzoub.com/b00pu06li
密码:bbzl
有些时候会有dll缺失或者“无法在此计算机上运行”:dll缺失用dev c++重新编译;无法打开,请运行兼容性问题疑难解答
界面很简单,一目了然,下面是隐藏功能
最小化时大图标从任务栏隐藏,会藏到任务栏托盘
Shift+K杀掉机房助手,Shift+W最小化顶层窗口(也可以把鼠标移动到屏幕左上角)
下面是原理
杀掉极域进程大多数工具都用了ntsd来杀进程,不过容易被封杀,去除控制用作者自己做的工具,具体是暴力杀线程或者清零ntdll基址。为什么不用最简单的TerminateProcess()?请看:
这个函数被极域hook了,如果结束的是极域的进程,就拦截。其实有个简单的办法:
//用杀掉每个线程的方法解决某些进程hook住了TerminateProcess()的问题
bool KillProcess(DWORD dwProcessID) {
HANDLE hSnapshot = CreateToolhelp32Snapshot(
TH32CS_SNAPTHREAD, dwProcessID);
if (hSnapshot != INVALID_HANDLE_VALUE) {
THREADENTRY32 te = {sizeof(te)};
BOOL fOk = Thread32First(hSnapshot, &te);
for (; fOk; fOk = Thread32Next(hSnapshot, &te)) {
if (te.th32OwnerProcessID == dwProcessID) {
HANDLE hThread = OpenThread(THREAD_TERMINATE, FALSE, te.th32ThreadID);
TerminateThread(hThread, 0);
CloseHandle(hThread);
}
}
CloseHandle(hSnapshot);
return true;
}
return false;
}
如果把进程看作一个团伙,那么线程就是团伙的成员,如果把每个成员都干掉了,那么这个团伙就也完蛋了。极域并没有hookTerminateThread(),所以用这种办法来干掉进程。
破解密码这里用的是这个文章的算法:(更新中)极域破解分析(杀死和重启,挂起和恢复,解除全屏按钮限制,解除键盘锁,获取极域安装路径,极域密码破解)
杀掉学生机房管理助手机房助手有两个进程,prozs.exe和jfglzs.exe,其中prozs.exe的名字是随机的,每天都不一样,具体看我的文章:最新支持7.2!用C++干掉讨厌的学生机房管理助手
这里支持7.2和7.1以下版本,还有更古老的,名字是固定的(是哪几个进程看这里:【去除控制】对学生机房管理助手6.8的分析与突破),估计也没有什么机房还用这么老的版本,就不做支持了
char version[6];//考虑极端值如6.9.5
HKEY retKey;
RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\WOW6432Node\ZM软件工作室\学生机房管理助手", 0, KEY_QUERY_VALUE | KEY_WOW64_32KEY, &retKey);
DWORD size = sizeof(version);
RegQueryValueEx(retKey, "Version", NULL, NULL, (LPBYTE)&version, &size);
RegCloseKey(retKey);
//取时间用于计算prozs.exe的随机进程名
time_t curtime;
time(&curtime);
tm *nowtime = localtime(&curtime);
int n3 = 1 + nowtime->tm_mon + nowtime->tm_mday;int n4, n5, n6;
char c1, c2, c3, c4;
DWORD prozsPid;
if (version[0]=='7'&&version[2]=='2') {
//以下为7.2版本逻辑
n4 = n3 % 7, n5 = n3 % 9, n6 = n3 % 5;
if (n3 % 2 != 0) {
c1 = 103 + n5, c2 = 111 + n4, c3 = 107 + n6, c4 = 48 + n4;
} else {
c1 = 97 + n4, c2 = 109 + n5, c3 = 101 + n6, c4 = 48 + n5;
}
char c[5] = {c1, c2, c3, c4, ' '};
prozsPid = GetProcessIDFromName(strcat(c, ".exe")); //取得pid
} else {
//以下为7.2版本之前的逻辑
n4 = n3 % 3 + 3, n5 = n3 % 4 + 4;
char str[4];
str[0] = 'p';
if (n3 % 2 != 0)
str[1] = n4 + 102, str[2] = n5 + 98;
else
str[1] = n4 + 99, str[2] = n5 + 106;
str[3] = ' ';
prozsPid = GetProcessIDFromName(strcat(str, ".exe"));
}
KillProcess(prozsPid);
KillProcess(GetProcessIDFromName("jfglzs.exe"));
其中还用到这个函数,贴一下,需要头文件tlhelp32.h
//https://blog.csdn.net/yanglx2022/article/details/46582629
DWORD GetProcessIDFromName(LPCSTR szName) {
DWORD id = 0; // 进程ID
PROCESSENTRY32 pe; // 进程信息
pe.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0); // 获取系统进程列表
if (Process32First(hSnapshot, &pe)) { // 返回系统中第一个进程的信息
do {
if (0 == _stricmp(pe.szExeFile, szName)) { // 不区分大小写比较
id = pe.th32ProcessID;
break;
}
} while (Process32Next(hSnapshot, &pe)); // 下一个进程
}
CloseHandle(hSnapshot); // 删除快照
return id;
}
不过有个问题:在半夜12点前启动机房助手,过了12点再启动本程序,算出的进程名为新一天的。解决办法也不难:重启电脑,或者临时改系统时间为机房助手启动时的时间,在这个时间杀掉进程即可。
解除一些系统工具的禁用原理是改注册表键值,到时候我具体写文章来叙述,现在可以在源码里找到注册表路径。失败的话,用管理员权限运行,也有可能是杀毒软件拦截。
重启资源管理器,就是先杀掉explorer.exe再用命令行启动,如果explorer.exe被关掉,但再也没有启动,请解除cmd限制后再点击一次按钮试试
需要说明的是,解除USB的限制是改了机房助手的注册表,防止蓝屏,而不是改系统的注册表键值(机房助手也说明了嘛,非注册表法)
用Timer每秒计时,然后判断鼠标是否在屏幕左上角,如果在,就弹出提示框,可以最小化当前窗口
实现:(写在Timer的事件中)
//写在前面
POINT p;
//检测鼠标左上角事件
GetCursorPos(&p);
if (p.x == 0 && p.y == 0) {
HWND topHwnd = GetForegroundWindow();
if (MessageBox(hwnd,"检测到了鼠标位置变化!是否最小化置顶窗口?", "实时监测", MB_YESNO | MB_ICONINFORMATION | MB_SETFOREGROUND | MB_TOPMOST) == IDYES) {
ShowWindow(topHwnd, SW_MINIMIZE);
}
}
极域会有键盘锁,这个目前没有做实现。解决办法,可以直接杀掉进程,或者用这个软件破解极域电子教室,老师再也控制不了我了!极域电子教室防控制
当然,我们软件的优势是,可以随时恢复黑屏安静(在任务栏)
学生机房管理助手有软件黑名单,窗口名或程序名包含“极域”就会蓝屏,因此窗口标题用这串。
因为VC++太大了,装不起,本来想要MFC的,就只能用dev c++开发win32程序了,用win32也有个优势是大家重编译也方便。
MFC的按钮控件当获得焦点(用鼠标按住,然后移开按钮,再松开鼠标)会有蓝色边框,而win32的控件不会有这种效果,如果设置BS_DEFPUSHBUTTON样式,则会有蓝框,但是一直有蓝框,不是CButton的效果,想问问大家,怎么实现这种效果?



