优雅的禁用chrome v75版本以上 '请停用以开发者模式运行的扩展程序 提示
本帖最后由 1364847132 于 2019-8-2 01:53 编辑# 前言
笔者所读某川大学教务处系统非常不友好,为了在使用教务处时省去某些无意义操作,笔者自写了一个chrome插件。
但是每次启动都有一个烦人的“请停用以开发者模式运行的扩展程序”提示。
![](https://attach.52pojie.cn/album/201907/24/054238nl5uil955y0zoku9.png)
咱也不可能为了这个提示框专门去交那傻乎乎的5刀注册开发者。恶心心!
通过某度找到一个搜索字符串的方法,但是该方法仅支持到v74的版本。
# 分析
如果您不想看这复杂的分析,请直接跳转最后查看怎么修改。
首先来理一理思路,chrome启动的时候,在程序的某个地方判断chrome是否加载了以开发者运行的扩展程序,如果加载了则弹出提示。
那么只要找到了这个判断的地方,并把它强制跳过就可以去掉这个烦人的提示框了。那么如何定位判断的地方呢?
显然可以先对弹出提示框的地方进行定位,在通过堆栈回溯就可以找到判断的地方。
## 定位弹出提示框代码位置
使用SpyLite,来看看这个提示框到底是个什么玩意儿。
![](https://attach.52pojie.cn/album/201907/24/054309ynmpxmzmevbebl2a.png)
看到窗口类名那一行,这个提示框其实是一个Window。那么直接在系统api **CreateWindowExW**,上打个断点。
x64dbg,载入chrome.exe,在**CreateWindowExW**打上断点
![](https://attach.52pojie.cn/album/201907/24/054319l2udas2ssdeudcae.png)
F9直接运行,期间会被程序会被断下很多次。提示框是最后一个被创建的,所以当程序最后一次被断下的时候,通过调用堆栈即可定位提示框代码位置。
![](https://attach.52pojie.cn/album/201907/24/054327ieuzdl5me2stgtpl.png)
点击调用堆栈。
![](https://attach.52pojie.cn/album/201907/24/054349o27hun65o6jn7qzz.png)
调用堆栈的前几层一般来说都是语言自身对创建窗口的封装,所以属于公共代码,分析意义不大。那么如何定位呢?这里使用一个最愚蠢的方法,在调用堆栈调用的每个函数前下断,前面提到,前几层是公共代码,所以咱们从第四层开始下断点。
![](https://attach.52pojie.cn/album/201907/24/054354fp0lo5k5sffvkksj.png)
这里对4-11层的调用堆栈进行了下断。
重新载入,直接F9运行,对于多次命中的断点,直接取消断点,因为它肯定属于公共代码。在chrome运行起来,提示框弹出后,找到命中次数为1的断点。(命中次数为1说明只调用了一次)
![](https://attach.52pojie.cn/album/201907/24/054359xh3o6coggg6gagmr.png)
有两个命中次数为1的断点,下面的函数是被上面函数进行调用的。所以第一个命中次数为1的断点就是弹出提示框代码的位置。
## 定位判断代码位置
![](https://attach.52pojie.cn/album/201907/24/054406k1oqeokcew4nayz1.png)
如图,代码中有3个跳转可以跳过弹出提示框这个call,且第2个跳转为无条件跳转jmp。而在,0x00007FFF33B7DD38有个跳转可以跳过前两个跳转。所以如果0x00007FFF33B7DD38这个跳转不成立时,无论0x00007FFF33B7DD55这个跳转是否成立,最后都会跳过弹出提示框的call。
即,弹出提示框的唯一路径是0x00007FFF33B7DD38跳转成立且0x00007FFF33B7DD72跳转不成立。因为是且,所以破坏一个条件即可,但是0x00007FFF33B7DD38的跳转是对类进行异常(空指针)检查的,一般不对第一个跳转进行修改。那么将第二个跳转改成强制跳转即可。
![](https://attach.52pojie.cn/album/201907/24/054412zyadfaxdd9jhnj8f.png)
# 总结
既刚刚已经找到了修改的位置,那么就可以直接使用特征值进行定位。
x64dbg载入**chrome.dll**,连续多次单击运行到用户。
![](https://attach.52pojie.cn/album/201907/24/054416j55qhhx4u21zu1l0.png)
直至模块变成chrome.dll。
![](https://attach.52pojie.cn/album/201907/24/054422iejl55dd5z5nwu50.png)
然后在主面板依次选择 搜索->当前模块->匹配特征
![](https://attach.52pojie.cn/album/201907/24/054426d6rd2s6xxxm6mrov.png)
搜索
```
48 8B 0E 48 8B 01 4C 8D 74 24 28 4C 89 F2 FF 50 48 48
```
![](https://attach.52pojie.cn/album/201907/24/054434yc2m0fgz53eqf1e3.png)
等待搜索完毕,双击搜索到的结果
![](https://attach.52pojie.cn/album/201907/24/054453duglr5tggegs1plp.png)
跳转到反汇编界面,双击第一行将je修改成jmp
![](https://attach.52pojie.cn/album/201907/24/054457qylhg0pzlhaoapod.png)
修改完成后,Ctrl+P,导出修改后的dll文件(点击修补文件按钮导出dll)
![](https://attach.52pojie.cn/album/201907/24/054503iktfvtv0ttpsgvjp.png)
最后再把原始chrome.dll文件备份,再把这个修改过的替换,就可以发现,这个恶心的提示已经没有了。
**2019-08-02 **
偷偷摸摸修改了特征值,匹配兼容v76版本 其实用火绒的自定义窗口拦截就可以把这个弹窗拦截啦,不过谢谢楼主分享啦😄 申杰1 发表于 2019-7-26 11:37
不是补丁能解决的
这是在卡饭论坛找到的,不能用补丁解决吗?
关于“更换电脑后Chrome便携版扩展丢失”的问题似乎有“完美”解决方案了。
查看Chromium的源代码
http://src.chromium.org/viewvc/chrome/trunk/src/rlz/win/lib/machine_id_win.cc
里面有这个函数
GetRawMachineId
这货调用了两个判断系统环境的Windows-API
GetComputerNameW
GetVolumeInformationW
只要使这两个API返回false,就能干扰浏览器判断系统环境,从而解决扩展丢失问题。 👍👍👍👍,感谢分享! 马克一下,正愁75以上怎么解决来着。。。 前排刘明,哈哈 感谢分享,楼主辛苦 比较关心lz写了个啥插件,拿出来瞅瞅,哈哈哈~ 感谢分享了。 厉害啊,学习了 感谢分享 感谢分享,楼主辛苦。。。。。