From d09bc5e6b8c66a7309a93ebba8fd1c4b8f49fdde Mon Sep 17 00:00:00 2001 From: Alberto Ortega Date: Sun, 28 Oct 2012 18:41:38 +0100 Subject: [PATCH] v02 uploaded! --- CHANGELOG | 19 ++++ pafish.exe | Bin 414987 -> 389632 bytes pafish/Makefile.win | 35 ++++--- pafish/Objects/MingW/pafish_private.h | 4 +- pafish/Objects/MingW/pafish_private.rc | 4 +- pafish/common.c | 11 ++ pafish/common.h | 5 +- pafish/debuggers.c | 16 +++ pafish/debuggers.h | 7 +- pafish/gensandbox.c | 19 ++++ pafish/gensandbox.h | 7 ++ pafish/main.c | 134 ++++++++++++++++++++++--- pafish/pafish.dev | 80 +++++++++++++-- pafish/pafish.layout | 82 +++++++++------ pafish/sandboxie.c | 13 +-- pafish/sandboxie.h | 5 +- pafish/vbox.c | 82 ++++++++++++++- pafish/vbox.h | 13 ++- pafish/vmware.c | 61 +++++++++++ pafish/vmware.h | 11 ++ pafish/wine.c | 20 ++++ pafish/wine.h | 7 ++ 22 files changed, 541 insertions(+), 94 deletions(-) create mode 100644 CHANGELOG create mode 100644 pafish/gensandbox.c create mode 100644 pafish/gensandbox.h create mode 100644 pafish/vmware.c create mode 100644 pafish/vmware.h create mode 100644 pafish/wine.c create mode 100644 pafish/wine.h diff --git a/CHANGELOG b/CHANGELOG new file mode 100644 index 0000000..e52c465 --- /dev/null +++ b/CHANGELOG @@ -0,0 +1,19 @@ + +v02 + +- Now pafish writes a log file (pafish.log) to + easily track detections + +- Deleted one dummy detection for Sandboxie + +- Added two new detections for VirtualBox +- Added one new detection for wine +- Added three new detections for VMware +- Added one new detection for generic sandboxes + +- Some coding style improvements +- gcc optimization flag in compilation -O1 + +v01 + +- First version diff --git a/pafish.exe b/pafish.exe index 170e13aacd039a4ba608638ddf558ddce98c5c08..06be0b9499433a41f4c871c9b8f640de4fa0fac7 100644 GIT binary patch delta 28201 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 delta 49131 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 diff --git a/pafish/Makefile.win b/pafish/Makefile.win index 9120337..b953e86 100644 --- a/pafish/Makefile.win +++ b/pafish/Makefile.win @@ -1,22 +1,22 @@ # Project: pafish # Compiler: Default GCC compiler # Compiler Type: MingW 3 -# Makefile created by wxDev-C++ IDE 7.4.2.569 on 01/07/12 12:46 +# Makefile created by wxDev-C++ IDE 7.4.2.569 on 28/10/12 18:14 WXLIBNAME = wxmsw29u CPP = g++.exe CC = gcc.exe WINDRES = "windres.exe" -OBJ = Objects/MingW/main.o Objects/MingW/common.o Objects/MingW/debuggers.o Objects/MingW/sandboxie.o Objects/MingW/vbox.o Objects/MingW/pafish_private.res -LINKOBJ = "Objects/MingW/main.o" "Objects/MingW/common.o" "Objects/MingW/debuggers.o" "Objects/MingW/sandboxie.o" "Objects/MingW/vbox.o" Objects/MingW/pafish_private.res -LIBS = -L"C:/Archivos de programa/Dev-Cpp/lib/wx/gcc_lib" -L"C:/Archivos de programa/Dev-Cpp/lib" -L"C:/Archivos de programa/Dev-Cpp/MinGW32/lib" -INCS = -I"C:/Archivos de programa/Dev-Cpp/MinGW32/include" -CXXINCS = -I"C:/Archivos de programa/Dev-Cpp/MinGW32/include" -I"C:/Archivos de programa/Dev-Cpp/" -I"C:/Archivos de programa/Dev-Cpp/include/common" -RCINCS = --include-dir "C:/ARCHIV~1/Dev-Cpp/include/common" +OBJ = Objects/MingW/main.o Objects/MingW/common.o Objects/MingW/debuggers.o Objects/MingW/sandboxie.o Objects/MingW/vbox.o Objects/MingW/gensandbox.o Objects/MingW/wine.o Objects/MingW/vmware.o Objects/MingW/pafish_private.res +LINKOBJ = "Objects/MingW/main.o" "Objects/MingW/common.o" "Objects/MingW/debuggers.o" "Objects/MingW/sandboxie.o" "Objects/MingW/vbox.o" "Objects/MingW/gensandbox.o" "Objects/MingW/wine.o" "Objects/MingW/vmware.o" Objects/MingW/pafish_private.res +LIBS = -L"C:/Program Files (x86)/Dev-Cpp/lib/wx/gcc_lib" -L"C:/Program Files (x86)/Dev-Cpp/lib" -L"C:/Program Files (x86)/Dev-Cpp/MinGW32/lib" -s +INCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" +CXXINCS = -I"C:/Program Files (x86)/Dev-Cpp/MinGW32/include" -I"C:/Program Files (x86)/Dev-Cpp/" -I"C:/Program Files (x86)/Dev-Cpp/include/common" +RCINCS = --include-dir "C:/PROGRA~2/Dev-Cpp/include/common" BIN = Output/MingW/pafish.exe DEFINES = -CXXFLAGS = $(CXXINCS) $(DEFINES) -CFLAGS = $(INCS) $(DEFINES) +CXXFLAGS = $(CXXINCS) $(DEFINES) -fexpensive-optimizations -O1 +CFLAGS = $(INCS) $(DEFINES) -fexpensive-optimizations -O1 GPROF = gprof.exe ifeq ($(OS),Windows_NT) RM = del /Q @@ -40,16 +40,25 @@ Objects/MingW/main.o: $(GLOBALDEPS) main.c $(CC) -c main.c -o Objects/MingW/main.o $(CFLAGS) Objects/MingW/common.o: $(GLOBALDEPS) common.c - $(CPP) -c common.c -o Objects/MingW/common.o $(CXXFLAGS) + $(CC) -c common.c -o Objects/MingW/common.o $(CFLAGS) Objects/MingW/debuggers.o: $(GLOBALDEPS) debuggers.c - $(CPP) -c debuggers.c -o Objects/MingW/debuggers.o $(CXXFLAGS) + $(CC) -c debuggers.c -o Objects/MingW/debuggers.o $(CFLAGS) Objects/MingW/sandboxie.o: $(GLOBALDEPS) sandboxie.c - $(CPP) -c sandboxie.c -o Objects/MingW/sandboxie.o $(CXXFLAGS) + $(CC) -c sandboxie.c -o Objects/MingW/sandboxie.o $(CFLAGS) Objects/MingW/vbox.o: $(GLOBALDEPS) vbox.c - $(CPP) -c vbox.c -o Objects/MingW/vbox.o $(CXXFLAGS) + $(CC) -c vbox.c -o Objects/MingW/vbox.o $(CFLAGS) + +Objects/MingW/gensandbox.o: $(GLOBALDEPS) gensandbox.c + $(CC) -c gensandbox.c -o Objects/MingW/gensandbox.o $(CFLAGS) + +Objects/MingW/wine.o: $(GLOBALDEPS) wine.c + $(CC) -c wine.c -o Objects/MingW/wine.o $(CFLAGS) + +Objects/MingW/vmware.o: $(GLOBALDEPS) vmware.c + $(CC) -c vmware.c -o Objects/MingW/vmware.o $(CFLAGS) Objects/MingW/pafish_private.res: Objects/MingW/pafish_private.rc $(WINDRES) --input-format=rc -o Objects/MingW/pafish_private.res $(RCINCS) Objects/MingW/PAFISH~1.RC -O coff diff --git a/pafish/Objects/MingW/pafish_private.h b/pafish/Objects/MingW/pafish_private.h index c30a926..6c111cb 100644 --- a/pafish/Objects/MingW/pafish_private.h +++ b/pafish/Objects/MingW/pafish_private.h @@ -7,9 +7,9 @@ #define PAFISH_PRIVATE_H /* VERSION DEFINITIONS */ -#define VER_STRING "0.1.1.1" +#define VER_STRING "0.2.1.1" #define VER_MAJOR 0 -#define VER_MINOR 1 +#define VER_MINOR 2 #define VER_RELEASE 1 #define VER_BUILD 1 #define COMPANY_NAME "" diff --git a/pafish/Objects/MingW/pafish_private.rc b/pafish/Objects/MingW/pafish_private.rc index 308fbfd..193e7b7 100644 --- a/pafish/Objects/MingW/pafish_private.rc +++ b/pafish/Objects/MingW/pafish_private.rc @@ -8,8 +8,8 @@ A ICON MOVEABLE PURE LOADONCALL DISCARDABLE "pafish.ico" // This section contains the executable version information. Go to // Project > Project Options to edit these values. 1 VERSIONINFO -FILEVERSION 0,1,1,1 -PRODUCTVERSION 0,1,1,1 +FILEVERSION 0,2,1,1 +PRODUCTVERSION 0,2,1,1 FILETYPE VFT_APP BEGIN BLOCK "StringFileInfo" diff --git a/pafish/common.c b/pafish/common.c index f7cc09a..44092ec 100644 --- a/pafish/common.c +++ b/pafish/common.c @@ -4,6 +4,8 @@ #include #include +#include "common.h" + void init_cmd_colors() { HANDLE handler = GetStdHandle(STD_OUTPUT_HANDLE); SetConsoleTextAttribute(handler, FOREGROUND_INTENSITY); @@ -41,3 +43,12 @@ void print_suspicious() { printf("suspicious\n"); SetConsoleTextAttribute(handler, FOREGROUND_INTENSITY); } + +void write_log(char msg[]) { + FILE *log; + char logstr[1024]; + snprintf(logstr, sizeof(logstr), "\n[pafish] %s", msg); + log = fopen("pafish.log", "a"); + fputs(logstr, log); + fclose(log); +} diff --git a/pafish/common.h b/pafish/common.h index 8357f96..310a37d 100644 --- a/pafish/common.h +++ b/pafish/common.h @@ -1,5 +1,6 @@ -#include "common.c" +#ifndef COMM_H +#define COMM_H void init_cmd_colors(); @@ -10,3 +11,5 @@ void print_traced(); void print_not_traced(); void print_suspicious(); + +#endif diff --git a/pafish/debuggers.c b/pafish/debuggers.c index 18ff92b..3269683 100644 --- a/pafish/debuggers.c +++ b/pafish/debuggers.c @@ -1,6 +1,10 @@ +#define _WIN32_WINNT 0x0501 /* _WIN32_WINNT_WINXP */ + #include +#include "debuggers.h" + int debug_isdebuggerpresent() { if (IsDebuggerPresent()) { return 0; @@ -10,6 +14,18 @@ int debug_isdebuggerpresent() { } } +/* This function is not used because it doesn't work prety well */ +int debug_checkremotedebuggerpresent() { + BOOL isdebug = FALSE; + CheckRemoteDebuggerPresent(GetCurrentProcess(), &isdebug); + if (isdebug) { + return 0; + } + else { + return 1; + } +} + int debug_outputdebugstring() { DWORD err = 99; /* Random error */ SetLastError(err); diff --git a/pafish/debuggers.h b/pafish/debuggers.h index 3729a4f..f0863da 100644 --- a/pafish/debuggers.h +++ b/pafish/debuggers.h @@ -1,6 +1,11 @@ -#include "debuggers.c" +#ifndef DEBUG_H +#define DEBUG_H int debug_isdebuggerpresent(); +int debug_checkremotedebuggerpresent(); + int debug_outputdebugstring(); + +#endif diff --git a/pafish/gensandbox.c b/pafish/gensandbox.c new file mode 100644 index 0000000..14588ba --- /dev/null +++ b/pafish/gensandbox.c @@ -0,0 +1,19 @@ + +#include + +#include "gensandbox.h" + +int gensandbox_mouse_act() { + POINT position1, position2; + GetCursorPos(&position1); + Sleep(1000); /* Sleep time */ + GetCursorPos(&position2); + if ((position1.x == position2.x) && (position1.y == position2.y)) { + /* No mouse activity during the sleep */ + return 0; + } + else { + /* Mouse activity during the sleep */ + return 1; + } +} diff --git a/pafish/gensandbox.h b/pafish/gensandbox.h new file mode 100644 index 0000000..3a346b5 --- /dev/null +++ b/pafish/gensandbox.h @@ -0,0 +1,7 @@ + +#ifndef GENSAND_H +#define GENSAND_H + +int gensandbox_mouse_act(); + +#endif diff --git a/pafish/main.c b/pafish/main.c index e9a5ed0..d742b49 100644 --- a/pafish/main.c +++ b/pafish/main.c @@ -1,12 +1,17 @@ + #include #include #include +#include #include "common.h" #include "debuggers.h" #include "sandboxie.h" +#include "gensandbox.h" #include "vbox.h" +#include "wine.h" +#include "vmware.h" /* Pafish (Paranoid fish) @@ -26,49 +31,146 @@ int main(int argc, char *argv[]) { - char icon[] = "Blue fish icon thanks to http://www.fasticon.com/"; + char icon[] = "Blue fish icon thanks to http://www.fasticon.com/", winverstr[32], aux[1024]; + OSVERSIONINFO winver; + + write_log("Start"); init_cmd_colors(); print_header(); + winver.dwOSVersionInfoSize = sizeof(OSVERSIONINFO); + GetVersionEx(&winver); + snprintf(winverstr, sizeof(winverstr), "%d.%d build %d", winver.dwMajorVersion, winver.dwMinorVersion, winver.dwBuildNumber); + + printf("[*] Windows version: %s\n", winverstr); + snprintf(aux, sizeof(aux), "Windows version: %s", winverstr); + write_log(aux); + printf("[*] Running checks ...\n"); /* Debuggers detection tricks */ printf("\n[-] Debuggers detection\n"); printf("[*] Using IsDebuggerPresent() ... "); - if (debug_isdebuggerpresent() == 0) + if (debug_isdebuggerpresent() == 0) { + write_log("Debugger traced using IsDebuggerPresent()"); print_traced(); - else + } + else { print_not_traced(); - printf("[*] Using OutputDebugString() ... "); - if (debug_outputdebugstring() == 0) + } + /* This is only working on MS Windows systems prior to Vista */ + if (winver.dwMajorVersion < 6) { + printf("[*] Using OutputDebugString() ... "); + if (debug_outputdebugstring() == 0) { + write_log("Debugger traced using OutputDebugString()"); + print_traced(); + } + else { + print_not_traced(); + } + } + + /* Generic sandbox detection tricks */ + printf("\n[-] Generic sandbox detection\n"); + printf("[*] Using mouse activity ... "); + if (gensandbox_mouse_act() == 0) { print_traced(); - else + write_log("Sandbox traced using mouse activity"); + } + else { print_not_traced(); + } /* Sandboxie detection tricks */ printf("\n[-] Sandboxie detection\n"); printf("[*] Using sbiedll.dll ... "); - if (sboxie_detect_sbiedll() == 0) + if (sboxie_detect_sbiedll() == 0) { + write_log("Sandboxie traced using sbiedll.dll"); print_traced(); - else + } + else { print_not_traced(); - printf("[*] Looking for default working directory ... "); - if (sboxie_detect_work_dir() == 0) - print_suspicious(); - else + } + + /* Wine detection tricks */ + printf("\n[-] Wine detection\n"); + printf("[*] Using GetProcAddress(wine_get_unix_file_name) from kernel32.dll ... "); + if (wine_detect_get_unix_file_name() == 0) { + write_log("Wine traced using GetProcAddress(wine_get_unix_file_name) from kernel32.dll"); + print_traced(); + } + else { print_not_traced(); + } /* VirtualBox detection tricks */ printf("\n[-] VirtualBox detection\n"); - printf("[*] Using RegOpenKey w/ known Guest additions key ... "); - if (vbox_gadd_reg_key() == 0) + printf("[*] Scsi port->bus->target id->logical unit id-> 0 identifier ... "); + if (vbox_reg_key1() == 0) { + write_log("VirtualBox traced using Reg key HKLM\\HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0 \"Identifier\""); print_traced(); - else + } + else { print_not_traced(); - + } + printf("[*] Reg key (HKLM\\HARDWARE\\Description\\System \"SystemBiosVersion\") ... "); + if (vbox_reg_key2() == 0) { + write_log("VirtualBox traced using Reg key HKLM\\HARDWARE\\Description\\System \"SystemBiosVersion\""); + print_traced(); + } + else { + print_not_traced(); + } + printf("[*] Reg key (HKLM\\SOFTWARE\\Oracle\\VirtualBox Guest Additions) ... "); + if (vbox_reg_key3() == 0) { + write_log("VirtualBox traced using Reg key HKLM\\SOFTWARE\\Oracle\\VirtualBox Guest Additions"); + print_traced(); + } + else { + print_not_traced(); + } + printf("[*] Looking for C:\\WINDOWS\\system32\\drivers\\VBoxMouse.sys ... "); + if (vbox_sysfile1() == 0) { + write_log("VirtualBox traced using file C:\\WINDOWS\\system32\\drivers\\VBoxMouse.sys"); + print_traced(); + } + else { + print_not_traced(); + } + + /* VMware detection tricks */ + printf("\n[-] VMware detection\n"); + printf("[*] Scsi port->bus->target id->logical unit id-> 0 identifier ... "); + if (vmware_reg_key1() == 0) { + write_log("VMWare traced using Reg key HKLM\\HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0 \"Identifier\""); + print_traced(); + } + else { + print_not_traced(); + } + printf("[*] Reg key (HKLM\\SOFTWARE\\VMware, Inc.\\VMware Tools) ... "); + if (vmware_reg_key2() == 0) { + write_log("VMware traced using Reg key HKLM\\SOFTWARE\\VMware, Inc.\\VMware Tools"); + print_traced(); + } + else { + print_not_traced(); + } + printf("[*] Looking for C:\\WINDOWS\\system32\\drivers\\vmmouse.sys ... "); + if (vmware_sysfile1() == 0) { + write_log("VMware traced using file C:\\WINDOWS\\system32\\drivers\\vmmouse.sys"); + print_traced(); + } + else { + print_not_traced(); + } + printf("\n\n"); printf("[-] Finished, feel free to RE me."); + + write_log("End"); + fflush(stdin); getchar(); return 0; } diff --git a/pafish/pafish.dev b/pafish/pafish.dev index be4be8f..83fcb34 100644 --- a/pafish/pafish.dev +++ b/pafish/pafish.dev @@ -1,7 +1,7 @@ [Project] FileName=pafish.dev Name=pafish -UnitCount=9 +UnitCount=15 PchHead=-1 PchSource=-1 Ver=3 @@ -22,7 +22,7 @@ BuildCmd= [VersionInfo] Major=0 -Minor=1 +Minor=2 Release=1 Build=1 LanguageID=1033 @@ -38,7 +38,7 @@ ProductName=Paranoid Fish ProductVersion= AutoIncBuildNrOnRebuild=0 AutoIncBuildNrOnCompile=0 -UnitCount=9 +UnitCount=15 [Profile1] ProfileName=MingW gcc @@ -52,7 +52,7 @@ Compiler= CppCompiler= Linker= PreprocDefines= -CompilerSettings=0000000000000000000000 +CompilerSettings=0000000001100000000100 Icon=pafish.ico ExeOutput=Output\MingW ImagesOutput=Images\ @@ -108,13 +108,13 @@ BuildCmd= [Unit3] FileName=common.c -CompileCpp=1 +CompileCpp=0 Folder=pafish Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 -BuildCmd= +BuildCmd=$(CC) -c common.c -o Objects/MingW/common.o $(CFLAGS) [Unit4] FileName=common.h @@ -128,13 +128,13 @@ BuildCmd= [Unit5] FileName=debuggers.c -CompileCpp=1 +CompileCpp=0 Folder=pafish Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 -BuildCmd= +BuildCmd=$(CC) -c debuggers.c -o Objects/MingW/debuggers.o $(CFLAGS) [Unit6] FileName=debuggers.h @@ -148,13 +148,13 @@ BuildCmd= [Unit7] FileName=sandboxie.c -CompileCpp=1 +CompileCpp=0 Folder=pafish Compile=1 Link=1 Priority=1000 OverrideBuildCmd=0 -BuildCmd= +BuildCmd=$(CC) -c sandboxie.c -o Objects/MingW/sandboxie.o $(CFLAGS) [Unit8] FileName=sandboxie.h @@ -168,6 +168,66 @@ BuildCmd= [Unit9] FileName=vbox.c +CompileCpp=0 +Folder=pafish +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd=$(CC) -c vbox.c -o Objects/MingW/vbox.o $(CFLAGS) + +[Unit10] +FileName=gensandbox.h +CompileCpp=1 +Folder=pafish +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit11] +FileName=gensandbox.c +CompileCpp=0 +Folder=pafish +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd=$(CC) -c gensandbox.c -o Objects/MingW/gensandbox.o $(CFLAGS) + +[Unit12] +FileName=wine.c +CompileCpp=0 +Folder=pafish +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd=$(CC) -c wine.c -o Objects/MingW/wine.o $(CFLAGS) + +[Unit13] +FileName=wine.h +CompileCpp=1 +Folder=pafish +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd= + +[Unit14] +FileName=vmware.c +CompileCpp=0 +Folder=pafish +Compile=1 +Link=1 +Priority=1000 +OverrideBuildCmd=0 +BuildCmd=$(CC) -c vmware.c -o Objects/MingW/vmware.o $(CFLAGS) + +[Unit15] +FileName=vmware.h CompileCpp=1 Folder=pafish Compile=1 diff --git a/pafish/pafish.layout b/pafish/pafish.layout index a93d2d1..2301336 100644 --- a/pafish/pafish.layout +++ b/pafish/pafish.layout @@ -4,57 +4,77 @@ Order=0 [Editor_0] Open=1 Top=1 -CursorCol=3 -CursorRow=11 -TopLine=12 +CursorCol=5 +CursorRow=141 +TopLine=1 LeftChar=1 [Editor_6] -CursorCol=2 -CursorRow=11 -TopLine=8 +CursorCol=1 +CursorRow=14 +TopLine=1 LeftChar=1 [Editor_7] CursorCol=1 -CursorRow=7 +CursorRow=2 TopLine=1 LeftChar=1 [Editor_8] -CursorCol=1 -CursorRow=17 -TopLine=2 +CursorCol=18 +CursorRow=83 +TopLine=1 LeftChar=1 [Editor_2] -CursorCol=62 -CursorRow=21 -TopLine=1 +CursorCol=25 +CursorRow=9 +TopLine=34 LeftChar=1 [Editor_5] CursorCol=1 -CursorRow=7 +CursorRow=12 TopLine=1 LeftChar=1 [Editor_4] -CursorCol=2 -CursorRow=25 +CursorCol=67 +CursorRow=17 TopLine=1 LeftChar=1 [Editor_3] CursorCol=1 -CursorRow=13 -TopLine=1 -LeftChar=1 -[Editor_1] -CursorCol=1 -CursorRow=5 -TopLine=1 -LeftChar=1 -[Editor_9] -CursorCol=27 -CursorRow=8 -TopLine=1 -LeftChar=1 -[Editor_10] -CursorCol=6 CursorRow=16 TopLine=1 LeftChar=1 +[Editor_1] +CursorCol=21 +CursorRow=11 +TopLine=1 +LeftChar=1 +[Editor_9] +CursorCol=1 +CursorRow=2 +TopLine=1 +LeftChar=1 +[Editor_10] +CursorCol=1 +CursorRow=20 +TopLine=1 +LeftChar=1 +[Editor_11] +CursorCol=18 +CursorRow=4 +TopLine=1 +LeftChar=1 +[Editor_12] +CursorCol=1 +CursorRow=8 +TopLine=1 +LeftChar=1 +[Editor_13] +CursorCol=18 +CursorRow=56 +TopLine=1 +LeftChar=1 +[Editor_14] +CursorCol=20 +CursorRow=9 +TopLine=1 +LeftChar=1 diff --git a/pafish/sandboxie.c b/pafish/sandboxie.c index 147a884..3c0aa1f 100644 --- a/pafish/sandboxie.c +++ b/pafish/sandboxie.c @@ -1,6 +1,8 @@ #include +#include "sandboxie.h" + int sboxie_detect_sbiedll() { if (GetModuleHandle("sbiedll.dll") != NULL) { return 0; @@ -9,14 +11,3 @@ int sboxie_detect_sbiedll() { return 1; } } - -int sboxie_detect_work_dir() { - DWORD ret; - ret = GetFileAttributes("C:\\Sandbox"); - if (ret != INVALID_FILE_ATTRIBUTES) { - return 0; - } - else { - return 1; - } -} diff --git a/pafish/sandboxie.h b/pafish/sandboxie.h index 5b545de..383a26e 100644 --- a/pafish/sandboxie.h +++ b/pafish/sandboxie.h @@ -1,6 +1,7 @@ -#include "sandboxie.c" +#ifndef SANBOXIE_H +#define SANBOXIE_H int sboxie_detect_sbiedll(); -int sboxie_detect_work_dir(); +#endif diff --git a/pafish/vbox.c b/pafish/vbox.c index 1450482..adc8b79 100644 --- a/pafish/vbox.c +++ b/pafish/vbox.c @@ -1,12 +1,77 @@ #include +#include -int vbox_gadd_reg_key() { - HKEY res; +#include "vbox.h" + +int vbox_reg_key1() { + HKEY regkey; + LONG retu; + char value[1024]; + int i; + DWORD size; + + size = sizeof(value); + retu = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", 0, KEY_READ, ®key); + if (retu == ERROR_SUCCESS) { + retu = RegQueryValueEx(regkey, "Identifier", NULL, NULL, (BYTE*)value, &size); + if (retu == ERROR_SUCCESS) { + for (i = 0; i < strlen(value); i++) { /* Uppercase to case-insensitive */ + value[i] = toupper(value[i]); + } + if (strstr(value, "VBOX") != NULL) { + return 0; + } + else { + return 1; + } + } + else { + return 1; + } + } + else { + return 1; + } +} + +int vbox_reg_key2() { + HKEY regkey; + LONG retu; + char value[1024]; + int i; + DWORD size; + + size = sizeof(value); + retu = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\Description\\System", 0, KEY_READ, ®key); + if (retu == ERROR_SUCCESS) { + retu = RegQueryValueEx(regkey, "SystemBiosVersion", NULL, NULL, (BYTE*)value, &size); + if (retu == ERROR_SUCCESS) { + for (i = 0; i < strlen(value); i++) { /* Uppercase to case-insensitive */ + value[i] = toupper(value[i]); + } + if (strstr(value, "VBOX") != NULL) { + return 0; + } + else { + return 1; + } + } + else { + return 1; + } + } + else { + return 1; + } +} + +int vbox_reg_key3() { + HKEY regkey; LONG retu; /* We just try to detect if VirtualBox Guest Additions are installed looking at the RegKey */ - retu = RegOpenKey(HKEY_LOCAL_MACHINE, "SOFTWARE\\Oracle\\VirtualBox Guest Additions", &res); + retu = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\Oracle\\VirtualBox Guest Additions", 0, KEY_READ, ®key); if (retu == ERROR_SUCCESS) { return 0; } @@ -14,3 +79,14 @@ int vbox_gadd_reg_key() { return 1; } } + +int vbox_sysfile1() { + DWORD ret; + ret = GetFileAttributes("C:\\WINDOWS\\system32\\drivers\\VBoxMouse.sys"); + if (ret != INVALID_FILE_ATTRIBUTES) { + return 0; + } + else { + return 1; + } +} diff --git a/pafish/vbox.h b/pafish/vbox.h index 3934d78..3a36eb3 100644 --- a/pafish/vbox.h +++ b/pafish/vbox.h @@ -1,4 +1,13 @@ -#include "vbox.c" +#ifndef VBOX_H +#define VBOX_H -int vbox_gadd_reg_key(); +int vbox_reg_key1(); + +int vbox_reg_key2(); + +int vbox_reg_key3(); + +int vbox_sysfile1(); + +#endif diff --git a/pafish/vmware.c b/pafish/vmware.c new file mode 100644 index 0000000..2b0a79b --- /dev/null +++ b/pafish/vmware.c @@ -0,0 +1,61 @@ + +#include +#include + +#include "vmware.h" + +int vmware_reg_key1() { + HKEY regkey; + LONG retu; + char value[1024]; + int i; + DWORD size; + + size = sizeof(value); + retu = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "HARDWARE\\DEVICEMAP\\Scsi\\Scsi Port 0\\Scsi Bus 0\\Target Id 0\\Logical Unit Id 0", 0, KEY_READ, ®key); + if (retu == ERROR_SUCCESS) { + retu = RegQueryValueEx(regkey, "Identifier", NULL, NULL, (BYTE*)value, &size); + if (retu == ERROR_SUCCESS) { + for (i = 0; i < strlen(value); i++) { /* Uppercase to case-insensitive */ + value[i] = toupper(value[i]); + } + if (strstr(value, "VMWARE") != NULL) { + return 0; + } + else { + return 1; + } + } + else { + return 1; + } + } + else { + return 1; + } +} + +int vmware_reg_key2() { + HKEY regkey; + LONG retu; + /* We just try to detect if VMware Tools are installed looking at + the RegKey */ + retu = RegOpenKeyEx(HKEY_LOCAL_MACHINE, "SOFTWARE\\VMware, Inc.\\VMware Tools", 0, KEY_READ, ®key); + if (retu == ERROR_SUCCESS) { + return 0; + } + else { + return 1; + } +} + +int vmware_sysfile1() { + DWORD ret; + ret = GetFileAttributes("C:\\WINDOWS\\system32\\drivers\\vmmouse.sys"); + if (ret != INVALID_FILE_ATTRIBUTES) { + return 0; + } + else { + return 1; + } +} diff --git a/pafish/vmware.h b/pafish/vmware.h new file mode 100644 index 0000000..1b6ca9b --- /dev/null +++ b/pafish/vmware.h @@ -0,0 +1,11 @@ + +#ifndef VMWARE_H +#define VMWARE_H + +int vmware_reg_key1(); + +int vmware_reg_key2(); + +int vmware_sysfile1(); + +#endif diff --git a/pafish/wine.c b/pafish/wine.c new file mode 100644 index 0000000..6452053 --- /dev/null +++ b/pafish/wine.c @@ -0,0 +1,20 @@ + +#include + +#include "wine.h" + +int wine_detect_get_unix_file_name() { + HMODULE k32; + k32 = GetModuleHandle("kernel32.dll"); + if (k32 != NULL) { + if (GetProcAddress(k32, "wine_get_unix_file_name") != NULL) { + return 0; + } + else { + return 1; + } + } + else { + return 1; + } +} diff --git a/pafish/wine.h b/pafish/wine.h new file mode 100644 index 0000000..0914236 --- /dev/null +++ b/pafish/wine.h @@ -0,0 +1,7 @@ + +#ifndef WINE_H +#define WINE_H + +int wine_detect_get_unix_file_name(); + +#endif