本帖最后由 langsileaa 于 2011-4-29 13:23 编辑
对其它程序的识别,我想让各位童鞋记忆深刻的应该还是安软对安软的识别吧?
当一款安软A存在检测其它杀软的功能模块,并且未正常识别出B安软,如果AB不同国籍,这件事不会引起多少人重视。但是一旦AB同属国内安软,铺天盖地的什么“暗杀”,什么“流氓”...就来了。我想很多童鞋并不了解检测其它安软是如何进行的。拿XP来说,采用系统WMI 名称空间就能够枚举所有的杀毒软件信息。当然,前提是要检测是安软必须在系统安全中心注册成功。
当然,这个帖子不是讨论安软识别的。而是浏览器识别。个人实在没想到连对浏览器的识别,都存在理解上的差异。而本帖所要讨论的重点也是基于浏览器的识别,原因起源于:
SP7.1不能识别世界之窗极速4.0.3.402,添加了还是不能识别
http://bbs.kafan.cn/thread-971646-1-1.html
这里想让大家思考下,如果自己去实现浏览器的识别,会如何进行呢?进程检测?dll线程注入?还是其它方法?
每个软件在安装时,都会在系统进行注册。也就是注册表内存放的相关信息。因此,对浏览器识别,仅仅需要收集下
每款浏览器写入注册表的位置和键值,再做对应读取就行。对于世界之窗极速4.0.3.402的识别,同样可以如此。下面就演示下该方法是如何的简答:
一、检测世界之窗极速4.0.3.402写入注册表的位置和键值信息。
这里采用InCtrl5 对安装过程进行追踪,并找出安装前后差异。从而确定想要的结果。
(1)InCtrl5 程序图:
(2)InCtrl5 记录软件安装前系统信息:
(3)InCtrl5 开始世界之窗安装:
(4)InCtrl5 世界之窗安装完成:
(5)InCtrl5 快照对比找出差异 :
(6)InCtrl5 差异后的日志输出:
(7)InCtrl5 世界之窗写入注册表对应日志:
(8)InCtrl5 对应注册表位置:
通过InCtrl5 对安装过程的分析,我们可以知道世界之窗极速浏览器把相关信息注册到了下面的注册表位置:
HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall\TheWorld Chrome
这里我们需要里面的三个值就可以了:安装路径,浏览器标题,程序版本。
默认浏览器设置对应注册表位置:
HKEY_CLASSES_ROOT\HTTP\shell\open\ddeexec\Application :默认键值,对应浏览器标题
HKEY_CLASSES_ROOT\HTTP\shell\open\command :默认键值,对应程序路径。
二、实现代码。(仅为简单测试,所以容错不做过多考虑。)
1.程序读取代码:
- procedure TFmain.BtnreadClick(Sender: TObject); {读取世界之窗极速版信息}
- var
- XReg: TRegistry;
- begin
- XReg := TRegistry.Create;
- with XReg do begin
- RootKey := HKEY_CURRENT_USER;
- if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\TheWorld Chrome',false)=false then begin
- Einfo.Lines.Add('未检测到系统存在世界之窗极速版浏览器相关信息,请确认已安装软件!');
- exit;
- end;
- Einfo.lines.add('浏览器:'+ReadString('DisplayName'));
- Einfo.lines.add('版 本:'+ReadString('Version'));
- Einfo.lines.add('安装路径:');
- Einfo.lines.add(ReadString('DisplayIcon'));
- Pxcaption:=ReadString('DisplayName');
- Pxpath:=ReadString('DisplayIcon');
- Pxver:=ReadString('Version');
- end;
- XReg.CloseKey;
- XReg.Free;
- end;
复制代码
程序读取图:
2.程序设置默认浏览器代码:
- procedure TFmain.BtnsetClick(Sender: TObject);
- var
- HReg: TRegistry;
- begin
- HReg := TRegistry.Create;
- HReg.RootKey := HKEY_CLASSES_ROOT;
- if HReg.OpenKey('HTTP\shell\open\ddeexec\Application',false) then begin
- HReg.WriteString('',PxCaption);
- HReg.CloseKey;
- end;
- if HReg.OpenKey('HTTP\shell\open\command',false) then begin
- HReg.WriteString('',Pxpath);
- end;
- HReg.CloseKey;
- HReg.Free;
- Einfo.Lines.Add('设置默认浏览器成功!');
- end;
复制代码
如此简单的代码即可完成对世界之窗极速4.0.3.402 的识别和默认浏览器设置操作。而不需要去写进程检测,dll注入
等。如果不能正确识别,在反馈的帖子内,请官人告诉大家真相!
程序完成界面:
程序完整代码(容错部分可自行补充):
- unit Ubw;
- interface
- uses
- Windows, Messages, SysUtils, Variants, Classes, Graphics, Controls, Forms,
- Dialogs, StdCtrls,ShellAPI,Registry;
- type
- TFmain = class(TForm)
- Einfo: TMemo;
- Btnread: TButton;
- Btnset: TButton;
- Btntest: TButton;
- procedure FormCreate(Sender: TObject);
- procedure BtntestClick(Sender: TObject);
- procedure FormShow(Sender: TObject);
- procedure BtnreadClick(Sender: TObject);
- procedure BtnsetClick(Sender: TObject);
- private
- { Private declarations }
- public
- { Public declarations }
- end;
- var
- Fmain: TFmain;
- PisEdit:boolean;
- Pypath,Pycaption,Pxpath,Pxcaption,Pxver:String;
- implementation
- {$R *.dfm}
- procedure TFmain.FormCreate(Sender: TObject);
- begin
- PisEdit:=false;
- end;
- procedure TFmain.BtntestClick(Sender: TObject); {采用默认浏览器打开百度}
- begin
- ShellExecute(Handle,nil,PChar('http://www.baidu.com'),nil,nil,SW_SHOWNORMAL);
- end;
- procedure TFmain.FormShow(Sender: TObject); {读取默认浏览器信息}
- var
- YReg: TRegistry;
- begin
- YReg := TRegistry.Create;
- YReg.RootKey := HKEY_CLASSES_ROOT;
- if YReg.OpenKey('HTTP\shell\open\ddeexec\Application',false) then begin
- Einfo.lines.add('浏览器:'+YReg.ReadString(''));
- Pycaption:=YReg.ReadString('');
- YReg.CloseKey;
- end;
- if YReg.OpenKey('HTTP\shell\open\command',false) then begin
- Einfo.lines.add('当前默认浏览器路径:');
- Einfo.lines.add(YReg.ReadString(''));
- Pypath:=YReg.ReadString('');
- end;
- YReg.CloseKey;
- YReg.Free;
- end;
- procedure TFmain.BtnreadClick(Sender: TObject); {读取世界之窗极速版信息}
- var
- XReg: TRegistry;
- begin
- Einfo.clear;
- Einfo.lines.add('');
- Einfo.lines.add('---------------------- 读 取 ---------------------');
- Einfo.lines.add('');
- XReg := TRegistry.Create;
- with XReg do begin
- RootKey := HKEY_CURRENT_USER;
- if OpenKey('Software\Microsoft\Windows\CurrentVersion\Uninstall\TheWorld Chrome',false)=false then begin
- Einfo.Lines.Add('未检测到系统存在世界之窗极速版浏览器相关信息,请确认已安装软件!');
- exit;
- end;
- Einfo.lines.add('浏览器:'+ReadString('DisplayName'));
- Einfo.lines.add('版 本:'+ReadString('Version'));
- Einfo.lines.add('安装路径:');
- Einfo.lines.add(ReadString('DisplayIcon'));
- Pxcaption:=ReadString('DisplayName');
- Pxpath:=ReadString('DisplayIcon');
- Pxver:=ReadString('Version');
- end;
- XReg.CloseKey;
- XReg.Free;
- end;
- procedure TFmain.BtnsetClick(Sender: TObject);
- var
- HReg: TRegistry;
- begin
- if btnset.Caption='设置为默认' then begin
- if Pxpath='' then begin
- Einfo.Lines.Add('请先进行浏览器信息读取!');
- exit;
- end;
- HReg := TRegistry.Create;
- HReg.RootKey := HKEY_CLASSES_ROOT;
- if HReg.OpenKey('HTTP\shell\open\ddeexec\Application',false) then begin
- HReg.WriteString('',PxCaption);
- HReg.CloseKey;
- end;
- if HReg.OpenKey('HTTP\shell\open\command',false) then begin
- HReg.WriteString('',Pxpath);
- end;
- HReg.CloseKey;
- HReg.Free;
- Einfo.Lines.Add('设置默认浏览器成功!');
- btnset.Caption:='恢复默认';
- exit;
- end;
- if btnset.Caption='恢复默认' then begin
- if Pypath='' then begin
- Einfo.Lines.Add('初始化默认浏览器参数异常,操作中止!');
- exit;
- end;
- HReg := TRegistry.Create;
- HReg.RootKey := HKEY_CLASSES_ROOT;
- if HReg.OpenKey('HTTP\shell\open\ddeexec\Application',false) then begin
- HReg.WriteString('',PyCaption);
- HReg.CloseKey;
- end;
- if HReg.OpenKey('HTTP\shell\open\command',false) then begin
- HReg.WriteString('',Pypath);
- end;
- HReg.CloseKey;
- HReg.Free;
- Einfo.Lines.Add('恢复默认浏览器成功!');
- btnset.Caption:='设置为默认';
- end;
- end;
- end.
复制代码
源码及程序下载:
|