逆向笔记 | 破解极域学生端密码并实现窗口化屏幕广播

  • 前言:

    学校上计算机课时,经常敲代码敲到一半就被老师广播屏幕,这很无奈。其实一种简单的方法是任务管理器里结束 StudentMain.exe 便可躲过屏幕广播。但无法接收文件,同时老师讲课重要点没听到。不是一种好办法,拿了点时间破解了极域,记录一下破解的过程发上博客。不是为了获得什么利益,破解只是为了破解本身。

    修改了两个地方,爆破跳转使极域学生端可以任意密码进入设置页面和窗口化广播屏幕。窗口化可以边听课边写代码或者跟着老师的步骤走,如果不想听,最小化窗口就行了,脱离控制,方便!

  • 环境
    操作系统:Win7 x64位
    极域版本:v4.0 2015豪华版

在这里插入图片描述
逆向过程正文:

一、破解密码

打开olldbg,我这里使用是吾爱破解专版od,打开极域学生端的设置窗口,然后附加 StudentMain.exe 进程
在这里插入图片描述
附加后F9运行起来,在极域输入错误的密码进入,没有提示错误信息框,只是窗口左右摇几摇表示密码不正确,由此判断只有输入正确密码才有反应,信息收集的差不多了,我们探讨找到关键破解点的思路
遇到这种无错误提示框时,一般用两种方法:

  1. 下断点 GetWindowText 。绝大多数程序点击确定按钮后,会获取到编辑框里的内容,然后通过和正确的密码对比,而GetWindowText函数就是获取组件的标题/文本内容。
  2. 拦截消息断点,并设置按钮放开的消息条件,这样,当用户点确定后放开,就会被拦下来了。

由于第二种方法设置太过繁琐,舍之。我们采取第一种方法。

对于这样的编辑框中输注册码的程序我们要设断点首选的 API 函数就是 GetDlgItemText 及 GetWindowText。每个函数都有两个版本,一个是 ASCII 版,在函数后添加一个 A 表 示,如 GetDlgItemTextA,另一个是 UNICODE 版,在函数后添加一个 W 表示。如 GetDlgItemTextW。对于编译为 UNCODE 版的程序可能在 Win98 下不能运行,因为 Win98 并非是完全支持 UNICODE 的系统。而 NT 系统则从底层支持 UNICODE,它可 以在操作系统内对字串进行转换,同时支持 ASCII 和 UNICODE 版本函数的调用。一般 我们打开的程序看到的调用都是 ASCII 类型的函数,以“A”结尾。

GetWindowText 函数功能:

该函数将指定窗口的标题条文本(如果存在)拷贝到一个缓存区内。如果指定的窗口是一个控件,则拷贝控件的文本。但是,GetWindowText可能无法获取外部应用程序中控件的文本,获取自绘的控件或者是外部的密码编辑框很有可能会失败。
函数原型:Int GetWindowText(HWND hWnd,LPTSTR lpString,Int nMaxCount);

在命令窗口中输入

bp GetWindowTextW

然后回车,就成功了,我们在od下可以按Alt + B查看有没有成功下断点。 下断点
下完断点,点击确定按钮,这时,你会发现,还没点确定,鼠标移动到极域的窗口时就已经断下来了,为什么呢?
因为鼠标移动到窗口、或者点击某个按钮时,程序都会调用GetWindowTextW获取当前鼠标位置的焦点内容,这点我们可以不管,我们只想获取编辑框的内容,所以先让鼠标移动到确定按钮,然后回到OD按F9运行至没有断下来,点确定按钮,程序断下来第一次不是我们想要的,因为它还会获取按钮这个控件的标题。所以再运行一次,断下来时堆栈如图所示,class=‘Edit’表示获取编辑框的内容啦。
断点位置
先说明一下,我输入了一个错误密码是“123”,而进入设置页面的正确密码是“up”。
好了,Ctrl + F9 执行到返回,然后F8一步步回到程序领空这个位置在这里插入图片描述

输入的错误密码已经出现在寄存器了,摸索下面的代码,就发现了可疑点

0044FA4E   .  68 F4884F00   push StudentM.004F88F4                      ;  UNICODE "mythware_super_password"
0044FA53   .  8D4C24 0C     lea ecx,dword ptr ss:[esp+0xC]
0044FA57   .  FF15 4CA04E00 call dword ptr ds:[<&MFC80U.#ATL::CStringT<wchar_t,StrTr>;  mfc80u.#ATL::CStringT<wchar_t,StrTraitMFC_DLL<wchar_t,ATL::ChTraitsCRT<wchar_t> > >::Compare_1472
0044FA5D   .  85C0          test eax,eax
0044FA5F   .  74 66         je short StudentM.0044FAC7

F7步入0044FA57这个call分析代码如下,注意看堆栈位置
在这里插入图片描述
知道了这个call功能是判断输入的密码是不是mythware_super_password。return回到上层,继续分析。在这里插入图片描述

0044FA49    E8 92F60700     call <jmp.&MFC80U.#3756>                 ; 获取编辑框内容
0044FA4E    68 F4884F00     push StudentM.004F88F4                   ; UNICODE "mythware_super_password"
0044FA53    8D4C24 0C       lea ecx,dword ptr ss:[esp+0xC]
0044FA57    FF15 4CA04E00   call dword ptr ds:[<&MFC80U.#1472>]      ; 判断字符串是否相同函数
0044FA5D    85C0            test eax,eax
0044FA5F    74 66           je short StudentM.0044FAC7               ; 如果输入是mythware_super_password则跳转
0044FA61    8D4E 74         lea ecx,dword ptr ds:[esi+0x74]
0044FA64    FF15 949F4E00   call dword ptr ds:[<&MFC80U.#870>]       ; 取出正确密码,放到eax
0044FA6A    50              push eax
0044FA6B    8D4C24 0C       lea ecx,dword ptr ss:[esp+0xC]
0044FA6F    FF15 4CA04E00   call dword ptr ds:[<&MFC80U.#1472>]      ; 判断用户输入的密码是否正确
0044FA75    85C0            test eax,eax
0044FA77    EB 4E           je short StudentM.0044FAC7              ; 如果密码正确则跳转

得出结论,将0044FA77地址的je指令改为jmp就能实现爆破密码。

0044FA77   /EB 4E           jmp short StudentM.0044FAC7              ; je改成jmp输入任意密码也正确

另外,上述分析的“mythware_super_password”就是超级管理员密码,这个密码通杀任何同版本的极域。
改完后,我们就可以输入任意密码进入设置页面了。
在这里插入图片描述

二、实现窗口化
为了方便寻找关键断点,我同时用了两个虚拟机,一个学生端(被控端),一个教师端。安装包在网上便可以找到。
在被老师控制时,屏幕上有一条菜单栏,屏幕右上角有一个按钮可以选择全屏或者窗口化,但上课广播时被禁用了。
在这里插入图片描述
窗口化状态下是这样的
在这里插入图片描述
在教师端窗口化模式广播,按钮是可以用的。点击全屏广播后按钮就禁止了。突破点就是下断点拦截按钮禁用函数。即窗口化变回全屏广播会用到这个函数。

在OD命令窗口输入

bp EnableWindow

该函数的函数功能为:允许/禁止指定的窗口或控件接受鼠标和键盘的输入,当输入被禁止时,窗口不响应鼠标和按键的输入,输入允许时,窗口接受所有的输入。
下面是它的函数原型:BOOL EnableWindow(HWND hWnd,BOOL bEnable);
参数:
hWnd:被允许/禁止的窗口句柄。
bEnable:定义窗口是被允许,还是被禁止。若该参数为TRUE,则窗口被允许。若该参数为FALSE,则窗口被禁止。
返回值:如果窗口原来是被禁止的,返回值不为零;如果窗口原来不是被禁止的,返回值为零。若想获得更多的错误信息,可调用GetLastError函数。

窗口化广播模式 下断点 回到教师端虚拟机,点击全屏广播,再回到学生端,已经断下来了
在这里插入图片描述
Ctrl + F9执行到返回,F8几步回到程序领空。向上面顺藤摸瓜分析,寻找可以修改的地方。
在这里插入图片描述

01B9300C     /74 1A         je short LibDeskM.01B93028                 ;  确定这里就是全屏化禁止按钮了
01B9300E  |. |33C0          xor eax,eax
01B93010  |. |85F6          test esi,esi

将01B9300C地址的je改jmp,测试运行,全屏广播下按钮没有被禁用。说明爆破成功

01B9300C     /EB 1A         jmp short LibDeskM.01B93028               ;  确定这里就是全屏化禁止按钮了

右上角按钮可以使用了。
在这里插入图片描述
总结

极域无条件密码

原来是:
0044FA77     74 4E         je short StudentM.0044FAC7

后来改:
0044FA77     EB 4E         jmp short StudentM.0044FAC7

特征码:74 4E 8B 56 20 8D 4E 78

周围内容:
0044FA6A   .  50            push eax
0044FA6B   .  8D4C24 0C     lea ecx,dword ptr ss:[esp+0xC]
0044FA6F   .  FF15 4CA04E00 call dword ptr ds:[<&MFC80U.#1472>]      ;  进行密码比较
0044FA75   .  85C0          test eax,eax
0044FA77      74 4E         je short StudentM.0044FAC7               ; 关键爆破点
0044FA79   .  8B56 20       mov edx,dword ptr ds:[esi+0x20]
0044FA7C   .  8D4E 78       lea ecx,dword ptr ds:[esi+0x78]
极域窗口化(原理:下断点 bp EnableWindow)


DeskMonitor.dll + 0001300C    的数据可以改
原来是:
01B7300C     74 1A         je short LibDeskM.01B73028

后来改:
0001300C    EB 1A           jmp short 00013028

特征码:74 1A 33 C0 85 F6

周围内容:
01B73001   .  8D4F 5C       lea ecx,dword ptr ds:[edi+0x5C]
01B73004   .  85C9          test ecx,ecx
01B73006   .  74 20         je short LibDeskM.01B73028
01B73008   .  8379 20 00    cmp dword ptr ds:[ecx+0x20],0x0          ;  这个函数是判断是否为禁止按钮?
01B7300C      74 1A         je short LibDeskM.01B73028
01B7300E   .  33C0          xor eax,eax
01B73010   .  85F6          test esi,esi

根据得到的特征码可以自己写个内存修改工具(也可以下载下面链接里的),整个过程比较简单,只是爆破两个地方,没有技术可言。但学习这件事,不光光是输入,还要输出表达。接下来还会写一篇极域注册表密码的解密算法分析过程。欢迎关注。

另外,附上现成的程序及极域窗口化爆破后的dll,有需要的可以下载。dll使用方法是先结束极域进程,然后打开极域的文件目录,粘贴覆盖掉之前的dll,再打开极域,就能使用了,老师广播时点击右上角按钮。

破解方式一:替换dll

极域电子教室窗口化dll
csdn下载
https://download.csdn.net/download/koevas/10897440
百度云盘
链接:https://pan.baidu.com/s/1QiKa9H46wNRFI913OghKkg
提取码:763g

破解方式二:运行补丁程序

破解极域学生端程序
https://download.csdn.net/download/koevas/10897453
百度云盘
链接:https://pan.baidu.com/s/1cHj5KJhTmMwREAh2_cuqPQ
提取码:ukfs

  • 25
    点赞
  • 86
    收藏
    觉得还不错? 一键收藏
  • 17
    评论
评论 17
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值