`
lovnet
  • 浏览: 6709185 次
  • 性别: Icon_minigender_1
  • 来自: 武汉
文章分类
社区版块
存档分类
最新评论

谈黑洞2001杀防火墙的实现与对策

阅读更多

谈黑洞2001杀防火墙的实现与对策

文章作者:陈经韬

黑洞2001是今年1月份推出的国产远程管理工具,相对其它远程管理工具,它添加了个很有吸引力的功能:进程管家.它有什么用呢?在这里引述一下吴建蓉的论述:"多进程监控功能是干什么用的呢?原来随着大家安全意识的不断提高,大多数人都安装了防火墙,木马们的生存空间越来越小,为生存计,木马开发者想出了一个办法,他让木马服务端定时刷新进程,如果发现其中的进程名称与其事先定义好的相符合,就将这个进程关闭,如果这个被关闭的进程恰巧就是防火墙,那你的网络大门就完全敞开了,监控端就可为所欲为了。事实上这个功能就是针对防火墙出现的,一切堡垒都是从内部被攻破的在此得到了充分的体现。其实在黑洞2000中就有了这样的功能,只不过黑洞2000只能关闭天网防火墙,对其它防火墙没有任何作用。黑洞2001则可以欲定义长达99个英文字符号,完全可以将您可能会用到的防火墙都定义到其中,从而可将这些防火墙全部关闭!"(原文见http://www.yesky.com/20010719/189602.shtml)现在有些木马也具有这个功能了,但是"黑洞"是第一个首先提出和实现这一功能的软件.
实际上,作者当初添加这个功能是为了方便监控一些有害的软件.大家可以在服务端默认的配置看出来,它以前是监控"有害软件,黄色软件"的.不过后来被人误用了而已.
俗话说:"假传万卷书,真传一句话".看起来最复杂最强大的东西,它的原理往往却是最简单的.爱因思坦的质能方程式也只不过是简单的E=MC2.其实"黑洞"这个看似很神奇的功能,只不过是用了一个API函数PostMessage(窗口句柄, WM_Quit, 0, 0);而已.
在Windows系统中,每个可执行文件在运行时不仅有进程ID,还存在一个窗口名.一般来说,如果一个程序运行时在任务栏有个图标,你把鼠标移动到那里出现的提示就是该程序的窗口名.即使程序是隐藏运行,它的窗口名还是存在的,只不过你看不见而已.我们只要找到一个程序的窗口句柄,然后发送一个消息WM_Quit给它就会把它无条件关闭了.那么如何找到那个叫"句柄"的东西呢?Windows提供了一个API函数FindWindow来通过窗口名返回窗口句柄.比如说你想查找一个窗口名为"有害软件"的句柄,则可以用以下语句:

Var
Exehandle: Thandle;
begin
ExeHandle := FindWindow(Nil, '有害软件');
if ExeHandle <> 0 then Showmessage('找到该软件,句柄为'+InttoStr(Exehandle));
end;
现在问题简单了吧.只要看看系统现在运行的所有窗口名称,然后和我们需要关闭的作比较,如果条件符合的就Kill了它.查找当前系统运行的所有窗口名称可以通过递归实现.我们可以写出下面的一个函数.
Function My_RefreshForm(MyStringList:TStringList):Boolean;
var
hCurrentWindow: HWnd;
szText: array[0..254] of char;
begin
MyStringList.Clear;
hCurrentWindow := GetWindow(application.Handle, GW_HWNDFIRST);
while hCurrentWindow <> 0 do
begin
if GetWindowText(hCurrentWindow, @szText, 255) > 0 then
MyStringList.Add(StrPas(@szText));
hCurrentWindow := GetWindow(hCurrentWindow, GW_HWNDNEXT);
end;
Result:=true;
end;
我们来试试调用这个函数看看.运行Delphi新建一个工程,放上一个ListBox控件和一个按钮Button1,在它的OnClick事件写代码:
procedure TForm1.Button1Click(Sender: TObject);
Var
FormStrings:TStringList;
begin
FormStrings:=TStringList.Create;
My_RefreshForm(FormStrings);
ListBox1.Items:=FormStrings;
FormStrings.Free;
end;
然后运行这个程序,点击Button1就会在ListBox1列出系统现在的所有窗口名.你会发现有一些很奇怪的操作系统本身运行的程序---但是你自己在Windows任务列表中却看不到它.有了上面这两个函数,我们就可以叫它Quit了.我们再来写个函数吧:
Procedure My_KillForm(S: String);
Var
Exehandle: Thandle;
begin
ExeHandle := FindWindow(nil, Pchar(S));
if ExeHandle <> 0 then
PostMessage(ExeHandle, WM_Quit, 0, 0);
end;
我们在程序中要杀死那个"有害软件",那么可以先用My_RefreshForm函数列出所有窗口名称,然后一个一个和"有害软件"这个窗口名作比较,如果条件符合就使用My_KillForm('有害软件')把它给关了.至于象"黑洞2001"那样做到"模糊设置",相信大家很快就可以写出来,这里就不再多讲了.
知道了它的原理后,那么我们如何来防范它呢?比如说我的软件是个杀毒防火墙,如何不让它给Kill了呢?一个程序如果没有窗口名不就可以了吗?呵呵,问题是Windows不让你那么做.比如说Delphi做的程序窗口名就是Application的Title,如果你不设置它那么Windows系统就会把该程序主窗口的标题当作该程序的窗口名.其实,我们可以这样:就是定时随机改变自己的窗口名,这样一来它确定不了你的窗口名就那你没辙了:)
Procedure RandomChangeTitle;
begin
Application.Title := Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65)
+Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65);
Application.name := Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65)
+Chr(Random(25)+65)+Chr(Random(25)+65)+Chr(Random(25)+65);
end;
你可以在自己的程序中用个Timer控件定时调用该函数,或者比如说你的程序是个Socket通讯程序,就可以在OnClientSocket1Read调用它.最后,说句题外话:如果你想成为一个优秀的程序员,那么培养自己那种不钻牛角尖的思维习惯是很重要的.世界上很多问题的答案不只有一个,而我们要做的就是找出最简单的那个.很多人特别是那些数学思维比较强的人,一拿到程序就写,虽然算法很好,程序结构也很清晰,但是却走了弯路.我认识很多名校的学生,他们数学很好,但是往往把一个很简单的问题想的复杂化.记得有一次国际奥林匹克数学竞赛,有一道填空题:一个小时内时针和分针重合几次,中国学生马上列方程来解,美国学生则取下自己的手表拔了一圈就写出了答案.也许,只关心算法是程序员和优秀程序员的区别吧.因为,程序,不仅仅是算法!

分享到:
评论

相关推荐

    Harlow–Hayden防火墙方法中的黑洞

    关于防火墙悖论的Harlow–Hayden方法的优点之一,就是可用于解码从带电的AdS黑洞散发的Hawking辐射的可用时间,恰恰是它在冷黑洞的环境下运行,而黑洞不会向外强烈弯曲 事件范围。 在这里,我们澄清这一点。 该方法...

    黑洞波功能的分支不需要包含防火墙

    我们表明,在汉密尔顿演化过程中稳健的下降探测器的指针状态与相对于黑洞地平线静止的外部探测器的指针状态是不同的,并且是不兼容的,在某种意义上来说,指针的基础是通过平凡的彼此相关的 混合了系统,设备和环境...

    黑洞数Java代码实现

    黑洞数算法的实现。黑洞数是各位数字均不相同的整型数字,持续 进行 最大排列数-最小排列数 操作,当结果循环出现时,即为黑洞数。

    不包括具有极端宇宙审查制度的黑洞防火墙

    AMPS关于黑洞防火墙的论点似乎不仅是由于在伸展的视野之外对局部有效场理论的假设,而且还来自对内部黑洞状态的过高计数,其中包括过去的单数状态。 在这里,我提议通过极端宇宙审查制度排除这种奇异状态(推测原理...

    研究论文-机会网络黑洞攻击模型的设计与实现.pdf

    分析了机会网络的网络特征及黑洞攻击的攻击机制,在ONE仿真器下搭建了机会网络的黑洞攻击模型,并应用模型在多种机会网络路由协议下进行仿真,通过分析网络的消息交付率等性能,得出黑洞攻击强度与网络性能之间的...

    圣诞节蜂蜜 技巧集含示例源码

    谈"黑洞2001"杀防火墙的实现与对策 安装与卸载之卸载篇---程序自杀 “冰河”启示录 用Delphi在局域网中实现网上影院 谈Delphi编程中“流”的应用 谈Delphi编程中资源文件的应用 含示例源码 1:...

    没有防火墙的单一黑洞蒸发的Qubit传输模型

    该模型在事件范围内没有防火墙或其他事件,并且避免了子系统转移模型引起的反驳,即防火墙悖论的解决方案。 此外,它符合Giddings为黑洞蒸发模型提出的六个物理约束条件。 它的确将非局部量子位用于引力场,但假设...

    为什么不需要防火墙

    黑洞的防火墙悖论通常被视为指示单一性和等效原理之间的冲突。 我们阐明了悖论是如何表现为半古典理论的局限性,而不是在基本原理之间产生矛盾。 基本理论和半经典理论的两个主要特征解决了这一悖论的两个版本:纠缠...

    黑洞计算机黑洞计算机黑洞计算机

    计算机与宇宙黑洞有区别吗?这个问题乍听起来,就像某个微软笑话的开场白。然而,它却是当今物理学最深奥的问题之一。在大多数人看来,计算机是专门化的新发明:流线型的台式机箱或者咖啡壶内的手指甲般大小的芯片。...

    西西弗斯黑洞【123数字黑洞】 卡普雷卡尔黑洞(重排求差黑洞):三位数黑洞495

    西西弗斯黑洞【123数字黑洞】 /// ​设定一个任意数字串,数出这个数中的偶数个数,奇数个数,及这个数中所包含的所有位数的总数 /// 比如86420135799,按照偶数个数5,奇数个数6,数字总个数11,拼接成一个新的...

    如何隐藏黑洞图标黑洞托盘

    如何隐藏黑洞 隐藏黑洞 黑洞托盘 黑洞右下角

    利用Canvas实现宇宙黑洞动画特效.zip

    利用Canvas实现宇宙黑洞动画特效.zip

    C++黑洞数字 很详细哦

    c++经典程序 int main() { srand((unsigned)time(NULL)); //时钟振荡产生随机数 int number = rand() % 10000; cout 产生的随机数为: "; int value = blackHoleNumber(number)... cout 黑洞数为: " ; return 0; }

    论文研究 - 激光物理诱导的Kerr-Newman黑洞如何在不点燃黑洞炸弹的情况下释放引力波(实验室中迷你黑洞的爆炸)

    可以将其与产生1 GW的纺丝棒的Park 1955纸进行部分比较,前提是该纺丝纸和该人造Kerr-Newman黑洞都将采用激光的思想来实现其各自的GW辐射。 这个想法部分与作者在2016年与罗伯特·贝克(Robert B

    经典C++程序三个程序Date类的实现,黑洞数

    共有三个程序,一个是实现了黑洞数,一个是实现了Date类和一个关于天气的程序

    黑洞路由,什么是黑洞路由.doc

    \黑洞路由.doc\黑洞路由.doc\黑洞路由.doc\黑洞路由.doc\黑洞路由.doc\黑洞路由.doc\黑洞路由.doc\黑洞路由.doc

    论文研究 - 黑洞宇宙的原理与规律

    作者最近根据以下三个基本原理开发了一种新的替代宇宙学模型,称为黑洞宇宙:1)时空黑洞等价原理,2)时空各向同性和同质性的宇宙学原理,以及3)爱因斯坦广义相对论,描述了物质对时空的影响。 根据宇宙的黑洞模型...

    网页动画素材 css3属性绘制圆形旋转的黑洞动画特效(抖音资料)

    网页动画素材 css3属性绘制圆形旋转的黑洞动画特效(抖音资料)网页动画素材 css3属性绘制圆形旋转的黑洞动画特效(抖音资料)网页动画素材 css3属性绘制圆形旋转的黑洞动画特效(抖音资料)网页动画素材 css3属性...

    通过带电的Kiselev黑洞实现强大的引力透镜

    对于所有wq,我们证明没有稳定的闭合零轨道,并且当观察者和光源很大但与透镜的距离有限时,对Reissner-Nordström黑洞的偏转角的校正并不取决于透镜 充电到距离平方的倒数。 然而,用另一种方法分析的本工作的一...

    Skyrmion黑洞毛发:黑洞和可观察到的表现可保护重子数

    通过比较该横截面与由Schwarzschild黑洞引起的类似横截面,该横截面具有与Skyrmion黑洞相同的ADM质量,我们研究了该横截面是如何表现出来的。 在这里,我们发现截面中特征峰的位置存在一阶差异。 当存在天敌头发时...

Global site tag (gtag.js) - Google Analytics