/******************************************\ * * Command line tool written * to allow us to encrypt VNC passwords so as * to generate NT registry files to overwrite * the VNC service password. * * Download the WinVNC source and put this in vnc_winsrc/winvnc * then compile under unix with GCC to produce unix binary or use * whatever to produce windows binaries. * * Released under GNU Public License. */ #include "d3des.c" #include "vncauth.c" int main(int argc, char *argv[]) { FILE *regfile, *vncconfig; char *decoded; unsigned int xncrypted[15]; char filename[2048]; char plaintext[2048]; char encrypted[2048]; if ( argc!=3 && argc!=4) { goto help; } if ( strncmp(argv[1],"-e",3)==0) { if ( argc!=3) goto help; strncpy(plaintext,argv[2],15); //printf("Plaintext is %s\n",plaintext); vncEncryptPasswd(plaintext,encrypted); printf("%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", (unsigned char) encrypted[0], (unsigned char) encrypted[1], (unsigned char) encrypted[2], (unsigned char) encrypted[3], (unsigned char) encrypted[4], (unsigned char) encrypted[5], (unsigned char) encrypted[6], (unsigned char) encrypted[7]); } else if ( strncmp(argv[1],"-E",3)==0) { if ( argc!=3) goto help; strncpy(plaintext,argv[2],15); //printf("Plaintext is %s\n",plaintext); vncEncryptPasswd(plaintext,encrypted); printf("%02x%02x%02x%02x%02x%02x%02x%02x\n", (unsigned char) encrypted[0], (unsigned char) encrypted[1], (unsigned char) encrypted[2], (unsigned char) encrypted[3], (unsigned char) encrypted[4], (unsigned char) encrypted[5], (unsigned char) encrypted[6], (unsigned char) encrypted[7]); } else if ( strncmp(argv[1],"-H",3)==0) { if ( argc!=4) goto help; strncpy(plaintext,argv[3],15); //printf("Plaintext is %s\n",plaintext); vncEncryptPasswd(plaintext,encrypted); snprintf(filename,1024,"%s.vnc",argv[2]); vncconfig=fopen(filename,"wt"); if (!vncconfig) {perror("Couldn't create .vnc file"); exit(1);} snprintf(filename,1024,"%s.reg",argv[2]); regfile=fopen(filename,"wt"); if (!regfile) {perror("Couldn't create .reg file"); exit(1);} fprintf(vncconfig,"[connection]\n"); fprintf(vncconfig,"host=%s\n",argv[2]); fprintf(vncconfig,"port=5900\n"); fprintf(vncconfig,"password="); fprintf(vncconfig,"%02x%02x%02x%02x%02x%02x%02x%02x\n", (unsigned char) encrypted[0], (unsigned char) encrypted[1], (unsigned char) encrypted[2], (unsigned char) encrypted[3], (unsigned char) encrypted[4], (unsigned char) encrypted[5], (unsigned char) encrypted[6], (unsigned char) encrypted[7]); fprintf(vncconfig,"[options]\n"); fprintf(vncconfig,"use_encoding_0=1\n"); fprintf(vncconfig,"use_encoding_1=1\n"); fprintf(vncconfig,"use_encoding_2=1\n"); fprintf(vncconfig,"use_encoding_3=1\n"); fprintf(vncconfig,"use_encoding_4=1\n"); fprintf(vncconfig,"use_encoding_5=1\n"); fprintf(vncconfig,"preferred_encoding=5\n"); fprintf(vncconfig,"restricted=0\n"); fprintf(vncconfig,"viewonly=0\n"); fprintf(vncconfig,"fullscreen=0\n"); fprintf(vncconfig,"8bit=0\n"); fprintf(vncconfig,"shared=0\n"); fprintf(vncconfig,"swapmouse=0\n"); fprintf(vncconfig,"belldeiconify=0\n"); fprintf(vncconfig,"emulate3=1\n"); fprintf(vncconfig,"emulate3timeout=100\n"); fprintf(vncconfig,"emulate3fuzz=4\n"); fprintf(vncconfig,"disableclipboard=0\n"); fprintf(vncconfig,"localcursor=1\n"); fprintf(vncconfig,"scale_num=1\n"); fprintf(vncconfig,"scale_den=1\n"); fclose(vncconfig); fprintf(regfile,"REGEDIT4\n\n"); fprintf(regfile,"[HKEY_LOCAL_MACHINE\\SOFTWARE\\ORL\\WinVNC3\\Default]\n"); fprintf(regfile,"\"Password\"=hex:%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", (unsigned char) encrypted[0], (unsigned char) encrypted[1], (unsigned char) encrypted[2], (unsigned char) encrypted[3], (unsigned char) encrypted[4], (unsigned char) encrypted[5], (unsigned char) encrypted[6], (unsigned char) encrypted[7]); fclose(regfile); return 0; } else if ( strncmp(argv[1],"-h",3)==0) { if ( argc!=4) goto help; strncpy(plaintext,argv[3],15); //printf("Plaintext is %s\n",plaintext); vncEncryptPasswd(plaintext,encrypted); snprintf(filename,1024,"%s.vnc",argv[2]); vncconfig=fopen(filename,"wt"); if (!vncconfig) {perror("Couldn't create .vnc file"); exit(1);} fprintf(vncconfig,"[connection]\n"); fprintf(vncconfig,"host=%s\n",argv[2]); fprintf(vncconfig,"port=5900\n"); fprintf(vncconfig,"password="); fprintf(vncconfig,"%02x%02x%02x%02x%02x%02x%02x%02x\n", (unsigned char) encrypted[0], (unsigned char) encrypted[1], (unsigned char) encrypted[2], (unsigned char) encrypted[3], (unsigned char) encrypted[4], (unsigned char) encrypted[5], (unsigned char) encrypted[6], (unsigned char) encrypted[7]); fprintf(vncconfig,"[options]\n"); fprintf(vncconfig,"use_encoding_0=1\n"); fprintf(vncconfig,"use_encoding_1=1\n"); fprintf(vncconfig,"use_encoding_2=1\n"); fprintf(vncconfig,"use_encoding_3=1\n"); fprintf(vncconfig,"use_encoding_4=1\n"); fprintf(vncconfig,"use_encoding_5=1\n"); fprintf(vncconfig,"preferred_encoding=5\n"); fprintf(vncconfig,"restricted=0\n"); fprintf(vncconfig,"viewonly=0\n"); fprintf(vncconfig,"fullscreen=0\n"); fprintf(vncconfig,"8bit=0\n"); fprintf(vncconfig,"shared=0\n"); fprintf(vncconfig,"swapmouse=0\n"); fprintf(vncconfig,"belldeiconify=0\n"); fprintf(vncconfig,"emulate3=1\n"); fprintf(vncconfig,"emulate3timeout=100\n"); fprintf(vncconfig,"emulate3fuzz=4\n"); fprintf(vncconfig,"disableclipboard=0\n"); fprintf(vncconfig,"localcursor=1\n"); fprintf(vncconfig,"scale_num=1\n"); fprintf(vncconfig,"scale_den=1\n"); fclose(vncconfig); } else if ( strncmp(argv[1],"-d",3)==0) { if ( argc!=3) goto help; sscanf(argv[2],"%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x", &xncrypted[0],&xncrypted[1],&xncrypted[2],&xncrypted[3],&xncrypted[4],&xncrypted[5],&xncrypted[6],&xncrypted[7]); encrypted[0]=(unsigned char) xncrypted[0]; encrypted[1]=(unsigned char) xncrypted[1]; encrypted[2]=(unsigned char) xncrypted[2]; encrypted[3]=(unsigned char) xncrypted[3]; encrypted[4]=(unsigned char) xncrypted[4]; encrypted[5]=(unsigned char) xncrypted[5]; encrypted[6]=(unsigned char) xncrypted[6]; encrypted[7]=(unsigned char) xncrypted[7]; decoded=vncDecryptPasswd(encrypted); if ( !decoded) {fprintf(stderr,"Couldn't decrypted that password\n"); exit(1);} else printf("Password=\"%s\" (without quotes) hex:%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n",decoded, (unsigned char) decoded[0], (unsigned char) decoded[1], (unsigned char) decoded[2], (unsigned char) decoded[3], (unsigned char) decoded[4],(unsigned char) decoded[5], (unsigned char) decoded[6], (unsigned char) decoded[7]); return 0; } else if ( strncmp(argv[1],"-R",3)==0) { if ( argc!=3) goto help; strncpy(plaintext,argv[2],15); vncEncryptPasswd(plaintext,encrypted); puts("REGEDIT4"); puts(""); puts("[HKEY_LOCAL_MACHINE\\SOFTWARE\\ORL\\WinVNC3\\Default]"); printf("\"Password\"=hex:%02x,%02x,%02x,%02x,%02x,%02x,%02x,%02x\n", (unsigned char) encrypted[0], (unsigned char) encrypted[1], (unsigned char) encrypted[2], (unsigned char) encrypted[3], (unsigned char) encrypted[4], (unsigned char) encrypted[5], (unsigned char) encrypted[6], (unsigned char) encrypted[7]); return 0; } else { help: fprintf(stderr,"\nVNC Password generator/[en|de]coder\n"); fprintf(stderr,"Use this at your own risk. No Warranty implied or otherwise provided.\n\n"); fprintf(stderr,"Copyright (C) 2002 Ray Arachelian, All Rights Reserved\n"); fprintf(stderr,"Released under the terms of the GNU Public License\n"); fprintf(stderr,"see http://www.gnu.org/licenses/gpl.html for licensing\n"); fprintf(stderr,"\nUsage %s command parameters:\n\n",argv[0]); fprintf(stderr," -d {hexstring i.e: 1a,2c,3d,4c,5e,6f,78,af} to decrypt a VNC password\n"); fprintf(stderr," -e {plaintext} to encrypt to hex VNC password with commas (as used in NT regedit)\n"); fprintf(stderr," -E {plaintext} to encrypt to hex VNC password without commas (as used in .vnc files)\n"); fprintf(stderr," -h {hostname} {plaintext} to create a vncviewer configuration file (hostname.vnc)\n"); fprintf(stderr," -H {hostname} {plaintext} to create a vncviewer configuration file\n and NT server registry file (hostname.vnc, hostname.reg)\n"); fprintf(stderr," -R {plaintext} to create a Win32 registry file with the encoded passwd\n\n"); fprintf(stderr,"i.e.\n%s -H myhost password\n will create myhost.vnc and myhost.reg\n\n",argv[0]); fprintf(stderr,"You'd copy the myhost.reg to myhost, double click on it, stop and start the VNC server\n"); fprintf(stderr,"service.\n"); fprintf(stderr,"You'd run vncviewer /config myhost.vnc under a Win32 client to connect to myhost.\n"); fprintf(stderr,"You'd run vncviewer -config myhost.vnc under a unix client to connect to myhost.\n"); exit(0); } return 0; }