首页
社区
课程
招聘
[原创]IE控件使用F12开发者工具
发表于: 2020-8-24 11:20 6372

[原创]IE控件使用F12开发者工具

2020-8-24 11:20
6372

本文首发于我的个人博客

IE11带来了非常完善的开发者工具,但是IE控件默认是没法使用的,这给我们页面调试带来了极大的不便,不过好在Win10系统有了IEChooser工具,也勉强能用。无意中发现360安全浏览器可以使用F12开发者工具,所以抽空研究了一下。本文仅针对Win10下的IE11浏览器,对于Win7及以下系统,可以使用一个叫做SuperF12的项目。

此次研究使用了x64dbg调试器(配合DbgChild插件)用于动态调试,IDA用于静态反汇编,Process Hacker用于进程信息查看,360安全浏览器12.2.1362.0版本。

通过Process Hacker可以发现,在360安全浏览器的IE内核中,按下F12键,会创建一个新的子进程,并且命令行参数带有-windows10-f12=的字样,在IDA中按下Alt-Twindows10-f12为关键字进行搜索,一共能找到两处,都是在函数sub_40101F中调用的,其FA#41f,该函数比较长,下面贴出核心代码:

前面是参数解析部分,直接跳过不细究了,从函数sub_443D30调用的地方开始看,v174_int64类型,所以(signed int *)&v174 + 1HIDWORD表示的意思一样,结合这两行,我们可以猜到,函数sub_443D30是获取窗口句柄,拿到之后赋值给v39,到这里,v39HIDWORD(v174)一样,都是存储着目标窗口句柄。接下来是两个if语句,其中sub_458950可能是拿到本身的主版本号,这个没有细看,在实际调试中发现,两个if都会进入。然后,通过GetWindowThreadProcessId拿到目标窗口所在进程的PID,存储在dwProcessId[1]中。sub_4B89C0memset,将缓冲区置零,sub_402DBEsprintf函数,通过动态调试发现,sub_402DBE相当于sprintf(&Filename[2], "%d %x", dwProcessId[1], HIDWORD(v174)),这句是在构造命令行参数,构造完之后Filename[2]的值就类似于"123 456",这里要注意的是,其中的456是十六进制的。LibFilenamec:\Windows\SysWOW64\F12\F12AppFrame.dll,后面的逻辑就很清晰了,加载dll,然后调用对应的函数,需要用到前面sub_402DBE拿到的命令行参数,这里有一点要修改的是,AttachTools函数的签名为void(__stdcall*)(HWND, HINSTANCE, char*, int),不知道360中为何使用了__cdecl调用。

到这里,我们就分析完了启动参数带了-windows10-f12后,360安全浏览器的处理逻辑,很容易可以在我们自己的项目中加入下面的代码

但是此刻还无法启动开发者工具,我们还需要继续分析AttachTools函数

代码依旧很长,不过没关系,我们只需要从CommandLineToArgvW开始阅读即可,lpCmdLine是我们上面传递的第三个参数,即"123 456",所以pNumArgs值为2,这里很明显看到__o__wtoi_wcstol,也解释了参数中前一个值为十进制,后一个为十六进制的原因(微软任性),然后是一个CoInitializeEx(NULL, 2u);的调用,2uCOINIT_APARTMENTTHREADEDv18保存了返回值,可以看到,只有当v18为0(S_OK)时,才会进入后面的处理逻辑,否则直接报错了,所以我们需要确保当前进程没有初始化COM组件,最好的办法就是创建一个新进程

可以看到,新进程逻辑很简单,首先检测命令行中有没有-windows10-f12参数,有的话就调用AttachTools,没有的话则直接退出。-windows10-f12的值为IE窗口的句柄,是底层类名为Internet Explorer_Server的那个窗口句柄,这里使用了std::reverse进行字符串反转,因为360安全浏览器这样玩的,所以也算是致敬吧。

最后,就是主进程的F12响应,然后获取窗口句柄,当作参数传递给新进程,代码比较简单不贴了,记得一点就是,窗口句柄转换为字符串之后记得反转。


[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

收藏
免费 3
支持
分享
最新回复 (2)
雪    币: 8889
活跃值: (3147)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2

请问SuperF12的处理方式和360原理一样的吗?

最后于 2020-8-28 07:40 被tomggx编辑 ,原因: 更正
2020-8-28 07:38
0
雪    币: 1779
活跃值: (1283)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
tomggx 请问SuperF12的处理方式和360原理一样的吗?
Win7下360的处理方式我没看过不清楚,但是Win10下360的处理方式和SuperF12的处理方式完全不同,因为微软重新实现了开发者工具,以前的那套COM接口微软并没有对外暴露。你可以理解为SuperF12就是Win10下的IEChooser,SuperF12的很多逻辑,微软在F12AppFrame.dll中实现了,所以Win10下走的是另一套逻辑。SuperF12的作者在issue中也有说这个问题。
2020-8-28 09:49
1
游客
登录 | 注册 方可回帖
返回
//