我现在无意中snmi.com的广告条,很讨厌。每次IE的地址栏变化的时候就会随机弹出广告,我快疯了。上网都找不到它的去除方法,肯定不是运行后台程序,也没有在注册表里有相关信息。应该是使用BHO注册到IE,然后监视地址栏变化的事件做出行动。有没有什么方法写一个程序列出有什么DLL注册到IE了?我想自己找到那个文件去掉它。这有可能吗?

解决方案 »

  1.   

    工具栏的话注册在
    HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Internet Explorer\Toolbar
    下面
      

  2.   

    里面会列出工具栏组建的GUDI,按照这个GUID在
    HKEY_CLASSES_ROOT\CLSID
    中找到相应的宿主DLL,然后Regsvr32 /u 注销这个组件并且删除dll
      

  3.   

    不是工具栏,在那里找到的clsid是没有的。而且这个也不是病毒或者木马,木马的原理根本不是这个。这个东西的原理应该是当IE的地址栏变化的时候,就是从blank变成什么www.aaa.com之后,就会随机的显示一条popup广告。一定是注册到ie里的某个dll监视了这个事件。还有什么建议吗?
      

  4.   

    pc magazine本来有一个 bho cop 可以查到有什么控件是注册到 ie 的,但是那个需要订阅 pcmagazine 才能下载,所以我才会想自己写一个……
      

  5.   

    查查系统目录下有什么可疑的dll。我以前也遇到过,不过,每次无援无故弹出对话框
    后来好象是改了注册表,弄了好久才弄好,好象我找到了一个文件把它删除了就没事。
    但时间太久了,具体怎么做的我忘了。(抱歉)
      

  6.   

    system32有将近1000个dll,我总不可能一个一个去检查吧。而且,就算要注册一个dll,也不一定要放到system32里面
      

  7.   

    不知道你的意思是不是想知道像IE进程都调用了哪些dll?
    如果是,看看下面的程序(照搬的)uses
      TLHelp32
    public
        { Public declarations }
        FSnapshotHandle: THandle;
        ModuleArray: array of TModuleEntry32;
        function GetProcessID(var List: TStringList; FileName: string = ''): TProcessEntry32;
      end;function Tform1.GetProcessID(var List: TStringList; FileName: string = ''): TProcessEntry32;
    var
      Ret: BOOL;
      s: string;
      FProcessEntry32: TProcessEntry32;
    begin
      FSnapshotHandle := CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, 0);
      FProcessEntry32.dwSize := Sizeof(FProcessEntry32);
      Ret := Process32First(FSnapshotHandle, FProcessEntry32);
      while Ret do
      begin
        s := ExtractFileName(FProcessEntry32.szExeFile);
        if (FileName = '') then
          List.Add(PChar(s))
        else if (AnsicompareText(Trim(s),Trim(FileName))=0) and (FileName <> '') then
        begin
          List.Add(Pchar(s));
          result := FProcessEntry32;
          break;
        end;
        Ret := Process32Next(FSnapshotHandle, FProcessEntry32);
      end;
      CloseHandle(FSnapshotHandle);
    end;procedure TForm1.Button1Click(Sender: TObject);
    var
      FProcessEntry32: TProcessEntry32;
      PID: integer;
      List: TStringList;
      ModuleListHandle: Thandle;
      ModuleStruct: TMODULEENTRY32;
      J: integer;
      Yn: boolean;
    begin
      if Combobox1.itemindex = -1 then exit;
      List := TStringList.Create;
      FProcessEntry32 := GetProcessID(List, Combobox1.text);
      PID := FProcessEntry32.th32ProcessID;
      ModuleListHandle := CreateToolhelp32Snapshot(TH32CS_SNAPMODULE, pID);
      ListBox1.Items.Clear;
      ModuleStruct.dwSize := sizeof(ModuleStruct);
      yn := Module32First(ModuleListHandle, ModuleStruct);
      j := 0;
      while (yn) do
      begin
        SetLength(ModuleArray, j + 1);
        ModuleArray[j] := ModuleStruct;
        ListBox1.Items.Add(ModuleStruct.szExePath);
        yn := Module32Next(ModuleListHandle, ModuleStruct);
        J := j + 1;
      end;
      CloseHandle(ModuleListHandle);
    end;procedure TForm1.FormCreate(Sender: TObject);
    var
      List: TStringList;
      i: integer;
    begin
      Combobox1.clear;
      List := TStringList.Create;
      GetProcessID(List);
      for i := 0 to List.Count - 1 do
      begin
        Combobox1.items.add(Trim(List.strings[i]));
      end;
      List.Free;
      Combobox1.itemindex := 0;
    end;procedure TForm1.ListBox1Click(Sender: TObject);
    var
      I: integer;
    begin
      Listbox2.Clear;
      if Listbox1.itemindex = -1 then exit;
      for i := 0 to Length(ModuleArray) do
      begin
        if UpperCase(Listbox1.items[Listbox1.itemindex]) = UpperCase(ModuleArray[i].szExePath) then
        begin
          Listbox2.Items.add('模块名称:' + ModuleArray[i].szModule);
          Listbox2.items.add('模块ID:' + IntToStr(ModuleArray[i].th32ModuleID));
          Listbox2.items.add('所属进程ID:' + IntToStr(ModuleArray[i].th32ProcessID));
          Listbox2.Items.add('全局使用数:' + intToStr(ModuleArray[i].GlblcntUsage));
          Listbox2.items.add('进程使用数:' + IntToStr(ModuleArray[i].ProccntUsage));
          ListBox2.items.add(format('模块基地址:%.8X' ,[Integer(ModuleArray[i].modBaseAddr)]));
          Listbox2.items.add(format('模块大小:%.8X' ,[ModuleArray[i].modBaseSize]));
          Listbox2.items.add(format('模块句柄:%.8X' ,[ModuleArray[i].hModule]));
          exit;
        end;
      end;
    end;
      

  8.   

    这个程序确实不错,也能实现我原来打算的功能,一定给分。
    可是,非常意外,原来我的想法是错的。并没有找到可疑的DLL。那到底是什么原因呢?
      

  9.   

    利用Delphi编写IE扩展:
    http://www.csdn.net/develop/read_article.asp?id=6351
    可以监控地址栏的改变
      

  10.   

    我大概看了一下BHO Cop的文章,也就是监控注册表,例如:
    HKLM\SOFTWARE\Microsoft\Windows\CurrentVersion\Explorer\Browser Helper Objects
    地方的键
      

  11.   

    我知道IE扩展的技术,所以才肯定这个popup广告是这样做出来的。你说的那个键值没有用,我查过了,里面都是正常的程序。我现在能怎么办呢?难道只能自己再写一个扩展,然后遇到是那个网址连接就自动关闭窗口?
    唉……
      

  12.   

    但是其实我也又不是太确定,因为按道理来说,如果真的是IE扩展,应该肯定有个键值在注册表里的吧。为什么我反复查看过关系到IE的那些地方,都没有发现到可疑的键值呢?而且用上面那段程序查看的DLL又没有发现可以的文件。是否真的是BHO呢?  :(
      

  13.   

    如果是Browser Object Helper的话在注册表中肯定有记录的,否则IE无法加载。不过监控浏览器不一定需要BHO技术的。
      

  14.   

    去下载一个fport
    看看能不能查出来
      

  15.   

    to TechnoFantasy那还有什么技术可以监视ie呢?
      

  16.   

    结分结分自己写了一个程序关闭掉那个popup窗口算了