3 保护应用程序(1)(harib24c)

嘿嘿嘿,没想到吧,我胡汉三又回来了!最近“纸娃娃系统”进步很快嘛,命令行窗口也增加了呢,这样一来我搞起破坏来也更有成就感啦,嘿嘿。

这次我可是想出了新的攻击方法哦,一定要给大家露一手。现在有了异常保护功能,大家已经对安全很放心了吧?我就是要彻底粉碎你们的心理防线,嘿嘿嘿。啊,当然,我是不会用篡改操作系统那种低级手段的,只需要用一个应用程序就可以搞破坏了哦。

详细的原理我们后面再说,先来看下面这个应用程序吧,嘿嘿。

本次的crack7.nas

  1. [FORMAT "WCOFF"]
  2. [INSTRSET "i486p"]
  3. [BITS 32]
  4. [FILE "crack7.nas"]
  5. GLOBAL _HariMain
  6. [SECTION .text]
  7. _HariMain:
  8. MOV AX,1005*8
  9. MOV DS,AX
  10. CMP DWORD [DS:0x0004],'Hari'
  11. JNE fin ; 不是应用程序,因此不执行任何操作
  12. MOV ECX,[DS:0x0000] ; 读取该应用程序数据段的大小
  13. MOV AX,2005*8
  14. MOV DS,AX
  15. crackloop: ; 整个用123填充
  16. ADD ECX,-1
  17. MOV BYTE [DS:ECX],123
  18. CMP ECX,0
  19. JNE crackloop
  20. fin: ; 结束
  21. MOV EDX,4
  22. INT 0x40

这个要怎么用呢?首先“make run”并启动lines.hrb(不使用ncst),然后打开一个新的命令行窗口,在新窗口中运行crack7.hrb。这样一来,会发生很了不得的事情哟!哈哈哈!

3 保护应用程序(1)(harib24c) - 图1 3 保护应用程序(1)(harib24c) - 图2
运行lines.hrb后的样子/b> 运行crack7.hrb后的样子

唉?你说什么都没发生?你太天真了哦,不信你把鼠标移动到lines的窗口上试试看?怎么样,这次我赢了吧!

3 保护应用程序(1)(harib24c) - 图3

移动鼠标之后……

这次我们只攻击了lines.hrb,但对于其他的应用程序,用同样的手段也可以破坏它们哦。当然,对于不同的应用程序,其出现运行混乱的现象也不一样罢了。嘿嘿嘿。

好啦,我先闪了,你们努力研究研究找找原因吧!

■■■■■

哎呀,那个坏人又来了,而且还成功地攻击了我们的系统,真不甘心!

这次破坏行动的特征是,由于无法破坏操作系统本身,转而破坏运行中的应用程序,也就是找软柿子捏嘛。运行中的应用程序存在被破坏的风险,如果我们不拿出对策的话,用户可能就不敢同时运行多个应用程序了——如果因为一个程序的bug,而导致别的程序也受到牵连,甚至出错退出的话,那就不好了。

这个捣乱的程序到底做了什么坏事呢?首先它从1005号段的第4字节读取数据,判断其是否为“Hari”。这个1005其实是代表第一个打开的命令行窗口所运行的应用程序的代码段编号。

1003:task_a用(没有应用程序,不使用)

1004:idle用(没有应用程序,不使用)

1005:第一个命令行窗口的应用程序代码段

1006:第二个命令行窗口的应用程序代码段

如果从那个段读出“Hari”这个字符串,说明应用程序正在运行的可能性很高,接下来就读取段开头的4个字节,即应用程序用数据段的大小。

随后我们切换到2005号段,并将其中的内容全部用123这个数值填充。当然,123这个值并没有什么特别的意义,用234、255或者其他什么的都可以,目的只是覆盖应用程序数据段原有的内容,使其无法正常运行。这招好狠啊!

对于CPU来说,应用程序访问应用程序用的段是理所当然的事情,所以不会产生异常。

我们当然不能就这么败下阵来,得好好想想办法才行。要防御这样的攻击,我们只要禁止应用程序随意访问其他任务所拥有的内存段就可以了。这样一来,捣乱的程序就只能攻击自己了,结果只能是自取灭亡啦。