敬告作者:你这么天天更新的,其实很少有老师愿意给每台电脑关掉还原、更新软件、开启还原,真正更新率低得离谱,也没啥新功能,仅仅为了不被杀就绞尽脑汁更新算法,开销大,性价比低。如果你看到这篇文章,希望你好好考虑更新一些造福更多人的软件,而不是纠结于这个!
学生机房管理助手更新了7.5版本,原先我预备最近就发布已破解7.4的极域工具包,结果这么个,又又又增加了工作量!
这次狠活多,抓紧上车~
惯常的做法
先看看运行的进程有哪些:
又是prozs.exe和jfglzs.exe。
我在博客全网首发!逆向分析学生机房管理助手7.4随机进程名算法中用NETReactorSlayer脱壳,而7.5的也如此。
给prozs脱壳后,用dnSpy打开:
定位到Form1_Load()
方法,摆在眼前的,有熟悉的日期、求余、拼接,但是多了一个算法Math.Round()
,它们重复赋值给text
变量,那么毫无疑问,生效的一定是后面的。
有VB基础的读者可以看出,后者是随机的,每次启动都不同,与日期没有多大关系。
那么这样的话,我们没有进程名算法,如何找到关闭进程的方法?
从守护进程找起
既然进程名完全随机,那么它的守护进程jfglzs.exe、主界面main.exe、卸载程序uninstall.exe等都是如何找到它的呢?
我们知道prozs.exe(分析对象)与jfglzs.exe具有互相守护的关系,识别到对方被关就会蓝屏(有些时候则是不声不响地重新启动对方)。
所以这一步,我们脱壳、反编译jfglzs.exe。在源码中搜索相关关键词,我们就能找到它蓝屏的时候的代码:
这里启动蓝屏窗口,然后启动Timer(它负责置顶窗口、限制鼠标ClipCursor()
并发出哔哔声)。
但在这里,我们找不到启动条件,需要分析调用链,而由于我懒 这程序写得太ex,分析有些困难,就没找调用处。
小助手自己可以关闭小助手
我们被蓝屏,或者在主界面选择“退出程序”,输入密码,就能退得干干净净,这又是怎么做到的呢?这边,我脱壳并反编译了主界面main.exe。
dnSpy拖进程序,可以看到两个窗口Form1
和Form3
。前者是主界面,后者便是“退出程序”的窗口。
此处为找到退出逻辑的过程:
构造函数Form3()
->初始化方法InitializeComponent()
->确定按钮Button1
->单击事件method_0()
。
在单击事件中,程序先判断密码是否正确(密码是md5,不可还原),然后调用退出方法method_3()
。
这个方法就是我们的目标,它杀掉了jfglzs.exe、proze.exe(就是我们要的算法),停止了zmserv服务。
在开始,读取了已获取到的prozs.exe名字,然后就是杀进程。好奇名字怎么来的:
这很显然不是我们要的,毕竟人家都随机了,还能找到人家名字,想想都不可能。
再往下看,发现了遍历进程的可疑代码:
它便是目标代码所在地。由于prozs随机进程算法设定的长度是10,因此在这里先筛选名字长度为10的进程。随机算法的特别限制使每一个字符不小于100不大于109(即范围是字母d到字母m,含,可以看看题首图是不是这样)。根据这些特性,我们就能筛查出prozs.exe的真面目。尽管难免会误杀,但符合这些限制的进程是少之又少,可以放心。
结论
改写成c++:
#include <windows.h>
#include <tlhelp32.h>
//以上为所需头文件
DWORD prozsPid;
//以下为7.5版本逻辑
PROCESSENTRY32 pe;
pe.dwSize = sizeof(PROCESSENTRY32);
HANDLE hSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
if (Process32First(hSnapshot, &pe)) {
do {
//筛选长度为10的进程名(不包含末尾“.exe”)
if (strlen(pe.szExeFile) == 14) {
//遍历字符
for (int j = 0; j < 10; j++) {
char n7 = pe.szExeFile[j];
//符不符合d-m之间
if (!(n7 >= 100 && n7 <= 109))goto IL_226;
}
//就是你!
prozsPid = pe.th32ProcessID;
break;
}
IL_226:
;
} while (Process32Next(hSnapshot, &pe));
}
CloseHandle(hSnapshot);
最后算出prozsPid的值就是prozs.exe的进程ID,和jfglzs.exe同时结束,并停止zmserv服务,便可以关闭小助手。
全文完。
这篇文章属全网首发,很多问题都是我自己解决的,写得那么辛苦,大伙给个点赞或收藏鼓励一下我吧!您的支持是我更新的动力。