C++程序安装包被病毒篡改导致启动报错

Posted IT老张

tags:

篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了C++程序安装包被病毒篡改导致启动报错相关的知识,希望对你有一定的参考价值。

目录

1、到系统应用程序事件日志中查看相关日志信息

2、安装包程序的图标有问题

3、使用系统sxstrace.exe工具分析应用程序的并行配置异常信息

4、使用beyond compare比较安装包二进制文件,找出了原因

5、总结


       据客户反馈,在他们几台PC上安装我们的C++软件安装包时,都会出现如下的错误:

即安装包程序启动失败,无法进行软件的安装。客户已经进入软件的全面部署阶段,出现这样的情况,客户比较着急,让我们尽快定位问题,搞清楚是什么原因导致的。

1、到系统应用程序事件日志中查看相关日志信息

      看报错窗口中的提示信息,有没有可能是我们的安装包程序的位数有问题呢?我们的安装包程序是32位的,Windows 64位系统也是能兼容的,所以应该不是程序位数的问题。如果是程序位数有问题应该会弹下面的提示框:

根据前面报错窗口的提示,应用程序无法启动,因为应用程序的并行配置不正确。请参阅应用程序事件日志,或使用命令行sxstrace.exe工具。

       于是使用向日葵软件远程到客户的机器上,到系统中去查看应用程序事件日志。在系统桌面中,右键单击我的电脑,点击管理,进入计算机管理窗口中,依次点击系统工具->事件查看器->Windows程序->应用程序,进入如下页面,找到对应的错误提示信息:

系统日志提示安装包中的XML文件有问题。我们的安装包中确实内嵌来了一个manifest的xml文件,用来设置对win7、win8、win10等多个操作系统的兼容,xml内容如下:

<?xml version='1.0' encoding='UTF-8' standalone='yes'?>
<assembly xmlns='urn:schemas-microsoft-com:asm.v1' manifestVersion='1.0'>
  <trustInfo xmlns="urn:schemas-microsoft-com:asm.v3">
    <security>
      <requestedPrivileges>
        <requestedExecutionLevel level='requireAdministrator' uiAccess='false' />
      </requestedPrivileges>
    </security>
  </trustInfo>
  <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>      
      <!--The ID below indicates application support for Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- 如果应用程序设计使用 Windows 7,请取消注释以下 supportedOS 节点-->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!--The ID below indicates application support for Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
	  
	    <compatibility xmlns="urn:schemas-microsoft-com:compatibility.v1">
    <application>
      <!-- Windows 10 -->
      <supportedOS Id="{8e0f7a12-bfb3-4fe8-b9a5-48fd50a15a9a}"/>
      <!-- Windows 8.1 -->
      <supportedOS Id="{1f676c76-80e1-4239-95bb-83d0f6d0da78}"/>
      <!-- Windows Vista -->
      <supportedOS Id="{e2011457-1546-43c5-a5fe-008deee3d3f0}"/>
      <!-- Windows 7 -->
      <supportedOS Id="{35138b9a-5d96-4fbd-8e2d-a2440225f93a}"/>
      <!-- Windows 8 -->
      <supportedOS Id="{4a2f28e3-53b9-4441-ba9c-d69d4a4a6e38}"/>
    </application>
  </compatibility>

    </application>
  </compatibility>
</assembly>

难道是我们嵌入manifest文件的方式有问题,在win10系统上校验的比较严格?本地尝试着修改添加到工程中的manifest文件内容,但尝试了多次还是有问题。

2、安装包程序的图标有问题

       后来在客户的电脑上无意中发现,安装包的图标有异常:

正常的图标应该是一个icon图片,应该是这样子的:

难道是安装包文件没有下载完成或者被什么软件篡改了?于是让客户将出问题的机器上的安装包文件发过来,与我们本地同版本的安装包对比了一下,但文件大小都是一样的,如下:

其中,xxx_setup-0322.exe是我们这边的正常版本,xxx_setup111.exe是客户机器上存在问题的版本。从文件大小上看,安装包文件好像并没有异常,应该不是文件没下载完成导致的。

3、使用系统sxstrace.exe工具分析应用程序的并行配置异常信息

       既然系统日志中看不到明显的异常信息,根据报错的弹框提示:

决定使用系统sxstrace.exe工具分析应用程序的并行配置信息,看看能不能找到线索。

sxstrace.exe是Windows自带的应用程序配置信息分析工具,使用该工具的一般步骤是:

1)以管理员权限启动cmd.exe;

2)在cmd中输入sxstrace.exe Trace - logfile:D:\\trace.log,开始跟踪;

3)运行有问题的程序,复现问题,回到cmd中按下回车键,停止跟踪;

4)在cmd中输入sxstrace.exe Parse - logfile:D:\\trace.log - outfile:D:\\0925.txt,解析跟踪到的日志,输出到D:\\0925.txt;

5)打开输出日志D:\\0925.txt,查看里面的信息。

        打开日志文件D:\\0925.txt,看到如下的信息:

基本和系统日志中的内容差不多的,并没有找到更有用的信息。就是安装包中嵌入的manifest清单文件出现了问题,但是之前从来没有报出这样的问题。

4、使用beyond compare比较安装包二进制文件,找出了原因

       最后还是尝试着使用beyond compare比对一下两个安装包文件的二进制内容是否一致,找到了最终的原因。

beyond compare工具可以比较两个文件的内容是否有差异,既可以比较文本信息,也可以比较二进制文件的二进制内容。

确实两个版本的内容有明显的区别,虽然文件大小没变化,但是文件内容被篡改了!其中,xxx_setup-0322.exe是正常版本,xxx_setup111.exe是客户机器上存在问题的版本。

        从上图中可以看出,有部分区域中的二进制码都被改成了FF FF FF FF …,果然是安装包文件被篡改了,导致了上面的问题。 所以怀疑时客户电脑中毒了,病毒篡改了安装包中的内容,破坏了安装包,所以导致安装包无法启动。

       将可能是病毒导致的推断告诉给客户,客户对有问题的PC系统进行了全面的病毒查杀,最后证实确实是系统中病毒了,将病毒杀掉后就不再有问题了。

5、总结

       文中讲到了如何使用系统工具sxstrace.exe分析应用程序的并行配置信息,讲到了用于比对内容的beyond compare工具,希望能给大家提供一个借鉴或参考。

以上是关于C++程序安装包被病毒篡改导致启动报错的主要内容,如果未能解决你的问题,请参考以下文章

800万下载量的npm包被黑客篡改,你的设备或成挖矿机;苹果上线编程一小时;广电参与5G建设;Kubernetes 1.12.3

C++程序启动时报“0xc0000022”无法启动的错误

ORA-00704,ORA-00702 bootstrap错误导致库无法启动解决办法

ORA-00704,ORA-00702 bootstrap错误导致库无法启动解决办法

为啥安装软件包时,总是显示软件包被破坏,下载不了应用?

360病毒扫描蓝屏报错nvmini.sys