周杰伦1/12/2025, 8:00:56 PM
文章分类软件逆向阅读数 : 11阅读时长 : 5分钟
【软件逆向-某考试软件逆向分析】此文章归类为:软件逆向。
某考试软件的逆向分析,分析它是如何禁用远程桌面、黑屏、全屏等方法来达到防作弊目的的。
先用die静态检查。发现客户端使用QT5.15进行开发。 在多次调试中发现基址的都不一致,才发现了客户端使用了动态基址。在进行分析之前首先去掉动态机制。如下图所示: 使用010Editor找到数据结构dllcharacteristics,把值改为0,就禁用了随机基址。
主函数入口是WinMain,有GetCommandLineW函数,用来获取命令行参数。 在函数sub_401F20中,发现了初始化窗口相关的操作, 再往下发现了nohook、repair的命令行参数 经过测试,命令行中带有--nohook会去掉键盘的限制,任务管理器也能调用了,使用向日葵远程也不黑屏了。分析了一下init_window,逻辑很复杂,为了简化流程,直接使用函数搜索,能更快找到关键点。让某窗口黑屏的函数是SetWindowDisplayAffinity,直接查找引用,在sub_40c170函数中发现了引用。把sub_40c170重命名为black_window,便于之后分析。 调用black_window的函数是sub_405360,把sub_405360命名为hook_window。调用hook_window的函数有init_window、sub_404d10、sub_4052e0,而sub_404d10和sub_4052e0都会被init_window调用,所以hook_window很关键。 接下来具体分析hook_window,这里有6个函数,各自进行分析后,给出如下的注释。 分别进行重命名,如下所示。 其中发现a1这个变量被多次引用,说明这个a1作为是否设置限制的判断条件。在set_hook中的判断如下。 在set_desktop中的判断如下。 如果a1=0,那么会使得所有的限制得到解除。查看hook_window函数的调用关系图。 有init_window、sub_404d10、sub_4052e0三个函数会调用,而a1作为第一个参数传入hook_window,所以把调用函数的参数都改为0。在IDA中,用keypatch,应用到exe文件,运行.按下win键,弹出了windows开始菜单,成功解除限制。 想让软件界面窗口化显示,QT界面设置窗口全屏显示,可以采取以下方法:showFullScreen()、setWindowFlag()。查找函数setWindowFlag,找到4个引用位置,在引用中一个一个试。 在update_page中,把QWidget::setWindowFlag(v63, 0x800, 1);改为QWidget::setWindowFlag(v63, 0x1, 1);修改后,窗口依然会全屏幕显示。查找showFullScreen,发现了调用。在sub_4054f0中,经过调试,发现会调用showFullScreen,改为jmp,调用showMaximized。 成功将软件窗口化了,但是鼠标被限制了,只能点击窗口内的组件,窗口外是没反应的。限制光标的函数是clipCursor,直接查找clipCursor的调用。在sub_40C1E0找到了调用。 用keypatch改为push 0;nop;nop;call ds:ClipCursor。现在就能自由地放大缩小了,如下图:
更多【软件逆向-某考试软件逆向分析】相关视频教程:www.yxfzedu.com