对于互联网应用而言,安全是一个不可忽视的问题。特别是电子商务类应用,更是重中之重。由于目前国内电子商务发展越来越迅猛,很多木马开始把注意力转到它上面来。这些木马往往有一个很重要的特点就是具有明显的经济利益性目的。

根据分析和研究表明,这类木马通常并没有使用很高深的技术手段,主要原因就是浏览器自身的脆弱性。从OS角度来说,浏览器是一个很普通的应用程序,没有任何保护措施。木马可以很方便的通过某些方式来篡改浏览器数据。
比较常见的一种就是利用MSAA技术来直接修改浏览器页面,这种修改只发生在内存中,这就是说即使我们查看当前页面源码,也不会发现任何异常。而实际上页面已经被修改了。值得关注的是,目前大部分安全防护软件都不会监视这块的应用。

MSAA是基于COM的技术,一般的调用模式首先是向浏览器窗口发送WM_HTML_GETOBJECT消息,然后通过MSAA的特有API即ObjectFromLresult()来取得对应页面的IHTMLDocument2接口。为了方便,一般顺便也一起获取IWebBrowser接口。剩下的工作就比较简单(但是很繁杂),查询MSDN文档来获取这两个接口所支持的操作即可。
下面演示一个DEMO,这个DEMO会将当前浏览器窗口中的百度首页的Logo换成Tomcat,如下图:
完整代码就不贴出了,关键性代码如下(C代码):
CComBSTR domain(100); 
  CComPtr<IHTMLElement> htmBody; 
  CComPtr<IDispatch> bodyChildren; 
  CComPtr<IHTMLElementCollection> imgColl; 
  CComQIPtr<IHTMLWindow2> htmWin; 
  CComVariant v;

dom->get_domain(&domain); 
  if(domain == L"www.baidu.com") { 
    MessageBox(NULL, L"target detected~\n now have a look...", L"msg", 0); 
    dom->get_body(&htmBody); 
    //Execute js 
    CComBSTR jsToExecute =    
      L"document.getElementById('lg').innerHTML=\ 
        '<img src=\"http://tomcat.apache.org/images/tomcat.gif\"\ 
        width=\"270\" height=\"129\" usemap=\"#mp\"/>';"; 
    dom->get_parentWindow(&htmWin); 
    hr = htmWin->execScript(jsToExecute, L"javascript", &v); 
  }

其中,dom是一个已经获取的  IHTMLDocument2接口。
请勿将以上代码用于非法用途。这段代码的execScript方法调用后可能返回非S_OK的奇怪结果,原因是ATL相关类库的问题。
通过这个DEMO可以看到,从某种程度上说互联网应用的安全是一个比较严峻的问题。我们无法改变浏览器脆弱的事实,能改变的是用户的安全防护意识。如何培养起这个意识,是每个互联网从业者都应该思考的问题。

本文转自 kevx 51CTO博客,原文链接:http://blog.51cto.com/spinlock/569038,如需转载请自行联系原作者

浏览器安全与MSAA相关推荐

  1. 一些vc开发浏览器及插件的资料

    如何往IE工具条添加按钮 问题提出: 金山词霸.网络蚂蚁等软件安装后会向IE的工具条添加自己的按钮.按下按钮后还会作出相应的动作,这种功能是如何实现的呢?读完本文,您也可以将自己应用程序的按钮添加到I ...

  2. chromedriver中的浏览器选项

    chromedriver中的浏览器选项 There are lots of command lines which can be used with the Google Chrome browser ...

  3. Chromium浏览器(CEF)的命令行列表说明

    找到的Chromium浏览器的命令行说明列表,转放在这里以方便查看. List of Chromium Command Line Switches There are lots of command ...

  4. java 滚动截屏_浏览器实现滚动截屏

    工作日志:实现浏览器滚动截屏,并且是指定的iframe在跨域的情况下. 首先拿到这个需求的时候,想了一下,实现滚动截屏并不难,难的具体的情况如下, 在IE浏览器的情况下,在前端实现,并且iframe是 ...

  5. zeroclipboard 粘贴板的应用示例, 兼容 Chrome、IE等多浏览器

    zeroclipboard单个复制按钮和多个复制按钮的实现方法 最近网站改版想让复制代码功能在多个浏览器上都可以实现,最近看网上不少说我们的代码复制功能不好用的,我们最近将会增加代码高亮等功能,希望大 ...

  6. Jquery DIV滚动至浏览器顶部后固定不动代码

    获取元素(这里定位元素A)距离顶部的高度,接着设定scroll滚动的事件,比如超过那个高度,把A的位置设定为fixed,小于该高度,修改回relative. 效果例1 代码如下复制代码 <scr ...

  7. 提交表单自动刷新_Web自动化测试:元素的基础操作和浏览器基础操作

    上一节,我们了解了如何定位元素,其实也有涉及对于元素的操作,这一节我们就详细的介绍一下对于元素的操作和对于浏览器的一些操作 一.对于元素的基础操作: clear():清除输入框内的文本 send_ke ...

  8. 一些js代码,自己备用的。高手不要笑话我。。(跨浏览器基础事件,浏览器检测,判断浏览器的名称、版本号、操作系统)...

    跨浏览器基础事件 View Code 1 //跨浏览器添加事件 2 function addEvent(obj, type, fn) { 3 if (obj.addEventListener) { 4 ...

  9. python+selenium浏览器常用操作(一)

    1.导入selenium自定义的webdriver.后续可通过调用此协议启动各大浏览器 from selenium import webdriver #浏览器 from selenium.webdri ...

最新文章

  1. 为什么微服务一定要有网关?
  2. Redis 常见命令
  3. 标准STUN判断NAT类型的过程及改进
  4. linux下 LVM的应用
  5. 磁共振线圈分类_收藏:磁共振检查序列及临床应用总结
  6. luogu4389 付公主的背包
  7. Sentinel(六)之集群流控
  8. 神经网络与深度学习——TensorFlow2.0实战(笔记)(二)(安装TensorFlow2.0)
  9. react 访问后端_react前端用nginx怎么配置跨域访问后端restful api?
  10. 2017-03-01 Oracle10g的安装与配置使用
  11. linux编译带pgm的zmq,ZeroMQ接口函数之 :zmq_pgm – ØMQ 使用PGM 进行可靠的多路传输...
  12. Java设计模式之适配器模式详解
  13. 如何免费去酒吧看球赛并喝扎啤
  14. Revit二次开发——新建墙类型
  15. risc-v gcc 编译 atomic 指令时产生 illegal operands 错误的解决办法
  16. 百世赴美IPO拟募7.5亿美元,“另类”大佬周韶宁迎来新冒险
  17. 读书笔记 - 说话之道 - 2
  18. 软件编程推荐书籍 大全
  19. 把你的面子撕下来扔到地上,狠狠踹几脚!
  20. JMM(Java Memory Model)

热门文章

  1. 基于springboot 改造 open-shop小程序商城
  2. matlab中英文对照表,Matlab工具箱中英文对照
  3. Sublime 安装包时出现的 There are no packages available for installation
  4. mysql 数据查询优化_优化MySQL数据库查询的三种方法
  5. CRMEB知识付费系统v1.4.4源码
  6. ZUI – 开源HTML5跨屏框架
  7. Groovy语言之SpringBoot整合JDBC案例
  8. MVVM  MVVM是Model-View-ViewModel的简写
  9. 微信红包随机生成算法(PHP版)
  10. html5游戏制作入门系列教程(六)