-
-
[原创] obfuscator-llvm-4.0 的 VS2019 x86 修正编译
-
发表于:
2019-9-12 16:51
6131
-
[原创] obfuscator-llvm-4.0 的 VS2019 x86 修正编译
官方
我方
git clone -b llvm-4.0 https://github.com/obfuscator-llvm/obfuscator.git
cd obfuscator
mkdir mybuild
mkdir mybin
cd mybuild
#设置CMake路径
set path=D:\ProgramData\CMake\bin;%path%
#初始化VS2019编译器
"C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Auxiliary\Build\vcvars32.bat"
# 构建 VS2017 project,用VS2019编译,make version 3.11.0-rc4 支持最高VS2017版本工程生成
#可考虑换高版本cmake
cmake -DCMAKE_BUILD_TYPE=Release -DCMAKE_INSTALL_PREFIX=c:\obfuscator\mybin -G "Visual Studio 15 2017" ..
#编译并安装 到 c:\obfuscator\mybin
cmake --build . --config Release --target install
编译的7个错误
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\lib\Transforms\Vectorize\LLVMVectorize.vcxproj”(默认目标) (140) ->
(ClCompile 目标) ->
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.22.27905\include\xtree(1730): error
C3848: 具有类型“const llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare::operator ()(llvm::slpvectorizer::BoUpSLP::ScheduleData *,llvm::slpvectorizer::BoUpSLP::ScheduleData *)” (编译源文件 C:\obfuscator\lib\Transforms\Vectorize\
SLPVectorizer.cpp) [C:\obfuscator\mybuild\lib\Transforms\Vectorize\LLVMVectorize.vcxproj]
C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.22.27905\include\xtree(1720): error
C3848: 具有类型“const llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare”的表达式会丢失一些 const-volatile 限定符以调用“bool llvm::slpvectorizer::BoUpSLP::scheduleBlock::ScheduleDataCompare::operator ()(llvm::slpvectorizer::BoUpSLP::ScheduleData *,llvm::slpvectorizer::BoUpSLP::ScheduleData *)” (编译源文件 C:\obfuscator\lib\Transforms\Vectorize\
SLPVectorizer.cpp) [C:\obfuscator\mybuild\lib\Transforms\Vectorize\LLVMVectorize.vcxproj]
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\llvm-objdump\llvm-objdump.vcxproj”(默认目标) (264) ->
(Link 目标) ->
LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\llvm-objdump\llvm-objdump.vcxproj]
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\llvm-pdbdump\llvm-pdbdump.vcxproj”(默认目标) (266) ->
LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\llvm-pdbdump\llvm-pdbdump.vcxproj]
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\llvm-symbolizer\llvm-symbolizer.vcxproj”(默认目标) (275) ->
LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\llvm-symbolizer\llvm-symbolizer.vcxproj]
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\sancov\sancov.vcxproj”(默认目标) (280) ->
LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\sancov\sancov.vcxproj]
“C:\obfuscator\mybuild\install.vcxproj”(默认目标) (1) ->
“C:\obfuscator\mybuild\ALL_BUILD.vcxproj”(默认目标) (3) ->
“C:\obfuscator\mybuild\tools\sanstats\sanstats.vcxproj”(默认目标) (281) ->
LINK : fatal error LNK1104: 无法打开文件“atls.lib” [C:\obfuscator\mybuild\tools\sanstats\sanstats.vcxproj]
81 个警告
7 个错误
错误修正,C3848,微软官方指导意见是加上const限定
于是我们修改 C:\obfuscator\lib\Transforms\Vectorize\SLPVectorizer.cpp 源码,加上const
工程编译找不到“atls.lib”的问题,打开相应的工程文件
(1)将所有 %(AdditionalLibraryDirectories) 替换位 %(AdditionalLibraryDirectories);%(AdditionalLibraryDirectories);C:\Program Files (x86)\Microsoft Visual Studio\2019\Professional\VC\Tools\MSVC\14.22.27905\atlmfc\lib\x86
一般每个工程文件有四处需要替换
(2)对于非x86版,需要更换上述相应路径
修正添加lib搜索路径
C:\obfuscator\mybuild\tools\llvm-objdump\llvm-objdump.vcxproj
C:\obfuscator\mybuild\tools\llvm-pdbdump\llvm-pdbdump.vcxproj
C:\obfuscator\mybuild\tools\llvm-symbolizer\llvm-symbolizer.vcxproj
C:\obfuscator\mybuild\tools\sancov\sancov.vcxproj
C:\obfuscator\mybuild\tools\sanstats\sanstats.vcxproj
对于编译后运行/dev/random出错的问题
我们将 C:\obfuscator\lib\Transforms\Obfuscation\CryptoUtils.cpp 中的linux随机初始化key,改为window的srand和rand实现
#include <time.h>
void tritium_init_rand_key(char * buf,unsigned int buflen) {
unsigned int i;
srand(time(NULL));
for (i = 0; i < buflen; i++) {
buf[i] = char(rand() & 0xFF);
}
}
#define __tritium__
bool CryptoUtils::prng_seed() {
#ifdef __tritium__
tritium_init_rand_key(key, 16);
DEBUG_WITH_TYPE("cryptoutils", dbgs() << "cryptoutils seeded with time srand and rand\n");
memset(ctr, 0, 16);
// Once the seed is there, we compute the
// AES128 key-schedule
aes_compute_ks(ks, key);
seeded = true;
return true;
#else
//原函数体代码
#endif // __tritium__
}
再次编译安装
cmake --build . --config Release --target install
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)