首页
社区
课程
招聘
[原创]破解某网络准入系统的多网卡连接检测机制(二)破解agent自动更新机制
发表于: 1天前 371

[原创]破解某网络准入系统的多网卡连接检测机制(二)破解agent自动更新机制

1天前
371

本文仅用于安全研究与技术学习,请勿用于任何违法用途。

书接上文。
上文最后提到,我将修改后的dll文件的MD5值也修改了,但还是无法通过检测,一看竟然又将原dll文件覆盖回来了。不是已经把MD5改过来了吗,按说应该通过校验了啊。查看发现存放MD5值的那个文件也被原文件覆盖回来了。那么现在的方向确定了,就是要破解agent自动更新的机制。

一、探究agent的自动更新机制

探究1:使用前文修改后的dll文件和新的MD5值,直接进行准入检测,可以通过检测,能够绕过多网卡检测机制。
探究2:在探究1的基础上,重启agent软件,检测不通过,发现dll文件和MD5值都被改回了原版本。即使不重启软件,agent每隔一段时间会向服务器发送心跳,同时也会在后台自动进行检测。一段时间后,就发现dll文件和MD5值就自动改回来了。
探究3:存储MD5值的文件夹名称叫update,怀疑软件重启时会将这个文件夹的内容与服务器进行同步。进一步发现agent安装根目录中有一个update.zip的压缩文件,打开一看,正是update文件夹中的内容。也就是说agent在启动时会与服务器进行同步,下载update.zip文件,然后解压覆盖update文件夹中的内容。

推测agent启动时更新的步骤:
1、与服务器同步下载update.zip。
2、解压至update文件夹进行覆盖。
3、将update文件夹中的所有MD5值与相对应的关键文件进行对比,相同的就跳过,不相同的就从服务器下载原版文件进行覆盖。
4、全部更新完成后,再正式启动agent的功能。

那么如何破解呢,最简单的办法就是,在解压文件的时候,不进行解压,直接返回解压成功即可。

二、逆向破解解压函数

步骤看着挺简单,但如何定位到这个函数呢。这一步我犯了愁,这么多dll文件,每个文件里面这么多函数,大部分还都是无法进行反编译的函数名,一个一个去找根本不现实。于是,抱着试试看的心态,我打开了上一篇中提到的那个供软件运维人员使用的工具箱。
图片描述
里面的每一个工具都打开看看,说不定有什么线索。
其中有个“小助手日志查看”,里面的内容有点像wireshark一样,能够将实时的的agent的动作抓取下来,并给出一个简短的解释。这个东西就太好了,估计是给开发人员用的,按说这东西不应该打包安装在客户的电脑上,只有遇到问题时才应该由现场运维人员进行安装运行,然后由开发人员进行远程调试。这个东西将是后面我遇到任何问题时给我提供线索的工具。
图片描述
这个日志查看工具,把agent运行的每一步都记录下来,而且记录了这一步用到了哪个dll文件以及其中的哪个函数。这简直就是像破解打开了一扇方便的大门啊!
于是利用这个工具,我抓取到了在agent启动时进行解压操作的那个dll文件(IsaManage.dll)及其函数名。通过IDA找到了具体的位置。当然在找的过程中,没有找到这个函数名,函数名应该是在编译时就去掉了,反编译没找出来,但通过查找string字符串的方式,还是定位到了具体的位置。之后就是NOP掉具体的解压操作,并返回解压成功。

这样,就再也不会解压update.zip了,无论从服务器怎么下载都没用了。于是我将这两个已修改的dll文件(MsacAssRuntimeCheck.dll和IsaManage.dll)以及它们在update文件夹中存储的MD5都改为了我的版本。从逻辑上来说,应该已经能够成功了吧。

但是,就在我满心欢喜启动检测的时候,发现得出的结果竟然跟上文中探究1和探究2中的结果一致,并且这次修改的dll文件和前文修改的dll文件也都还原了。这就让人有些崩溃了。

肯定是哪里还有我不知道的更新机制。

三、逆向破解自动更新

现在有点陷入了困难,我已经将解压操作绕过了,但IsaManage.dll文件还是被改回去了,通过日志工具抓取也没发现在解压前有更新文件的其他操作。难道说,还有其他别的函数在进行解压。嗯,大概率是这样的,但是我通过工具和其他手段短时间内是找不到这个函数的位置的。这可怎么办。

于是,从头开始梳理,发现在安装根目录,有一个update.zip.xml,存着update.zip的MD5值,这个xml文件是每次启动时从服务器下载下来的,修改这个文件没有意义。如果我将update.zip的MD5值的对比过程绕过,那么update.zip文件就再也不会更新了,那么update.zip中的所有MD5值只要我提前都改好了,无论它解压多少次,都会比对成功的。

那么这个update.zip文件的MD5值的比对操作,一定还在IsaManage.dll文件中,因为这一步是在解压前进行的,而根据日志,解压前只加载了这一个dll文件,其他文件都没加载。

于是就盯着这个dll文件,通过查找“update.zip”字段,定位到了具体的位置。将比对两个变量的汇编代码改成了自身比对自身,那么永远都是比对通过的,即永远不会下载新的update.zip文件了。

至此,破解完成!

作为新手,对IDA的使用还不是那么熟练,感谢AI的帮助!但是破解思路基本都是我自己的。最后贴个AI给我这次破解的评价,自夸一下,哈哈哈!
图片描述

再次声明:本文仅用于安全研究与技术学习,请勿用于任何违法用途。


传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (0)
游客
登录 | 注册 方可回帖
返回