summaryrefslogtreecommitdiff
path: root/extract_decoded_executable/encrypter.c
diff options
context:
space:
mode:
authorstderr64 <stderr64@null.net>2026-08-02 23:25:46 +0300
committerstderr64 <stderr64@null.net>2026-08-02 23:25:46 +0300
commit93bf2805ba66b628d0187637c85f86f2ae7eb4a1 (patch)
treed33b2879182966a22f694532cf306ce7e3145b5e /extract_decoded_executable/encrypter.c
parent2e2d8c94e2355e6beae219cb3b7a0684ef1f1aa1 (diff)
downloadexperiments-93bf2805ba66b628d0187637c85f86f2ae7eb4a1.tar.gz
experiments-93bf2805ba66b628d0187637c85f86f2ae7eb4a1.tar.zst
Added RNG based encryption to the code to extract binary from define value
Diffstat (limited to 'extract_decoded_executable/encrypter.c')
-rw-r--r--extract_decoded_executable/encrypter.c70
1 files changed, 70 insertions, 0 deletions
diff --git a/extract_decoded_executable/encrypter.c b/extract_decoded_executable/encrypter.c
new file mode 100644
index 0000000..34732cb
--- /dev/null
+++ b/extract_decoded_executable/encrypter.c
@@ -0,0 +1,70 @@
+#include <stdlib.h>
+#include <stdio.h>
+#include <stdbool.h>
+#include <errno.h>
+#include <unistd.h>
+#include <fcntl.h>
+#include <string.h>
+#include <math.h>
+#include <sys/stat.h>
+#include "rng.h"
+
+void encrypt_test_binary(){
+ init_rng();
+ unsigned char enc_key[256];
+ memset( (void*)&enc_key, 0, sizeof(enc_key) );
+ size_t k_size = 0;
+ for ( ; k_size < 256; k_size++ )
+ enc_key[k_size] = (unsigned char)get_random_int( 1, 255 );
+ struct stat test_bin_info;
+ memset( (void*)&test_bin_info, 0, sizeof(struct stat) );
+ if ( stat("./test_binary", &test_bin_info) == -1 ){
+ fprintf( stderr, "Failed to stat: %s\n", strerror(errno) );
+ return;
+ }
+ if ( !((test_bin_info.st_mode & S_IFMT) == S_IFREG) ){
+ fputs( "Error: test binary is not regular file\n", stderr );
+ return;
+ }
+ unsigned char *test_bin_bytes = (unsigned char*)calloc( (size_t)test_bin_info.st_size, sizeof(unsigned char) );
+ if ( test_bin_bytes == NULL ){
+ fprintf( stderr, "Error: failed to allocate memory for reading test binary: %s\n", strerror(errno) );
+ return;
+ }
+ int test_bin_fd = open( "./test_binary", O_RDONLY, 0755 );
+ if ( test_bin_fd == -1 ){
+ fprintf( stderr, "Error: failed to open test binary for encryption: %s\n", strerror(errno) );
+ free( test_bin_bytes );
+ return;
+ }
+ if ( read(test_bin_fd, (void*)test_bin_bytes, (size_t)test_bin_info.st_size) == -1 ){
+ fprintf( stderr, "Error: failed to read test binary bytes: %s\n", strerror(errno) );
+ close( test_bin_fd );
+ free( test_bin_bytes );
+ return;
+ }
+ close( test_bin_fd );
+ size_t encrypted_bytes = 0;
+ for ( ; encrypted_bytes < (size_t)test_bin_info.st_size; encrypted_bytes++ )
+ test_bin_bytes[encrypted_bytes] = test_bin_bytes[encrypted_bytes] ^ enc_key[(size_t)test_bin_info.st_size % 255];
+ test_bin_fd = open( "./test_binary", O_RDWR | O_CREAT | O_TRUNC );
+ if ( test_bin_fd == -1 ){
+ fprintf( stderr, "Error: failed to open test binary for writing: %s\n", strerror(errno) );
+ free( test_bin_bytes );
+ return;
+ }
+ if ( write(test_bin_fd, (const void*)test_bin_bytes, (size_t)test_bin_info.st_size) == -1 ){
+ fprintf( stderr, "Error: failed to write encrypted test binary: %s\n", strerror(errno) );
+ close( test_bin_fd );
+ free( test_bin_bytes );
+ return;
+ }
+ close( test_bin_fd );
+ free( test_bin_bytes );
+ return;
+}
+
+int main( int argc, char *const *args ){
+ encrypt_test_binary();
+ return 0;
+}