逆向分析7.8算法
先给个开幕雷击吧:
这真不知道怎么评价好呢,学生机房管理助手上一个版本还是7.5,在11月23号这天直接跳到了7.8,咱也不知道它是有中间昙花一现的两个版本呢,还是避讳什么,必须跳版本。
说实话,在我满怀期待反编译它之后,一股酸劲涌满我全身:作者开摆了。为什么呢?
上一个版本分析(逆向分析学生机房管理助手7.5随机进程名算法)中,我最终是在main.exe的“退出程序”这个窗体中找到退出算法的,于是这个版本下载好,当然是首先用.NETReactorSlayer脱壳。
脱完之后,打开dnSpy,按照从前的套路,直接进入main.exe的Form3
,根据“退出”这个按钮的点击事件,定位到了method_3()
方法。找到熟悉的退出逻辑:
核心逻辑和7.5版本相比,只更改了一处:此前筛选的程序名称长度必须是10,而在这个版本中只要长度大于等于4都符合条件。此外对字符范围的限制仍是100~109,实际测试也确实如此。
于是代码就出来了,只需要更改一处,我就不花费时间贴出来了,大伙自己到上一个版本的博客里找代码吧,改动两处即可。
如果就为了一个已经摆烂的作者写一篇博客也太闲了,我的作风也不是这样的,于是就有了接下来对极域的分析。
解极域U盘限制
极域有几个功能,这些功能真的很ex,这回我们挑他三太子出来吧。首先是U盘限制,有些时候你想要用U盘里一些资料,却很不幸地 get a pretty access denied 拒绝访问……是不是想揍人的心都有了?
解除这个限制有两种方法,但实际上都是对极域的文件驱动作操作。它的驱动叫TDFileFilter.sys,经过IDA Pro分析,它调用FltRegisterFilter()
、FltCreateCommunicationPort()
等函数创建微型筛选器,对文件访问请求进行筛选,如果访问了U盘、CD光盘等,就会返回0xC0000022
,转换成Win32错误值(RtlNtStatusToDosErrorNoTeb()
)就是0x5
拒绝访问。
硬解禁
于是暴力的方法有了,就是直接停止并删掉这个驱动,使用cmd命令(这也是最简单的方法):
sc stop TDFileFilter
sc delete TDFileFilter
如果cmd被禁用了,还有powershell:
cd C:\Windows\System32\
.\sc stop TDFileFilter
.\sc delete TDFileFilter
用API就是这样的:
SC_HANDLE sc = OpenSCManager(NULL, NULL, SC_MANAGER_CONNECT);
SC_HANDLE hFilt = OpenService(sc, "TDFileFilter", SERVICE_STOP | DELETE);
SERVICE_STATUS ss = {
};
ControlService(hFilt, SERVICE_CONTROL_STOP, &ss);
DeleteService(hFilt);
CloseServiceHandle