探究:AIappISP软件为什么启动这么卡
本帖最后由 VCC 于 2024-12-1 18:12 编辑之前关注到讨论 6.94Z报毒无法运行 - 问题反馈:ISP软件/头文件/单片机数据手册规格书等 国芯技术交流网站 - AI32位8051交流社区
我也很想知道,为什么它会报毒,里面究竟做了什么敏感操作?
另外,它为什么这么慢?
于是使用【火绒安全分析工具】进行行为分析
注意到在程序的初始化读条阶段,程序主要都是在做注册表的读写(程序启动时总共做了2万3千条系统API操作,其中注册表操作占到2万1千条!!!)
看起来是在加载注册表里存储的配置STC-ISP配置信息。
一眼就可以发现有个很严重的问题!!!
程序每次读取一个字段。都是从HKEY_USERS\S-1-5-21-789336058-926492609-725345543-500\Software根部开始遍历的!
这意味着同目录下的大量注册表配置的访问将会是非常低下的
正确的目录树遍历算法应该是这样子的(逐层深入,没有多余的反复操作):
目前的错误代码算法,让AIappISP软件的注册表读写效率,几乎打了7倍的折扣!!!(本来一条操作可以完成的,现在要从根目录开始,逐层目录开始访问)
按照之前的估计如果这其中注册表操作占到2万1千条,优化7倍速度后,,程序的启动速度将会快7倍!!!
小调查:你们的电脑启动最新版STC-ISP需要多久 - 问题反馈:ISP软件/头文件/单片机数据手册规格书等 国芯技术交流网站 - AI32位8051交流社区
原本8秒启动的用户,如果加速7倍,或许主程序只需要1秒多就可以完成启动了。
希望AI官方可以评估一下AIapp-ISP源代码中此处的操作,希望可以优化!!!
另外还偶然观察到,在我的电脑上,每次启动AIapp-ISP-v6.94Z.exe,程序都会启动bcdedit.exe系统工具进程!
AIapp-ISP-v6.94Z.exe文件里可以看到这个字符串,说明它具备调用【系统的BCDEDIT工具自动设置TestSigning和NoIntegrityChecks两项参数】的功能
但并不是在启动的时候做!!!
这里具体做了什么我看不明白,但是我觉得这是一个非常不安全的征兆!
希望AI公司加强代码质量审查!提高代码质量!
本帖最后由 晓飛飛 于 2024-12-1 17:55 编辑
建议使用ini或者xml管理各种配置信息,效率高又安全,也不会要管理员权限。
我之前在虚拟机跑winxp测试过,比win11快一倍,开拓了新思路,有条件的可以放虚拟机运行软件好了。
难怪启动怎么慢原理在读取注册表啊 本帖最后由 VCC 于 2024-12-1 18:03 编辑
晓飛飛 发表于 2024-12-1 17:51
建议使用ini或者xml管理各种配置信息,效率高又安全,也不会要管理员权限。 ...
注册表里存配置信息也不需要的。
注册表本身就是windows系统提供的一个高性能键值对存储系统
只可惜STC的程序员把它用成了低性能{:5_281:}
通常比较优雅的办法就是用注册表或者用文件
注册表的话
放在 计算机\HKEY_CURRENT_USER\SOFTWARE\ 里面自己找个位置
STC选的是 计算机\HKEY_CURRENT_USER\SOFTWARE\STCISP-VC6\STC-ISP
文件的话,放在 %appdata% 目录中里面自己找个位置
比如可以把配置文件存储在 %appdata%\STCISP-VC6\STC-ISP
用注册表的优点:不需要软件里面实现这些多余的数据操作算法,不需要实现配置文件解析算法
用注册表的缺点:每次用注册表,都是一次API调用,有开销
用配置文件的优点:只有一次文件载入的API调用,其余都可以在程序代码里处理,API开销非常小
用配置文件的缺点:需要在程序中实现配置文件的CRUD算法,重复造轮子了
我倾向于用注册表,毕竟注册表的诞生就是为了存储配置信息
本帖最后由 VCC 于 2024-12-1 18:08 编辑
晓飛飛 发表于 2024-12-1 17:51
建议使用ini或者xml管理各种配置信息,效率高又安全,也不会要管理员权限。
我之前在虚拟机跑winxp测试过, ...
我现在一直用winxp虚拟机跑的。应该是由于winxp比较早期,没有历史包袱,所以注册表操作的API效率很高。再低效的代码也能快速跑完
我的启动时间只要2秒
VCC 发表于 2024-12-1 17:57
注册表里存配置信息也不需要的。
注册表本身就是windows系统提供的一个高性能键值对存储系统
我还是习惯用xml做配置信息,基于树形键值管理,安全又高效,哪怕软件有bug泄露也不会担心把系统注册表写烂。
我在RAMDISK里跑STCISP只需要2S. 学习 学习了{:5_300:}
之前的软件版本有自动帮组用户关闭系统数字签名的功能,所以需要借助BCDEDIT工具
现在的版本这个功能已不支持,后续版本会移除BCDEDIT工具的相关代码
注册表相关的操作代码后续也会进一步优化 zhp 发表于 2024-12-2 09:35
学习了
之前的软件版本有自动帮组用户关闭系统数字签名的功能,所以需要借助BCDEDIT工具
感谢关注到我的建议
顺便追问一下,移除BCDEDIT代码后,是否可以同时去除AIappISP软件必须使用管理员权限运行的强制要求?
做一个安静而强大的工具
页:
[1]
2