金山&Q管win10 锁定Edge算法分析

本文深入分析了金山和Q管如何锁定Edge浏览器主页的算法,通过调试和逆向工程揭示了从获取Sid和Guid到MD5计算、数据混淆等一系列步骤,指出该算法相比IE11的简化之处。
摘要由CSDN通过智能技术生成

Edge主页设置保存在
当前用户:

Software\\Classes\\LocalSettings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppContainer\\Storage\\microsoft.microsoftedge_8wekyb3d8bbwe\\MicrosoftEdge\\Protected - It is a violation of Windows Policy to modify. See aka.ms/browserpolicy

并不是明文,发现金山和Q管可以锁定Edge,于是来了兴趣搞下。

那关键代码怎么定位?

既然是写注册表 ,那么直接注册表写入.于是有了下面的代码

写入ProtectedHomepages时断下.

安装好金山后,点开浏览器保护,点击主页锁定。

此时Windbg断下

可以知道9号是开始设置了,返回地址6c4f753.

看下模块信息

可以发现在dedendmon.dll

打开IDA,重置基地址

跳动9号call返回地址06c4f753

那么接下来就可以找找Data是怎么计算出来的了

看下谁调用这个函数

Windbg对这个调用的地方下断,看参数是什么

Bp 06BDC908

方便调试 我们设置主页为www.12.com点击锁定 此时Windbg断下

查看esp

得到第三个参数为我们设置的主页url字符串

那么这个函数

取名为QbSetEdgeHomePage

此时调用

ObSetEdgeHomePage(

L"Software\\Classes\\Local Settings\\Software\\Microsoft\\Windows\\CurrentVersion\\AppContainer\\Storage\\microsoft."

       "microsoftedge_8wekyb3d8bbwe\\MicrosoftEdge\\Protected - It is a violation of Windows Policy to modify. See aka.ms/browserpolicy",

L"ProtectedHomepages",

url

);

函数内部IDA F5得到

首先会判断是否开启保护和是否是支持的系统 由于跟算法无关 这里不做详细分析

接着会去判断当前是不是admin登陆(非内置管理员 如果是内置管理员没有这个主页的这个Key)

接着去打开Key

如果dwDisposition = 1 则做一些处理 这里不管

如果打开成功 则进行下一步操作

Sub_6b5bdb7是在初始化数据结构(待考证)

接着开始跟算法有关

QbGetTempBuff

发现在填充数据

这里sub_6b90c0e里面调用很多sub函数

于是找了Q管的看下

发现是url.....

金山在这里就直接返回了 可以看下返回的数据

这个函数被优化过 参数分别为eax和ecx

两个都是out参数 一个是buff缓冲区指针 一个是接收buff长度的指针

其中接收缓冲区指针的是ecx

调用前:

调用后:

接着调用QbGetHashData:

具体参数确定跟前面方法一致 断下 dd esp看就可以了

参数为:

1.刚才得到的buff地址

2.buff长度

3.接收计算后的数据指针

4.接收数据长度指针

进入后判断是不是SystemUser

如果是则使用WTSGetActiveConsoleSessionId获取Sid关闭了UAC?

否则使用标准方法获取Sid 

接着去获取MiachneGuid

接着调用QbGetHashDataSub组合数据

有几个参数不确定 不过不影响分析

这里的操作是将Sid,Guid连接起来在家前面填充的数据后面(有url那个)

Eax 是这块数据的长度

剩下的一个参数是传出buff

不言而喻 md5计算

接着进行WordSwap和Reversible计算

这个跟IE11是一样的。

接着低位与低位 高位与高位进行^运算

接着调用sub_6c4394a

这个函数是纯c代码 可以直接抄

Sub_6c48e6b是替换函数

将计算出来的”尾巴”进行替换

没替换前:

替换后:

替换函数实现:

没错 这个就是QbGetHashDataSub的功能 就是计算并得到“尾巴”

接着调用QbGetRegData

dwAboutUrllen = wcslen(url) * 2 + 0x22;

Hash = 尾巴

lpTempBuff = 没有sid和Guid的那个buff

后面两个是返回buff

所有的数据都知道了

这里关注下v12的数据就可以了

接着调用DbObfuscateData

这个函数就不多说了~跟IE11一致

接着就是填充数据返回~

返回的数据:

长度是5c

到此写入注册表

打开Edge

写个小程序测试下:

Over;

总结下:

1.首先获取Sid和Guid

2.将url和SidGuid有规律的连接起来 (那个temp buff)

3.将连接后的字符串进行md5计算

4.将MD5与连接好的字符串进行WordSwap和Reversible计算

5.得到的数据高位与高位 低位与低位进行^计算

6.利用^之后的64字节去获取尾巴(QbGetTailString)

7.将小尾巴中的=和+替换为%3d 和%2b

8.将处理后的小尾巴与url与特定格式连接起来

9.获取TickCount进行srand和rand操作

10.调用ObfuscateData加密成注册表中的乱码

11.写入注册表

相对于IE11 Edge少了指纹和证书检验 也没用post,总的来说 比ie11弱了很多.微软爸爸在走下坡路啊?????????

Thanks:

某个女孩

金山毒霸

QQ管家

最后:

我不知道我坚持的是不是就是正确的,我不知道我看到的是不是就是真实的,我不知道我向往的是不是就是美好的,我不知道我依赖的是海岸还是浮木,我不知道我选择的是千钧一发还是沧海一粟,可我没有时间思考这些问题,也没有资格犹豫,我只知道在黑暗里的人,看到光,就得走下去.

评论 2
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值