加入收藏 | 设为首页 | 会员中心 | 我要投稿 安卓应用网 (https://www.0791zz.com/)- 科技、建站、经验、云计算、5G、大数据,站长网!
当前位置: 首页 > 综合聚焦 > 程序设计 > 正文

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

发布时间:2020-05-23 15:52:41 所属栏目:程序设计 来源:互联网
导读:绿化软件必然需要把一些捆绑式的广告软件,或者是一些不需要的插件去掉。但如何检测主程序依赖那些程序集呢(资源文件,配置等文件暂且不谈论)? 1使用检测工具 2注册表比较观察法 3文件系统比较法 4进程模块查看工具 5试验法 1使用检测工具 使用一些依

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

  1使用检测工具

  2注册表比较观察法

3文件系统比较法

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应用程序,并在指定的环境中运行


2注册表比较观察法

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

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

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

具体参考

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

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

具体参考

软件绿化之注册DLL

依赖的共享程序集

可以看看[HKEY_LOCAL_MACHINESOFTWAREMicrosoftWindowsCurrentVersionSharedDLLs]是否有改变

服务

可以看看HKEY_LOCAL_MACHINESYSTEMCurrentControlSetservices 是否有改变

更多参考

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

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

(编辑:安卓应用网)

【声明】本站内容均来自网络,其相关言论仅代表作者个人观点,不代表本站立场。若无意侵犯到您的权利,请及时与联系站长删除相关内容!

    推荐文章
      热点阅读