Skip to main content

[C] XOR Encryption

Introduction

Le OU exclusif, ou le XOR, est très souvent utilisé dans les algorithmes de chiffrement et les logiciels malveillants.

C'est pourquoi je partage un fonction permettant de chiffrer en XOR.

image.png

Code

#define KEY 'X';

#include <stdio.h>
#include <stdlib.h>

/*
    TODO: - Dev this in C++ with a class "shellcode". 
          - Handle the nullbyte.
*/


char*shellcodeEncXor(unsigned char*shellcode, char key){

    char*shellcodeEnc = (char*)malloc(sizeof(shellcode));
    for(int i=0;i<sizeof(shellcode);i++) shellcodeEnc[i] = shellcode[i] ^ key;
    return shellcodeEnc;
}

char*shellcodeDecXor(unsigned char*shellcodeEnc, char key){

    char*shellcode = (char*)malloc(sizeof(shellcodeEnc));
    for(int i=0;i<sizeof(shellcodeEnc);i++)  shellcode[i] = shellcodeEnc[i] ^ key;
    return shellcode;
}

void*printShellcode(unsigned char*shellcode, int shellcodeLen){
    for (int i=0;i<shellcodeLen;i++) printf("\\x%x", shellcode[i]);
    printf("\n");
}

int main(){
    
    char key = KEY;
	unsigned char sc[] = "\x48\x31\xc9\x48";

    //int scLen = 4;
    int scLen = sizeof(sc);

    // Enc process
    unsigned char*scEnc = shellcodeEncXor(sc, key);
    printShellcode(scEnc, scLen);

    // Dec process
    unsigned char*scDec = shellcodeDecXor(scEnc, key);
    printShellcode(scDec, scLen);

    printf("Sizeof shellcode : [%d]\n", scLen);

    free(scEnc);
    free(scDec);

    return 0;
}