forked from xaitax/Chrome-App-Bound-Encryption-Decryption
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathmake.bat
More file actions
178 lines (151 loc) · 7.98 KB
/
make.bat
File metadata and controls
178 lines (151 loc) · 7.98 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
136
137
138
139
140
141
142
143
144
145
146
147
148
149
150
151
152
153
154
155
156
157
158
159
160
161
162
163
164
165
166
167
168
169
170
171
172
173
174
175
176
177
178
@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"
:: 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%"
if exist "%SRC_DIR%\payload\embedded_payload.h" del /q "%SRC_DIR%\payload\embedded_payload.h"
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/6] 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/6] 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/6] 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/6] Encrypting Payload...
"%BUILD_DIR%\%ENCRYPTOR_EXE_NAME%" "%BUILD_DIR%\%PAYLOAD_DLL_NAME%" "%BUILD_DIR%\chrome_decrypt.enc"
echo [4b/6] Generating embedded payload header...
python -c "data=open('build/chrome_decrypt.enc','rb').read(); print(' [+] Payload size:', len(data), 'bytes'); f=open('src/payload/embedded_payload.h','w'); f.write('#pragma once\n#include <cstddef>\n\nconst unsigned char g_encryptedPayload[] = {\n'); [f.write(' '+', '.join(['0x{:02x}'.format(b) for b in data[i:i+16]])+('' if i+16>=len(data) else ',')+'\n') for i in range(0,len(data),16)]; f.write('};\n\nconst size_t g_encryptedPayloadSize = sizeof(g_encryptedPayload);\n'); f.close(); print(' [+] Generated: src/payload/embedded_payload.h')"
if errorlevel 1 (
echo ERROR: Failed to generate embedded payload header
exit /b 1
)
goto :eof
:compile_injector
echo [5/6] 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% /c "%SRC_DIR%\injector\injector_main.cpp" /Fo"%BUILD_DIR%\injector_main.obj"
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\injector\browser_discovery.cpp" /Fo"%BUILD_DIR%\browser_discovery.obj"
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\injector\browser_terminator.cpp" /Fo"%BUILD_DIR%\browser_terminator.obj"
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\injector\process_manager.cpp" /Fo"%BUILD_DIR%\process_manager.obj"
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\injector\pipe_server.cpp" /Fo"%BUILD_DIR%\pipe_server.obj"
cl %CFLAGS_COMMON% %CFLAGS_CPP% /c "%SRC_DIR%\injector\injector.cpp" /Fo"%BUILD_DIR%\injector.obj"
cl %CFLAGS_COMMON% %CFLAGS_CPP% /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%\*.res" 2>nul
del /q "%BUILD_DIR%\%ENCRYPTOR_EXE_NAME%" 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