admin管理员组文章数量:1122905
前期准备
虚拟机:VMWare 14 Pro
操作系统:(均为64位)
①Windows XP SP2系统 用于运行学生端以及进行分析
②Windows 7家庭普通版 用于运行教师端
③Windows 7旗舰版 用于运行学生端以及调试破解程序
(注:在win7下用od调试学生端会失败,因此用xp进行分析,由于学校系统用的win7,我要模拟一下真实环境,所以用了win7来调试破解程序)
极域软件:V6豪华版 以及 从学校拷贝过来的 v1.0 For Android版本
分析软件:Ollyice V1.1
分析学生端
首先,在Ollyice中载入学生端程序
F9先运行一会
猜想全屏广播时必然会调用 SetForegroundWindow 方法,所以下断点
BPX SetForegroundWindow
可以看到,已经下了很多断点
接着,在教师端先进行全屏广播,看它停在哪里
果然,它停住了
看下面的汇编代码可知,它会判断寄存器EBP里的值,所以可以推测这是个循环消息处理的地方,经过几次实验可知,的确是这样的,而且全屏广播时EBP的值总是1,所以为了方便,这里设置断点条件 EBP==1
而且还可以看到,教师端是可以选择是否进行全屏广播,所以可以判断学生端必然有个关键的判断,接着就是耐心的去找那个判断
一般的技巧就是F8跟着走,遇到CALL就停下来留心一下,如果进入某一个CALL后广播窗口出现了,则教师端关闭全屏广播,在那个地方按F7跟入,再重复以上步骤,直到遇到某个判断,满足条件 在全屏是进入(或不进入),而在小窗口广播时不进入(或进入),则那个判断就是关键判断
(注意,这步非常需要耐心,而且很累…)
找到关键判断之后,记录下地址,尝试将它改成JMP或NOP再进行测试,终于,我找到了地址,是431C14,将那个JE改成JMP就可以实现永远都是小窗口广播
图中是我已经修改过的学生端(直接修改学生端程序,再保存的)
编程处理
我们已经知道了,将431C14那里的74改为EB即可实现永久小窗口,但是由于想要启动修改过的学生端需要杀死原版的学生端,这样做的话教师端会出现我的机器注销又迅速上线的提示,会引起怀疑,所以我决定通过Win32API来实现动态的写入内存
核心方法:WriteProcessMomery
那些找学生端PID和获取Handle的代码就不贴出来了,这里只贴一下核心代码
BOOL SetFullScreen(HANDLE hStudent, BOOL fullScreen)
{
int updated = 0xEB;
if (fullScreen)
updated = 0x74;
PSIZE_T pWritten = new SIZE_T;
LPVOID address = (LPVOID)0x00431c14;
WriteProcessMemory(hStudent, address, &updated, 1, pWritten);
if (*pWritten == 1)
return TRUE;
return FALSE;
}
Next Step
接下来我会去研究通过修改系统API来实现这个功能,届时应该能实现在被全屏时也能窗口化,同时还能解除全局键盘钩子
参考
https://www.52pojie/thread-542855-1-1.html
写在最后
这种方法还是存在局限性
1.不具备通用性
2.分析学生端的操作太复杂了
3.在已经被全屏广播后这招没用(即使是设置了用快捷键Ctrl键来执行破解)
初学Win32,可能有些地方可能还是做的不够好,望批评指正!
版权声明:本文标题:极域电子教室学生端全屏广播分析及破解的编程实现 内容由网友自发贡献,该文观点仅代表作者本人, 转载请联系作者并注明出处:http://www.betaflare.com/biancheng/1726377768a1084286.html, 本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如发现本站有涉嫌抄袭侵权/违法违规的内容,一经查实,本站将立刻删除。
发表评论