噼里啪啦鞭炮响, 我们公司开张了!
今天是我们千度浏览器公司开业第一天, 公司主营业务是网页浏览, 我们来到这个陌生的 Windows 帝国创业, 虽然这里已经有 IE 浏览器公司发展多年, 但因为他们是国有企业, 不思进取, 办事效率低, 所以我们有信心, 期待着为人类提供更好的上网体验.
几天过去了, 一笔上网业务都没收到, 市场部老大开始急了, 指定了我和军军去调研下怎么回事. 经过一番研究, 原来我们不是这台电脑的默认浏览器, 用户点击链接的时候, 会使用默认的浏览器打开, 默认浏览器是 361 浏览器公司, 我们自然是没有业务了.
汇报完调查结果, 老大发了话: 不管你们用什么办法, 把我们变成默认浏览器!
<----------------------- 第一战: 拿下注册表 ----------------------->
工作不敢怠慢, 又经过一番研究, 原来系统的默认浏览器是登记在一个叫注册表的帝国核心数据仓库, 打开链接的时候, 就会去这里查询谁是默认浏览器.
注册表: Windows 帝国核心机要配置数据库
原理搞清楚了, 问题就好办了, 我赶紧调用注册表的接口函数, 把我们千度浏览器设置成为系统默认浏览器. 这不写不知道, 一写吓一跳, 居然失败了, 告诉我拒绝访问, 没有权限!
我意识到问题可能没有我想的那么简单, 赶紧向军军求助. 军军: 看来 361 浏览器下面有人! 我: 下面有人? 我只听过上面有人, 下面有人什么意思? 军军: 你不知道, 这个世界是分高低贵贱的, 我们这些普通线程一般情况下都是在用户态工作, 权限极小, 而那些位高权重的线程都是执行在内核态的, 他们可以干的事情比我们多得多, 帝国政府工作线程基本都是工作在内核态的. 因为他们工作在底层, 所以称为下面.
我: 那 361 浏览器下面的人哪来的? 军军: 帝国开了一个口子, 允许加载驱动进入内核态, 361 浏览器公司多半是通过这种方式进去的, 进去之后把注册表给守着, 不允许我们在上面修改默认浏览器. 我: 那咱们也用驱动进去, 进入内核态跟它竞争. 军军: 可以试试.
说干就干, 我们弄了个驱动程序, 顺利的进入了帝国的内核空间, 我还是第一次到这里来, 这里的世界果然大不一样, 不过这次任务紧急, 没时间慢慢欣赏了. 经过排查, 361 公司做了重重保护, 不仅对内核函数执行了 HOOK, 还设置了注册表操作回调通知, 相当于给修改注册表的路上装了监控摄像头, 我们的一举一动都能被对方知道.
军军: 看来 361 公司对默认浏览器的注册表看护森严, 轻易是动不了的.
我: 那难道没办法了吗?
军军: 也不尽然, 大路被 361 公司看得死死的, 我们走小路, 绕过他的监控, 或许可以一试.
按照军军的思路, 我们抄了一条小路, 绕过那些敏感的函数, 直接调用底层的注册表写入函数, 这一次总算写入成功!
回到公司, 终于有业务找上门来, 看着业务部门忙碌的身影, 我们非常开心.
<----------------------- 第二战: 瞒天过海 ----------------------->
然而好景不长, 仅仅过了几天, 生意又开始惨淡起来, 隔壁 361 公司生意反倒好了起来. 难道默认浏览器又被 361 公司改了回去?
我赶紧去看了一下注册表, 奇怪了, 里面写的还是我们千度浏览器啊, 怎么就没生意了呢? 这一下难倒我们了, 问题到底出在哪里? 一连好几天都没有思路.
无奈之下, 我决定再去内核态一探究竟. 没过多久, 果然有人来查注册表了, 我在远处拿着望远镜看着, 361 公司的人检查了参数, 就直接放他过去了, 原来这人来查的不是默认浏览器. 一直等了好久, 终于有人来查默认浏览器了, 这 361 公司居然直接给了他结果, 就让他回去了, 都没有真正去注册表去查!
气死我了! 原来给了别人假的结果! 我把我看到的一切都告诉了军军.
我和军军开始关起门来, 研究对策. 然而还没等我们研究出个结果, 市场部老大又过来了. 老大: 你们先别研究了, 361 公司也没生意了, 来了个 QB 浏览器, 生意都去他们那里了, 赶紧去看看. 竟有此事! 我们放下手中的工作, 赶紧去瞧一瞧.
<----------------------- 第三战: 半路截胡 ----------------------->
QB 浏览器果然热闹非凡, 来往办理业务的络绎不绝. 他们是怎么抢了 361 公司生意的? 我和军军都很诧异.
我再一次来到内核空间, 守着注册表查询的地方, 想看看发生了什么. 然而一切都没有变, 361 公司仍然把守着关键位置. 不一样的是等了大半天一个来查默认浏览器的人都没有. 第二天, 第三天, 依旧如此, 但是 QB 浏览器的生意倒是从未中断, 我开始意识到不对劲.
当天晚上, 我趁人不注意, 通过远程线程注入的方式, 乔装打扮溜到了 Outlook 邮箱公司, Outlook 曾经是我们的大客户, 但最近都不来照顾我们家生意了. 我在 Outlook 公司的收件箱仓库翻了半天, 终于找到一封带有链接的邮件, 环顾四周见没人发现我, 于是冒充 Outlook 公司的员工点开了一个链接, 打算看下这笔业务怎么就跑到了 QB 浏览器公司.
接下来的事情让我大吃一惊: 点击链接后, 一条 JMP 指令居然让我跳到了数字签名为 QB 集团的一个模块中, 而这里根本没让我查注册表, 直接就给我 QB 浏览器的路径, 让我去找他打开链接!
真相总算大白, 原来溜入 Outlook 公司的不止我一个, QB 公司的人早就溜进来了, 还安装了 HOOK, 欺骗所有人让他们都去自己那里办业务! 回到公司, 把我的经历告诉了市场部老大. 老大大怒: 这些公司也太没下线了, 为了钱什么都能做出来. 几秒种后, 老大又说: 我们得给他们一些教训, 你们赶紧琢磨琢磨如何抢回来.
<----------------------- 终局之战: 狸猫换太子 ----------------------->
不过我们终究还是嫩了一些, 过了一晚上, 第二天帝国又来了一家猎狗浏览器公司开业, 网页浏览的生意一下又被他们抢了过去.
不得已, 我只得故技重施, 再次潜入 Outlook 公司, 看看这猎狗浏览器又是如何抢到的客户. 再次点击链接, 按照熟悉的路线, 拿到的还是 QB 浏览器公司的地址, 我也顺利的调用 CreateProcess 函数把 QB 浏览器给启动了. 然而等我回到公司, 竟然神奇的发现, QB 浏览器并没有启动, 启动的竟然是猎狗浏览器, 明明是我亲自打开的 QB 浏览器怎么就变成了猎狗浏览器? 我有点怀疑自己眼睛是不是看错了.
我打算再来一次, 这一次, 我让军军溜入 Outlook 公司执行我开始的操作, 而我去到内核态, 看着进程启动的地方, 看看哪个环节出了问题. 收到军军的信号后, QB 浏览器进程果然开始创建, 接下来一幕让我惊掉了下巴: 猎狗浏览器也在内核态安插了驱动, 他们竟然把 QB 浏览器的执行文件 exe 换成了猎狗浏览器的! 好一招狸猫换太子!
<----------------------- 再见: 浏览器江湖 ----------------------->
回到公司已是深夜, 打算第二天再汇报领导.
第二天, 还没等到汇报工作, 领导先召集我们开会: 非常遗憾的告诉大家一个消息, 由于公司的业绩持续下滑, 千度集团决定砍掉这块业务, 千度浏览器即将成为历史, 大家准备好工作交接吧. 消息来得突然, 不过我也厌倦了这样的争斗, 不做也好.
然而, 默认浏览器的战争, 还在继续......
未完待续.......
彩蛋
361 浏览器公司眼看自己的市场被抢, 情急之下致电 361 集团总部. 总部很快派出了 361 杀毒和 361 安全卫士公司入驻, 为 361 浏览器撑撑场子. 而另一边, QB 浏览器公司和猎狗浏览器公司同样不甘示弱, QB 集团也派出了 QB 电脑管家, 猎狗集团派出了猎狗毒霸, 一场安全软件公司的战争一触即发... 欲知后事如何, 请关注后续精彩:《远去的传说: 安全软件群雄混战史》
精彩回顾:
我是一个 explorer 的线程
我是一个杀毒软件线程
我是一个 IE 浏览器线程
比特宇宙 - TCP/IP 的诞生
产品 vs 程序员: 你知道 www 是怎么来的吗?
我是一个流氓软件线程
来源: https://www.cnblogs.com/xuanyuan/p/12053056.html