首页
社区
课程
招聘
检测特定软件的思路
发表于: 2011-10-29 15:04 5979

检测特定软件的思路

2011-10-29 15:04
5979
例如检查聊天工具、P2P工具等。 因为每个软件都没有使用统一的规范, 所以如果要检测是否安装了这类软件, 必须去根据不同软件去使用不同的方式检测, 例如A软件去检查注册表的某个键值, B软件可能需要去检查某个目录下的文件的值。 如果每种软件都写一个函数去检测, 估计得累死人。 需求分析是这样的, 检测是否安装了特定软件, 并显示该软件的安装位置。 我的思路是这样的, 使用一个数据库, 这个数据库是自定义的文件结构, 保存要检测的软件列表, 例如聊天工具, 添加腾讯QQ、阿里旺旺等, 每个列表项都有检测位置的例如:

软件名称: 腾讯QQ

查找位置:
位置1: {变量名:regpath, 类型:注册表, 参数1:HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ2009, 参数2: Install}
位置2: {变量名:path, 类型: 文件, 参数1:%regpath%\Bin\QQ.exe, 参数2:NULL}
位置n: ....

先找出第一个位置的值,注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Tencent\QQ2009下的Install值,并赋值一个名为regpath的变量(并不是代码中的变量, 这个是获取到的一个临时值,用regpath表示, 第二个位置把%regpath%替换为上面获取的值。
不知道我是否描述得不是很清楚, 如图:


因为我也是第一次做这种东西, 不知道有什么简便的方法, 有的人说添加删除软件里面是保存在注册表中的,去注册表找, 这个我知道, 但是并非所有的软件都会在添加删除软件里添加, 我要做的是一个尽可能通用的简洁高效的实现方法。

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (9)
雪    币: 227
活跃值: (66)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
2
相比你自己做数据库, 添加或删除程序里应该更全面吧
这种东西貌似没有完全通用的方法
Lz是GoogleVIPUser?
2011-10-29 22:33
0
雪    币: 377
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
GVU
3
我昨天思考了一下, 在注册表里面找的确是个简单实效的方法, 只是因为这个软件也是针对一些有心人士, 比如QQ是绿色的, 完全可以拷贝到一个隐藏的目录, 这种方法不知如何去解决好, 难道全盘去搜索文件判断CRC或者找到PE的描述信息?
2011-10-30 18:48
0
雪    币: 377
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
GVU
4
经过这两天的不停思考和测试, 发现基本上添加删除的程序都保存在注册表的HKEY_LOCAL_MACHINE\SOFTWARE\Microsoft\Windows\CurrentVersion\Uninstall中, 需要注意的是, 有些软件只安装给当前用户会保存在HKEY_CURRENT_USER\Software\Microsoft\Windows\CurrentVersion\Uninstall。

我上网又找了资料, 有些人说因为从注册表的Uninstall中查找无法满足他的需求, 不知道他无法满足的需求是什么, 他转而去寻求WMI的方式, 我又使用WMI进行测试, 发现WMI使用非常慢, 枚举一次大概需要七八秒钟, 而且多次调用后会枚举不出来, 目前还不知道是否是我代码的原因, 我连接的是Win32_Product, 而且WMI的只能枚举出全部用户的,当前用户的无法显示。只是不知道Uninstall中保存最后一次使用时间是在哪里, 在这个位置下无法找到, 而且该键的LastWriteTime是安装的时间而不是最后使用时间。 望解答。
2011-10-31 16:59
0
雪    币: 377
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
GVU
5
每次我问问题感觉都很少人会回答。。
2011-10-31 23:04
0
雪    币: 371
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
hyp
6
如果想要精确的检测某个软件的话,肯定要去研究一些特征,<卸载天尊>的作者就很经常的去人工提取一些特征来实现检测软件.
如果是想要编程实现简单一点的话,我还是建议LZ使用一些LUA之类的脚本来辅助,会比较方便.
2011-10-31 23:36
0
雪    币: 54
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
要做特定的软件的检测,肯定是根据这个特定软件的特性。你是要检测是否安装的话那只能进行扫描了,我觉得扫描注册表是个比较通用的方法,至于安装时候的其他特征,也只能进行个例分析了。腾讯干过,360估计也能做。
2011-11-1 09:12
0
雪    币: 241
活跃值: (67)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
还可以查找 最近使用文件。。。
2011-11-1 09:21
0
雪    币: 377
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
GVU
9
感谢各位, 这些软件在注册表中保存的东西也是各种各样的, 每个软件都没有统一的标准, 注册表里面的东西也是乱七八糟的, 我尽量去做个比较通用的方式吧。
2011-11-2 09:14
0
雪    币: 377
活跃值: (25)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
GVU
10
怎么每次结贴, 每个帖子都显示三次, 看起来好混乱!!!!
2011-11-2 09:17
0
游客
登录 | 注册 方可回帖
返回
//