对学生机房管理助手7.1 “随机”进程名的分析
先把 prozs.exe 脱壳,然后开始分析。
程序启动,加载 Form1
窗口。
显然可以看出,运行了 bUI3KruAM
这个函数,跟进去看一下里面干了什么。
很明显可以看到,有一个复制文件的操作。先把 prozs.exe
复制一份,并且启动复制的程序,然后退出。
通过代码第193行可以看到 this.f3DMZSZED
就是新的文件名,而且一定是以 "p" 开头。这里又出现了一个变量 str,不难发现变量 str 是将两个ASCII码转成字符拼接起来。
可以看到在 IL_5E 处有一个判断,如果 num3 % 2 != 0
(num3 是奇数)就跳到 IL_8F 处,否则就运行 IL_66 处的代码。
即 num3 是奇数时,这两个ASCII码分别是 102 + num5
与 98 + num4
(在IL_8F处);num3 是偶数时,这两个ASCII码分别是 99 + num4
与 106 + num5
(在IL_66处)。在 IL_B6 处的 this.FbXQlCftU = "p" + str;
这一句没有什么实际意义,真正的文件名在 IL_CB。
结合刚才的逻辑,再继续研究 num4 和 num5,结合变量 str 的赋值语句,那就是下面的流程
int num3 = DateAndTime.Month(DateAndTime.Now) + DateAndTime.Day(DateAndTime.Now);
int num4 = num3 % 3 + 3;
int num5 = num3 % 4 + 4;
if (num3 % 2 != 0)
str = Conversions.ToString(Strings.Chr(102 + num5)) + Conversions.ToString(Strings.Chr(98 + num4));
else
string str = Conversions.ToString(Strings.Chr(99 + num4)) + Conversions.ToString(Strings.Chr(106 + num5));
this.f3DMZSZED = "p" + str + ".exe";
现在这个“随机”文件名就很清楚了,
就是取 现在的月份 加上 现在是一个月的第几日 得到 num3,
将 num3 除以 3 求余数 再 加上 3 得到 num4,
将 num3 除以 4 求余数 再 加上 4 得到 num5。
如果 num3 是奇数,则将 num5+102 与 num4+98 分别换成对应的字母并拼接起来得到 str,否则将 num4+99 换成对应字母,将 num+106 换成对应字母,拼接起来得到 str,
那么最终文件名就是 "p" + str + ".exe"
。
来做个测试,今天是3月11日。那么
num3 = 14; num4 = 5; num5 = 6;
num3 是偶数,则 str = "hp";
最终文件名为 php.exe。上机测试,结果正确!
https://blog.csdn.net/weixin_57476554/article/details/124526266
我是作者BF-1
您的软件至少比我优秀几个数量级了!
能和你学习一下吗?
支持