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

金山&Q管win10 锁定Edge算法分析_第1张图片

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管win10 锁定Edge算法分析_第2张图片

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

那关键代码怎么定位?

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

金山&Q管win10 锁定Edge算法分析_第3张图片

写入ProtectedHomepages时断下.

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

此时Windbg断下

金山&Q管win10 锁定Edge算法分析_第4张图片

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

看下模块信息

可以发现在dedendmon.dll

打开IDA,重置基地址

跳动9号call返回地址06c4f753

金山&Q管win10 锁定Edge算法分析_第5张图片

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

看下谁调用这个函数

金山&Q管win10 锁定Edge算法分析_第6张图片

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

金山&Q管win10 锁定Edge算法分析_第7张图片

Bp 06BDC908

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

查看esp

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

金山&Q管win10 锁定Edge算法分析_第8张图片

那么这个函数

取名为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得到

金山&Q管win10 锁定Edge算法分析_第9张图片

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

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

接着去打开Key

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

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

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

接着开始跟算法有关

QbGetTempBuff

发现实在填充数据

金山&Q管win10 锁定Edge算法分析_第10张图片

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

于是找了Q管的看下

金山&Q管win10 锁定Edge算法分析_第11张图片

发现是url.....

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

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

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

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

调用前:

金山&Q管win10 锁定Edge算法分析_第12张图片

调用后:

金山&Q管win10 锁定Edge算法分析_第13张图片

接着调用QbGetHashData:


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

参数为:

1.刚才得到的buff地址

2.buff长度

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

4.接收数据长度指针

金山&Q管win10 锁定Edge算法分析_第14张图片

进入后判断是不是SystemUser

如果是则使用WTSGetActiveConsoleSessionId获取Sid

否则使用标准方法获取Sid

金山&Q管win10 锁定Edge算法分析_第15张图片

接着去获取MiachneGuid

金山&Q管win10 锁定Edge算法分析_第16张图片

接着调用QbGetHashDataSub组合数据

金山&Q管win10 锁定Edge算法分析_第17张图片

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

金山&Q管win10 锁定Edge算法分析_第18张图片

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

金山&Q管win10 锁定Edge算法分析_第19张图片

Eax 是这块数据的长度

剩下的一个参数是传出buff

金山&Q管win10 锁定Edge算法分析_第20张图片

不言而喻 md5计算

接着进行WordSwap和Reversible计算

这个跟IE11是一样的。

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

接着调用sub_6c4394a

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

金山&Q管win10 锁定Edge算法分析_第21张图片

Sub_6c48e6b是替换函数

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

没替换前:

金山&Q管win10 锁定Edge算法分析_第22张图片

替换后:

实现:

金山&Q管win10 锁定Edge算法分析_第23张图片

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

接着调用QbGetRegData

金山&Q管win10 锁定Edge算法分析_第24张图片

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

Hash = 尾巴

lpTempBuff = 没有sid和Guid的那个buff

后面两个是返回buff

金山&Q管win10 锁定Edge算法分析_第25张图片

所有的数据都知道了

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

金山&Q管win10 锁定Edge算法分析_第26张图片

接着调用DbObfuscateData

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

金山&Q管win10 锁定Edge算法分析_第27张图片

接着就是填充数据返回~

返回的数据:

金山&Q管win10 锁定Edge算法分析_第28张图片

长度是5c

到此写入注册表

金山&Q管win10 锁定Edge算法分析_第29张图片

最后:

金山&Q管win10 锁定Edge算法分析_第30张图片

写个小程序测试下:

金山&Q管win10 锁定Edge算法分析_第31张图片

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

本文由看雪论坛 放学打我不 原创  转载请注明来自看雪社区

你可能感兴趣的:(金山&Q管win10 锁定Edge算法分析)