病毒专门攻击Delphi及其生成的程序 W32/Induc-A(Virus.Win32.Induc.a)

本文介绍了一种名为Win32.Induc的病毒,该病毒能够感染由Delphi编写的程序,并将自身代码注入到可执行文件及源代码中。文章详细说明了如何判断应用程序是否被感染,以及如何通过替换特定文件来清除病毒。

摘要生成于 C知道 ,由 DeepSeek-R1 满血版支持, 前往体验 >

2009年08月20日 星期四 上午 11:44

大家检查下安装目录 lib下的SysConst.dcu文件,大小如果为17KB,就是被感染了。SysConst.dcu正确大小应该为12KB 左右。lib/debug目录下有SysConst.dcu,替换回来就可以恢复正常!

该病毒名为Win32.Induc,专门感染由Delphi建立的应用程序,Delphi是Windows下最常用的编程工具,病毒可以将其代码插入可执行文件以及源代码本身,造成编译前后均感染的情况,但除了传播恶意软件外,这一病毒并不做删除文件等恶意操作.

  病毒攻击某一开发环境本身,并进而通过生成的程序持续感染,这是新病毒比较“创新”的地方.
解决方法:下载并替换原有的病毒文件

program files/Borland/Delphi7/Source/Rtl/Sys/SysConst.pas
program files/Borland/Delphi7/Lib/SysConst.dcu

-O2 -std=c++1z -fno-exceptions -Wall -Wextra -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -ffunction-sections -fdata-sections -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_USING_N AMESPACE -DQT_NO_FOREACH -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_XML_LIB -DQT_BUILDING_QT -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -DQT_NO_CAST_TO_ASCII -D QT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DISABLE_DEPRECATED_BEFORE=0x040800 -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT _NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I../../include -I../../include/QtXml -I../../include/QtXml/5.15.2 -I../../include/QtXml/5.15.2/QtXml -Itmp -I../../include/Q tCore/5.15.2 -I../../include/QtCore/5.15.2/QtCore -I../../include/QtCore -I.moc/release -I../../mkspecs/win32-g++ -o .obj/release/qdomhelpers.o dom/qdomhelpers.cpp In file included from dom/qdomhelpers.cpp:47: ../../include/QtXml/5.15.2/QtXml/private/qxml_p.h:1:10: fatal error: ../../../../../../../../../../../home/z3151/qt5/qtbase/src/xml/sax/qxml_p.h: No such file or directory 1 | #include "../../../../../../../../../../../home/z3151/qt5/qtbase/src/xml/sax/qxml_p.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. mingw32-make[4]: *** [Makefile.Release:485: .obj/release/qdomhelpers.o] Error 1 g++ -c -std=c++17 -O2 -std=c++1z -fno-exceptions -Wall -Wextra -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -f function-sections -fdata-sections -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATO RS -DQT_NO_FOREACH -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_USE_QSTRINGBUILDER -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I../../../include -I../../../incming w32-make[4]: *** Waiting for unfinished jobs.... lude/QtCore -I.moc/release -I../../../mkspecs/win32-g++ -o .obj/release/main.o main.cpp g++ -c -include .pch/release/qt_pch.h -std=c++17 -O2 -std=c++1z -ffunction-sections -fdata-sections -fno-exceptions -Wall -Wextra -Wextra -Wvla -Wdate-time -Wshift-overflow =2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_LINKED_ LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_USING_NAMESPACE -DQT_NO_FOREACH -DQT_USE_SYSTEM_PROXIES -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_BUILD_NETWORK_LIB -DQT_BUILD ING_QT -D_CRT_SECURE_NO_WARNINGS -D_USE_MATH_DEFINES -DQT_NO_CAST_TO_ASCII -DQT_ASCII_CAST_WARNINGS -DQT_MOC_COMPAT -DQT_USE_QSTRINGBUILDER -DQT_DEPRECATED_WARNINGS -DQT_DI SABLE_DEPRECATED_BEFORE=0x040800 -DQT_DEPRECATED_WARNINGS_SINCE=0x060000 -DQT_NO_DEBUG -DQT_CORE_LIB -DQT_CORE_LIB -DQT_NO_EXCEPTIONS -I. -I../3rdparty/zlib/src -Ikernel -I ../../include -I../../include/QtNetwork -I../../include/QtNetwork/5.15.2 -I../../include/QtNetwork/5.15.2/QtNetwork -Itmp -I../../include/QtCore/5.15.2 -I../../include/QtCo re/5.15.2/QtCore -I../../include/QtCore -I.moc/release -I../../mkspecs/win32-g++ -o .obj/release/qnetworkaccessauthenticationmanager.o access/qnetworkaccessauthenticationm anager.cpp In file included from access/qnetworkaccessauthenticationmanager_p.h:54, from access/qnetworkaccessauthenticationmanager.cpp:40: ../../include/QtNetwork/5.15.2/QtNetwork/private/qtnetworkglobal_p.h:1:10: fatal error: ../../../../../../../../../../../home/z3151/qt5/qtbase/src/network/kernel/qtnetworkg lobal_p.h: No such file or directory 1 | #include "../../../../../../../../../../../home/z3151/qt5/qtbase/src/network/kernel/qtnetworkglobal_p.h" | ^~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~~ compilation terminated. mingw32-make[4]: *** [Makefile.Release:8702: .obj/release/qnetworkaccessauthenticationmanager.o] Error 1 mingw32-make[4]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src/network' mingw32-make[3]: *** [Makefile:45: release] Error 2 mingw32-make[3]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src/network' mingw32-make[2]: *** [Makefile:304: sub-network-make_first] Error 2 g++ -c -std=c++17 -O2 -std=c++1z -fno-exceptions -Wall -Wextra -Wextra -Wvla -Wdate-time -Wshift-ovec g+ + -c -std=c++17 -O2 -std=c++1z -fno-exceptions -Wall -Wextra -Wextra -Wvla -Wdate-time -Wshift-overflow=2 -Wduplicated-cond -Wno-stringop-overflow -Wno-format-overflow -ffu nction-sections -fdata-sections -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_FOREACH -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_USE_QSTRINGBUILDER -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_CORE_LIB -I. -I../../../include -I../../../include/Q tCore -I.moc/release -I../../../mkspecs/win32-g++ -o .obj/release/recognizer.o recognizer.cpp mingw32-make[4]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src/xml' mingw32-make[3]: *** [Makefile:45: release] Error 2 mingw32-make[3]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src/xml' mingw32-make[2]: *** [Makefile:354: sub-xml-make_first] Error 2 g++ -c -std=c++17 -O2 -std=c++1z -fno-exceptions -Wall -Wextra -Wextra -Wvla -Wdate-time -Wshift-ove../inc w indres -i qlalr_resource.rc -o .obj/release/qlalr_resource_res.o --include-dir=. -DUNICODE -D_UNICODE -DWIN32 -DMINGW_HAS_SECURE_API=1 -DWINVER=0x0601 -D_WIN32_WINNT=0x0601 -DQT_NO_LINKED_LIST -DQT_NO_JAVA_STYLE_ITERATORS -DQT_NO_FOREACH -DQT_NO_NARROWING_CONVERSIONS_IN_CONNECT -DQT_USE_QSTRINGBUILDER -DQT_NO_EXCEPTIONS -DQT_NO_DEBUG -DQT_COR E_LIB g++ -Wl,-s -Wl,-subsystem,console -Wl,--gc-sections -o ../../../bin/qlalr.exe .obj/release/compress.o .obj/release/cppgenerator.o .obj/release/dotgraph.o .obj/release/lalr. o .obj/release/main.o .obj/release/parsetable.o .obj/release/recognizer.o .obj/release/grammar.o D:/msys64/home/z3151/qt5/qtbase/lib/libQt5Core.a -lmpr -luserenv -lversion D:/msys64/home/z3151/qt5/qtbase/lib/libqtpcre2.a -lzstd -lnetapi32 -lws2_32 -ladvapi32 -lkernel32 -lole32 -lshell32 -luuid -luser32 -lwinmm .obj/release/qlalr_resource_res .o mingw32-make[4]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src/tools/qlalr' mingw32-make[3]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src/tools/qlalr' mingw32-make[2]: Leaving directory 'D:/msys64/home/z3151/qt5/qtbase/src' mingw32-make[1]: *** [Makefile:54: sub-src-make_first] Error 2 mingw32-make: *** [Makefile:91: module-qtbase-make_first] Error 2
最新发布
07-04
<think>我们正在处理一个Qt编译问题,用户在使用MinGW编译Qt项目时遇到了两个头文件找不到的错误:qxml_p.h和qtnetworkglobal_p.h。这些头文件属于Qt的私有模块,通常不会直接包含在用户项目中。错误提示表明编译器在包含路径中找不到这些文件。根据引用[3]中的情况,类似问题在树莓派上安装额外模块时也出现过,解决方法通常是安装缺失的私有模块或重新配置Qt以包含这些私有头文件。在MinGW环境下,我们可以采取以下步骤:1.**确认Qt安装是否完整**:私有头文件通常包含在Qt的开发包中。对于MinGW,可能需要安装特定的开发包(例如:qtbase-private-dev或类似的包)。但是,在Windows上使用MinGW,通常是通过Qt安装程序安装的,所以我们需要检查安装的组件。2.**检查安装的Qt版本和组件**:用户可能没有安装包含私有头文件的组件。在Qt安装过程中,有一个选项是“QtDebugInformation Files”或者类似名称的组件(具体名称可能因Qt版本而异),这个组件通常包含私有头文件。如果没有安装,需要重新运行安装程序并添加该组件。3.**手动生成私有头文件**:引用[2]中提到,对于UI头文件,可以通过uic工具生成。但是,私有头文件并不是这样生成的。它们是源代码的一部分。因此,如果安装包中缺失,可能需要从源码构建Qt。 4. **从源码构建Qt**:如果上述方法无效,可能需要从源码构建Qt,并在构建时确保包含私有模块。具体步骤可以参考Qt官方文档。 针对用户的具体错误,我们分别处理:- **qxml_p.h**:这个头文件属于QtXml模块的私有部分。需要确保安装了QtXml的私有开发包(或源码)。- **qtnetworkglobal_p.h**:这个头文件属于QtNetwork模块的私有部分。同样需要QtNetwork的私有开发包。**解决方案步骤**:1.**重新运行Qt安装程序**:打开Qt维护工具(MaintenanceTool),选择“添加或移除组件”,然后展开当前安装的Qt版本,找到名为“QtforDesktop”或类似的条目,检查是否有“DebugInformation”或“QtPrivateHeaders”这样的组件。如果有,勾选并安装。2.**如果安装程序中没有提供私有头文件的选项**,那么可能需要从源码构建Qt。步骤如下:-下载Qt源码(与安装的版本一致)。-使用MinGW构建环境(确保MinGW工具链已安装并配置好)。-配置时,确保启用私有模块(通常默认是启用的)。-构建并安装。 3. **设置包含路径**:如果私有头文件已经存在(例如在源码构建后),但编译器仍然找不到,可能需要手动将私有头文件路径添加到项目的包含路径中。私有头文件通常位于`Qt安装目录/include/Qt模块/版本号/模块/private`,例如:-`C:\Qt\5.15.2\mingw81_64\include\QtXml\5.15.2\QtXml\private`- `C:\Qt\5.15.2\mingw81_64\include\QtNetwork\5.15.2\QtNetwork\private`但是,请注意,这些路径中的版本号(如5.15.2)和架构(如mingw81_64)可能不同。 **注意**:在项目中直接包含私有头文件通常是不推荐的,因为私有头文件可能会在Qt版本更新时发生变化。如果项目确实需要包含私有头文件(比如使用了某些未公开的内部功能),那么应该考虑是否有替代的公共API,或者重新设计以避免依赖私有API。 如果用户没有直接包含这些私有头文件,而是项目中的某个模块(如第三方库)包含了它们,那么可能需要检查该第三方库的文档,看是否有特殊要求。 **总结**:首先尝试通过Qt安装程序添加私有头文件组件;如果不行,则从源码构建Qt;最后,确保项目中的包含路径正确。由于用户的环境是MinGW,我们假设是Windows平台。如果上述步骤无法解决,可能需要进一步检查环境变量和项目配置。**相关问题**:1.如何检查Qt安装的组件? 2.如何从源码构建Qt?3.为什么在Qt项目中要避免使用私有头文件?</think>### 解决Qt编译时找不到私有头文件的问题 在MinGW编译Qt项目时出现`fatal error: qxml_p.h`和`qtnetworkglobal_p.h`缺失的错误,通常是因为**私有头文件未正确安装或包含路径缺失**。这些私有头文件文件名带`_p.h`后缀)是Qt内部模块使用的,默认不包含在标准开发包中。以下是系统化的解决方案: --- ### 一、根本原因分析 1. **私有头文件特性** `qxml_p.h`(QtXml模块)和`qtnetworkglobal_p.h`(QtNetwork模块)属于Qt私有API头文件,需额外安装开发包才能获取[^3]。 2. **常见触发场景** - 编译依赖Qt私有API的第三方库(如QXlsx、qtserialbus) - Qt安装时未勾选"Debug Information"组件 - 项目包含路径未指向私有头文件目录 --- ### 二、解决方案步骤 #### ✅ 方法1:安装Qt私有头文件开发包 1. **重新运行Qt安装程序** 打开`Qt Maintenance Tool` → 选择当前使用的Qt版本 → 勾选以下组件: ```plaintext [x] Qt Debug Information Files # 包含私有头文件 [x] Qt Network (Qt6Network) # 确保网络模块完整 [x] Qt XML (Qt6Xml) # 确保XML模块完整 ``` > 注:组件名称可能因Qt版本不同略有差异(如Qt5对应`qtbase5-private-dev`) 2. **验证安装路径** 安装后检查是否存在以下目录: ```plaintext Qt安装目录/版本号/mingw_64/include/QtXml/private/qxml_p.h Qt安装目录/版本号/mingw_64/include/QtNetwork/private/qtnetworkglobal_p.h ``` #### ✅ 方法2:手动生成私有头文件(源码编译) 若安装包不包含私有头文件: 1. **获取Qt源码** ```bash git clone git://code.qt.io/qt/qt5.git --branch v5.15.2 # 替换为你的版本 ``` 2. **生成私有头文件** 在源码目录执行: ```bash cd qtbase/src/xml qmake && make # 生成qxml_p.h cd ../network qmake && make # 生成qtnetworkglobal_p.h ``` 3. **复制到包含路径** 将生成的`*.h`文件复制到项目包含目录或Qt安装目录的`include`子文件夹[^2]。 #### ✅ 方法3:配置项目包含路径 在`.pro`文件中显式添加私有头文件路径: ```qmake # 替换为实际路径 INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtXml/private INCLUDEPATH += $$[QT_INSTALL_HEADERS]/QtNetwork/private ``` --- ### 三、预防措施 1. **编译前检查** 使用`qmake -query`查看配置路径: ```bash qmake -query QT_INSTALL_HEADERS # 检查头文件根目录 ``` 2. **避免直接引用私有API** 私有头文件可能随版本更新变动,优先使用Qt公共API[^3]。 --- ### 常见错误排查表 | 错误现象 | 解决方案 | |---------|---------| | `qxml_p.h not found` | 安装`QtXml`的私有开发包 | | `qtnetworkglobal_p.h missing` | 检查`QtNetwork`组件安装状态 | | 所有`_p.h`文件均缺失 | 重装Qt并勾选`Debug Information`组件 | | 仅Release模式报错 | 确保私有头文件在Release配置下可访问 | > 提示:私有头文件问题在跨平台编译(如树莓派)中更常见,需确保目标平台的Qt版本一致性[^3]。 --- ### 相关问题 1. 如何检查Qt安装的组件是否完整? 2. 在Linux环境下编译Qt项目时遇到私有头文件缺失该如何解决? 3. 为什么Qt要将头文件分为公共API和私有API? 4. 如何为第三方Qt库(如QXlsx)正确配置私有头文件路径? [^1]: 私有头文件需额外安装开发包 [^2]: 手动生成文件需源码编译 [^3]: 私有API变更可能导致兼容性问题
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值