本帖所包含的内容仅限技术交流和学习研究使用,禁止用于其他用途!因使用不当造成的一切后果与本人无关!

毕业了,曾经我花了4节课的时间分析计算机课的控制软件(自己懒得搭环境),干脆写篇文章分享给各位,追求自由的小伙伴们可以看看,不过被BAN了不要找我(本人曾被物理封杀……)

限制功能分析

首先这玩意儿在屏幕广播的时候是屏蔽键盘按键的(home等功能键还有用),我用MyMonitor分析后(日志找不到了。。)发现它是挂了一个WH_KEYBOARD_LL钩子,然后屏蔽了系统热键(关于ctrl+alt+del之前找到过一个详细分析文档,也找不到了……抱歉,各位度娘吧),不过输入法还是可以用的,大家可以用微软的标准输入法打开帮助试试看,是不是过了差不多一秒就消失了?没错,这货还每隔1S左右置顶广播窗口,非常难搞。
然后是登入密码,旧版的在注册表HKEY_LOCAL_MACHINE\SOFTWARE\TopDomain\e-learning Class Standard\1.00中可以找到明文密码(程序员SX了),不过新版的改成了密文(具体什么版本记不得了,大家试试就行)。

破解思路

  • 爆掉程序,用ntsd可以秒破,不过老师会发现= =
  • 针对WH_KEYBOARD_LL钩子,由于windows是最后挂的钩子才生效,所以可以通过循环挂钩的方式抢占掉钩子。
  • 针对置顶窗口,有两种方法:第一种是和干掉钩子一样,你每隔1S置顶,我不SLEEP无限循环置顶就OK了…… 第二种是利用任务管理器右击最小化就可以了。

破解方法

  • 徒手版
  • 被控制后切到标准输入法,点击软键盘,然后按键盘上的ctrl+alt,再用鼠标点击软键盘的del键,看看!!任务管理器出来了…不过有1S的置顶,会一闪而过,这时右击“屏幕广播窗口”,点击最小化,手速快一点多试几次就可以了。(有时候计时器卡一下会延长一会儿)
    • 优点:不要工具、老师来了可以瞬间点任务栏打开窗口、被控制了也能用
    • 缺点:需要一点手速(熟能生巧)
  • win7可以用资源监视器,控制之前把studentmain.exe挂起(是的,没错,没有结束权限,但可以挂起…),经试验教师端监控会停留在挂起时的界面!,紧急情况及时恢复就可以了。
    • 优点:可以无视监控(做个样子挂起就行了)、简单易用
    • 缺点:需要资源监视器(xp好像没有)、不及时恢复后果…
  • XP可以用ntsd -c q -pn studentmain.exe干掉程序
    • 优点:简单粗暴
    • 缺点:需要ntsd、老师也会简单粗暴地发现你掉线了
  • 工具版
    用我的FuckTeacher小工具!(我没装极域,会显示软件未安装,有的话会自动检测)
    1.png
    2.png
    一些技术说明:
  • 干掉置顶用的就是无限循环置顶。
  • 干掉客户端是调用ntsd,win7可以用压缩包中附带的。
  • 干掉键盘锁定用的就是开新线程循环挂钩,核心代码(无视随便起的变量吧):
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    16
    17
    18
    19
    20
    21
    22
    23
    UINT Update(LPVOID lpParameter)
    {
    HHOOK m_hHOOK1 = NULL, m_hHOOK2 = NULL,m_hHOOK3 = NULL,m_hHOOK4 = NULL;
    m_hHOOK1 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    m_hHOOK2 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    m_hHOOK3 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    m_hHOOK4 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    while(true)
    {
    if(flg1)
    {
    UnhookWindowsHookEx(m_hHOOK1);
    UnhookWindowsHookEx(m_hHOOK3);
    m_hHOOK1 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    m_hHOOK3 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    UnhookWindowsHookEx(m_hHOOK2);
    UnhookWindowsHookEx(m_hHOOK4);
    m_hHOOK2 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD_LL, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    m_hHOOK4 = (HHOOK)SetWindowsHookEx(WH_KEYBOARD, (HOOKPROC)KeyboardProc, GetModuleHandle(NULL), 0);
    }
    }
    return 0;
    }
  • 置顶任务管理器是方便右击最小化的,原理和窗口置顶一样,也在一个线程里
    1
    2
    3
    4
    5
    6
    7
    8
    9
    10
    11
    12
    13
    14
    15
    UINT Updatewindow(LPVOID lpParameter)
    {
    CFuckTeacherDlg* dlg = (CFuckTeacherDlg *)lpParameter;
    while(true)
    {
    dlg->SetWindowPos(&CWnd::wndTopMost,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); //本程序置顶
    CWnd *pwnd = dlg->FindWindow( (LPCTSTR)32770, "Windows 任务管理器");
    hwnd = pwnd->GetSafeHwnd();
    if(hwnd != NULL)
    {
    SetWindowPos(hwnd,HWND_TOPMOST,0,0,0,0, SWP_NOMOVE | SWP_NOSIZE); //任务管理器置顶
    }
    }
    return 0;
    }
  • 优点:近乎全能(挂起线程好像比较麻烦就没加= =)
  • 缺点:需要带U盘或联网

下载地址

FuckTeacher.zip