全网首发!逆向分析学生机房管理助手7.4随机进程名算法

一到九月份,学生机房管理助手就直接开始窜稀式更新,连更两个版本,这使我弄不到7.3的样本,只能分析7.4了。大伙有7.3样本欢迎联系我。
7.2版本分析见最新支持7.2!用C++干掉讨厌的学生机房管理助手

此文章大致是按照我研究的思路来写的,这样写得容易些,如果阅读比较困难,请见谅,谢谢。
开始分析:

概述

7.4版本截图

截图

先尝试运行样本,可以发现,还是jfglzs.exe和prozs.exe在运行,只是prozs.exe的随机名算法更换了。扫描prozs.exe:

Die扫描

脱壳

几乎没啥变化,那就丢进de4dot脱个壳吧(这里是GUI版本加上吾爱破解的de4dot)

第一次脱壳

呃,失败了。将混淆类型(-p参数)改成.NET Reactor 4.x试看看吧:

第二次脱壳

还是有报错,但是起码保存了一半,抱着侥幸心理瞅瞅dnSpy可以反编译么:

打开源代码1

可以看到结构与7.2相似(可看我分析文章),进入Form1_Load()方法:

源代码2
代码很长,且与我们之前看到的不同:多个switch()和跳转语句,很明显是做了控制流混淆,而de4dot修为不够,对这个写得和OLG一样的程序无从下手!
其实我们如果就根据这些代码一个个检查、跳转,也可以大致还原出它的逻辑(我最初就是这样做的),可是太麻烦又太容易出错。

去除控制流混淆

根据Die扫描结果,此程序使用了.NET Reactor 4.8-4.9的壳,而有一个工具,NETReactorSlayer(https://github.com/SychicBoy/NETReactorSlayer),专治这类不听话的壳!!!

我们把带有控制流混淆的哪个de4dot脱到一半的程序丢进去,仅勾选去除控制流混淆(第二列第一个选项),进行处理(如果把源程序拖进去并全部勾选,会出现所有方法为空的问题,而将de4dot处理过的给它处理就没事):

去除混淆

非常成功啊,那么我们再拖进dnSpy看看,控制流混淆已经没啦,节省了我们很多时间!

分析代码

我们知道prozs.exe的随机名随日期不同而变化,那么在Form1_Load()方法中找到涉及DateAndTime的语句即可:

源代码3

可以看见一系列求余操作,这告诉我们,这便是算法所在地!!
将其简化并翻译成C++代码即可。

可是这里面是不是有些问题?几个字符串加起来,没赋值给一个字符串变量,而是赋值给了num5,这是怎么回事?往下看:

源代码4

原来实际名称是string_1,它在284行定义:

this.string_1 = num5 + Class7.smethod_11(44);

是表示那4个字符拼起来的num5和一个奇怪方法的和,进入这个方法看看:

源代码5

哦!脑壳疼,原来是给定一数字经过一堆算法处理,返回一个字符串。后面一大堆我就不放出来ex大伙了,只要知道传进的整数和返回值有唯一对应关系即可。

接下来string_1的来历即可理解成:4个经过算法计算的字符的和(被赋给一整数)加上一个字符串常量。字符串常量的值是多少呢?我本来想打断点调试,可是应该是此脱壳后程序不完整的缘故,调试不了。那么我们就实际上机操作,揣测一下这些字符经过了怎样的处理。

插曲,反混淆时的错误

现在先注意这一点:如果你仔细观察上列“包含控制流混淆的代码”和“脱去控制流混淆的代码”,会在几个字符加起来的环节发现问题。我将代码贴过来对比(原程序代码控制流混淆已简化以方便观察):
未脱去混淆

//前面计算省略
if (num9 % 2 == 0)
{
   
	num5 = Conversions.ToString(Strings.Chr
  • 3
    点赞
  • 2
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值