绿化软件之如何判断主程序依赖的程序集

  绿化软件必然需要把一些捆绑式的广告软件,或者是一些不需要的插件去掉。但如何检测主程序依赖那些程序集呢(资源文件,配置等文件暂且不谈论)?

  1使用检测工具

  2注册表比较观察法

       3文件系统比较法

        4进程模块查看工具

  5试验法


 1使用检测工具

  使用一些依赖性检测工具,例如Depends.exe,PowerTool,或者使用W32Dasm之类的反汇编工具,就很容易的查到到主程序依赖那些程序集。        

  例如使用Depends.exe检测QQ主程序检测到依赖的程序集,如下

使用反汇编工具W32Dasm就更强大了,不但能检测到检测到程序集,而且能检测到调用依赖程序集的方法

绿化软件之如何判断主程序依赖的程序集_第1张图片


这种方法的缺陷是似乎只能检测到C或者C++编写的程序,使用其他语言编写的似乎就不行了,例如使用C#编写的就不行了

这种方法只能检测出代码中直接引入的程序集。另外C语言,C++语言也有动态加载的概念,类似于java和C#中的反射,通过提供一个一个程序集名称来动态加载DLL,这种方法就没办法检测出来。

 如在系统核心DLL kernel32.dll中就有如下三个方法,当然还有其他类似的方法,使用这种方式就是没法检测出来的。但最起码可以知道,程序肯定依赖那些程序集。

LoadLibraryA 
 载入指定的动态链接库,并将它映射到当前进程使用的地址空间 
LoadLibraryExA
 装载指定的动态链接库,并为当前进程把它映射到地址空间  
LoadModule 
 载入一个windows应用程序,并在指定的环境中运行


2注册表比较观察法

  可使用专用的注册表比较观察工具例如RegShot,或者Total Uninstall

  就是观察分析注册表的变化,

   右键菜单依赖的程序集可以查看右键菜单会改变的那些注册表项

  具体参考

  软件绿化之注册表右键菜单

 注册DLL也就是COM,可以查看注册DLL改变的注册表项

具体参考

 软件绿化之注册DLL

依赖的共享程序集

可以看看[HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\SharedDLLs]是否有改变

服务

可以看看HKEY_LOCAL_MACHINE\SYSTEM\CurrentControlSet\services   是否有改变

更多参考

软件绿化之安装程序可能改变的注册表项及其作用

3文件系统比较法

  可以使用工具Total Uninstall或者Uninstall Manager 

  主要观察系统目录的变化和CommonProgramFiles的变化,其他目录的文件基本上都是程序运行不需要的。

 更多参考

软件绿化之安装程序可能改变的目录及其作用


4进程模块查看工具

   可以使用软件PowerTool,很方便,你可以选择不显示微软的模块

 可以查看程序运行时使用了那些DLL,但检查出来的却不一定是必须的,但只要把所有的DLL包含了主程序就可以运行了,给出了DLL的一个最大集合。

使用软件PowerTool查看QQ管家绿色版进程的加载DLL

  

  

  使用软件PowerTool查看QQ进程的加载DLL

  

5试验法

 通过以上步骤就可以基本确定可能依赖的程序集,通过方法1确定的肯定依赖了,2和3是可能依赖了,4给出了DLL的最大集合。

  首先修改安装目录的名称,然后点击程序是否可以正常运行。

  如果不能正常运行,说明程序运行需要通过注册表的找到安装目录,依赖于安装目录下的某些文件,而且这些文件是通过注册表找到的。

  如果能正常运行,说明,注册表中所有指向安装目录的文件都是不需要的,最起码是正常运行不必要的文件,因为我们改变了安装目录,但没有修改注册表。

    然后修改不在安装目录下的文件目录。例如CommonProgramFiles下创建的目录,看看程序是否可以正常运行

   如果可以,说明,CommonProgramFiles下的文件也是不需要的。

  如果不能正常运行,把CommonProgramFiles移动到改名后安装目录下,看看是否可以正常运行,如果可以说明CommonProgramFiles下的目录完全可以放在安装目录下,完全没有必要放在系统CommonProgramFiles下。如果不行,可以查看注册表,看看是不是有某个文件指向了CommonProgramFiles,如果是需要注册的,重新注册下,试试。如果成功,说明文件时可以移动的,只是需要重新注册而已。

至于其他系统目录下的文件,也可以按照这样的思路试试。

  安装程序下DLL文件,可以删除了,运行,再删除另一个,在运行,思路基本不变。

  需要注意的是,每次都应该先关闭程序,然后在移动文件夹,修改文件夹,删除文件,必要时还需要重启系统,有些修改时必须重启系统才能生效的。

  通过反复试验,最后剩下的文件其实就是程序运行需要的最少DLL文件。

文章欢迎转载,但请保留作者信息
xuexiaodong2009

你可能感兴趣的:(绿化软件之如何判断主程序依赖的程序集)