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

前端之家收集整理的这篇文章主要介绍了绿化软件之如何判断主程序依赖的程序集前端之家小编觉得挺不错的,现在分享给大家,也给大家做个参考。

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

  1使用检测工具

  2注册表比较观察法

文件系统比较法

4进程模块查看工具

  5试验法


 1使用检测工具

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

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

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



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

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

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

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


注册表比较观察法

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

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

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

具体参考

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

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

具体参考

软件绿化之注册DLL

依赖的共享程序集

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

服务

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

更多参考

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

文件系统比较法

可以使用工具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
原文链接:https://www.f2er.com/javaschema/286254.html

猜你在找的设计模式相关文章