mirror of
https://github.com/xaitax/Chrome-App-Bound-Encryption-Decryption
synced 2026-06-08 18:24:00 +00:00
171 lines
7.4 KiB
Batchfile
171 lines
7.4 KiB
Batchfile
@echo off
|
|
setlocal enabledelayedexpansion
|
|
|
|
:: =============================================================================
|
|
:: ChromElevator Build System
|
|
:: =============================================================================
|
|
|
|
set "BUILD_DIR=build"
|
|
set "SRC_DIR=src"
|
|
set "LIBS_DIR=libs"
|
|
set "FINAL_EXE_NAME=chromelevator.exe"
|
|
set "PAYLOAD_DLL_NAME=chrome_decrypt.dll"
|
|
set "ENCRYPTOR_EXE_NAME=encryptor.exe"
|
|
set "PAYLOAD_HEADER=payload_data.hpp"
|
|
|
|
:: Compiler Flags
|
|
set "CFLAGS_COMMON=/nologo /W3 /WX- /O1 /Os /MT /GS- /Gy /GL /GR- /Gw /Zc:threadSafeInit-"
|
|
set "CFLAGS_CPP=/std:c++17 /EHsc"
|
|
set "CFLAGS_SQLITE=/nologo /W0 /O1 /Os /MT /GS- /Gy /GL /DSQLITE_OMIT_LOAD_EXTENSION"
|
|
|
|
:: Linker Flags
|
|
set "LFLAGS_COMMON=/NOLOGO /LTCG /OPT:REF /OPT:ICF /DYNAMICBASE /NXCOMPAT /INCREMENTAL:NO"
|
|
set "LFLAGS_MERGE=/MERGE:.rdata=.text"
|
|
|
|
:: Create build directory
|
|
if not exist "%BUILD_DIR%" mkdir "%BUILD_DIR%"
|
|
|
|
:: Parse command line arguments
|
|
if "%1"=="build_encryptor_only" goto :build_encryptor
|
|
if "%1"=="build_target_only" goto :build_target
|
|
if "%1"=="clean" goto :clean
|
|
|
|
|
|
:full_build
|
|
call :compile_sqlite
|
|
call :compile_payload
|
|
call :compile_encryptor
|
|
call :encrypt_payload
|
|
call :compile_injector
|
|
goto :done
|
|
|
|
:clean
|
|
echo Cleaning build directory...
|
|
if exist "%BUILD_DIR%" rd /s /q "%BUILD_DIR%"
|
|
if exist "%FINAL_EXE_NAME%" del /q "%FINAL_EXE_NAME%"
|
|
echo Clean complete.
|
|
goto :eof
|
|
|
|
:build_encryptor
|
|
call :compile_sqlite
|
|
echo [1/2] Compiling ChaCha20...
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\crypto\chacha20.cpp" /Fo"%BUILD_DIR%\chacha20.obj"
|
|
echo [2/2] Compiling Encryptor...
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /Fe"%BUILD_DIR%\%ENCRYPTOR_EXE_NAME%" ^
|
|
"%SRC_DIR%\tools\encryptor.cpp" "%BUILD_DIR%\chacha20.obj" ^
|
|
/link %LFLAGS_COMMON% bcrypt.lib
|
|
echo Encryptor built: %BUILD_DIR%\%ENCRYPTOR_EXE_NAME%
|
|
goto :eof
|
|
|
|
:build_target
|
|
call :compile_sqlite
|
|
call :compile_payload
|
|
call :encrypt_payload
|
|
call :compile_injector
|
|
echo.
|
|
echo =============================================================================
|
|
echo [+] Build Complete: %FINAL_EXE_NAME%
|
|
for %%A in (".\%FINAL_EXE_NAME%") do echo [+] Binary Size: %%~zA bytes
|
|
echo =============================================================================
|
|
goto :eof
|
|
|
|
:: =============================================================================
|
|
:: BUILD SUBROUTINES
|
|
:: =============================================================================
|
|
|
|
:compile_sqlite
|
|
echo [1/5] Compiling SQLite3...
|
|
cl %CFLAGS_SQLITE% /c "%LIBS_DIR%\sqlite\sqlite3.c" /Fo"%BUILD_DIR%\sqlite3.obj" 2>nul
|
|
lib /NOLOGO /LTCG /OUT:"%BUILD_DIR%\sqlite3.lib" "%BUILD_DIR%\sqlite3.obj" >nul
|
|
goto :eof
|
|
|
|
:compile_payload
|
|
echo [2/5] Compiling Payload...
|
|
cl %CFLAGS_COMMON% /std:c++17 /EHs-c- /c "%SRC_DIR%\sys\bootstrap.cpp" /Fo"%BUILD_DIR%\bootstrap.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%LIBS_DIR%\sqlite" /c "%SRC_DIR%\payload\payload_main.cpp" /Fo"%BUILD_DIR%\payload_main.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\com\elevator.cpp" /Fo"%BUILD_DIR%\elevator.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\payload\pipe_client.cpp" /Fo"%BUILD_DIR%\pipe_client.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%LIBS_DIR%\sqlite" /c "%SRC_DIR%\payload\data_extractor.cpp" /Fo"%BUILD_DIR%\data_extractor.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\crypto\aes_gcm.cpp" /Fo"%BUILD_DIR%\aes_gcm.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\crypto\chacha20.cpp" /Fo"%BUILD_DIR%\chacha20.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\payload\handle_duplicator.cpp" /Fo"%BUILD_DIR%\handle_duplicator.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\sys\internal_api.cpp" /Fo"%BUILD_DIR%\internal_api_payload.obj"
|
|
|
|
:: Compile syscall trampoline for payload DLL
|
|
if "%VSCMD_ARG_TGT_ARCH%"=="arm64" (
|
|
armasm64.exe -nologo "%SRC_DIR%\sys\syscall_trampoline_arm64.asm" -o "%BUILD_DIR%\syscall_trampoline_payload.obj"
|
|
) else (
|
|
ml64.exe /nologo /c /Fo"%BUILD_DIR%\syscall_trampoline_payload.obj" "%SRC_DIR%\sys\syscall_trampoline_x64.asm"
|
|
)
|
|
|
|
link %LFLAGS_COMMON% %LFLAGS_MERGE% /DLL /OUT:"%BUILD_DIR%\%PAYLOAD_DLL_NAME%" ^
|
|
"%BUILD_DIR%\payload_main.obj" "%BUILD_DIR%\bootstrap.obj" "%BUILD_DIR%\elevator.obj" ^
|
|
"%BUILD_DIR%\pipe_client.obj" "%BUILD_DIR%\data_extractor.obj" "%BUILD_DIR%\aes_gcm.obj" ^
|
|
"%BUILD_DIR%\chacha20.obj" "%BUILD_DIR%\handle_duplicator.obj" ^
|
|
"%BUILD_DIR%\internal_api_payload.obj" "%BUILD_DIR%\syscall_trampoline_payload.obj" ^
|
|
"%BUILD_DIR%\sqlite3.lib" ^
|
|
bcrypt.lib ole32.lib oleaut32.lib shell32.lib version.lib comsuppw.lib crypt32.lib advapi32.lib kernel32.lib user32.lib libvcruntime.lib libucrt.lib
|
|
goto :eof
|
|
|
|
:compile_encryptor
|
|
echo [3/5] Compiling Encryptor...
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /Fe"%BUILD_DIR%\%ENCRYPTOR_EXE_NAME%" ^
|
|
"%SRC_DIR%\tools\encryptor.cpp" "%BUILD_DIR%\chacha20.obj" ^
|
|
/link %LFLAGS_COMMON% bcrypt.lib
|
|
goto :eof
|
|
|
|
:encrypt_payload
|
|
echo [4/5] Encrypting Payload + Generating Embedded Header...
|
|
"%BUILD_DIR%\%ENCRYPTOR_EXE_NAME%" "%BUILD_DIR%\%PAYLOAD_DLL_NAME%" "%BUILD_DIR%\chrome_decrypt.enc" "%BUILD_DIR%\%PAYLOAD_HEADER%"
|
|
goto :eof
|
|
|
|
:compile_injector
|
|
echo [5/5] Compiling Injector...
|
|
if "%VSCMD_ARG_TGT_ARCH%"=="arm64" (
|
|
armasm64.exe -nologo "%SRC_DIR%\sys\syscall_trampoline_arm64.asm" -o "%BUILD_DIR%\syscall_trampoline.obj"
|
|
) else (
|
|
ml64.exe /nologo /c /Fo"%BUILD_DIR%\syscall_trampoline.obj" "%SRC_DIR%\sys\syscall_trampoline_x64.asm"
|
|
)
|
|
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\injector\injector_main.cpp" /Fo"%BUILD_DIR%\injector_main.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\injector\browser_discovery.cpp" /Fo"%BUILD_DIR%\browser_discovery.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\injector\browser_terminator.cpp" /Fo"%BUILD_DIR%\browser_terminator.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\injector\process_manager.cpp" /Fo"%BUILD_DIR%\process_manager.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\injector\pipe_server.cpp" /Fo"%BUILD_DIR%\pipe_server.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\injector\injector.cpp" /Fo"%BUILD_DIR%\injector.obj"
|
|
cl %CFLAGS_COMMON% %CFLAGS_CPP% /I"%BUILD_DIR%" /c "%SRC_DIR%\sys\internal_api.cpp" /Fo"%BUILD_DIR%\internal_api.obj"
|
|
|
|
link %LFLAGS_COMMON% %LFLAGS_MERGE% /OUT:".\%FINAL_EXE_NAME%" ^
|
|
"%BUILD_DIR%\injector_main.obj" "%BUILD_DIR%\browser_discovery.obj" ^
|
|
"%BUILD_DIR%\browser_terminator.obj" "%BUILD_DIR%\process_manager.obj" ^
|
|
"%BUILD_DIR%\pipe_server.obj" "%BUILD_DIR%\injector.obj" ^
|
|
"%BUILD_DIR%\internal_api.obj" "%BUILD_DIR%\chacha20.obj" ^
|
|
"%BUILD_DIR%\syscall_trampoline.obj" ^
|
|
version.lib shell32.lib advapi32.lib user32.lib bcrypt.lib
|
|
goto :eof
|
|
|
|
:done
|
|
echo.
|
|
echo =============================================================================
|
|
echo [+] Build Complete: %FINAL_EXE_NAME%
|
|
for %%A in (".\%FINAL_EXE_NAME%") do echo [+] Binary Size: %%~zA bytes
|
|
echo =============================================================================
|
|
echo.
|
|
echo Cleaning up build artifacts...
|
|
|
|
:: Clean up intermediate files, keep only essential outputs
|
|
del /q "%BUILD_DIR%\*.obj" 2>nul
|
|
del /q "%BUILD_DIR%\*.lib" 2>nul
|
|
del /q "%BUILD_DIR%\*.exp" 2>nul
|
|
del /q "%BUILD_DIR%\%ENCRYPTOR_EXE_NAME%" 2>nul
|
|
del /q "%BUILD_DIR%\%PAYLOAD_HEADER%" 2>nul
|
|
|
|
:: Clean up root directory artifacts (only in full build, not CI)
|
|
del /q "*.obj" 2>nul
|
|
|
|
echo [+] Cleaned intermediate object files
|
|
echo [+] Removed temporary artifacts
|
|
echo.
|
|
echo Build artifacts: %FINAL_EXE_NAME% + %BUILD_DIR%\chrome_decrypt.dll + %BUILD_DIR%\chrome_decrypt.enc
|
|
goto :eof
|