Compare commits
	
		
			7 Commits
		
	
	
		
			61ba182b13
			...
			a0128d323b
		
	
	| Author | SHA1 | Date | |
|---|---|---|---|
|  | a0128d323b | ||
|  | cc6cd1ee6e | ||
|  | 701881b0b2 | ||
|  | 645ffec880 | ||
|  | 57022e534c | ||
|  | d6964e25c4 | ||
|  | 1202a2156f | 
							
								
								
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								.gitignore
									
									
									
									
										vendored
									
									
								
							| @ -1,4 +1,5 @@ | |||||||
| *.gipu | *.gipu | ||||||
| *.out | *.out | ||||||
| *.elf | *.elf | ||||||
|  | *.pasticciotto | ||||||
| .vscode/ | .vscode/ | ||||||
|  | |||||||
| @ -1,7 +1,6 @@ | |||||||
| import sys | import sys | ||||||
| import re | import re | ||||||
| import struct | import struct | ||||||
| import IPython |  | ||||||
| import copy | import copy | ||||||
| import argparse | import argparse | ||||||
| 
 | 
 | ||||||
|  | |||||||
| @ -1,5 +1,5 @@ | |||||||
| #include "debug.h" | #include "../vm/debug.h" | ||||||
| #include "vm.h" | #include "../vm/vm.h" | ||||||
| #include <fstream> | #include <fstream> | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
							
								
								
									
										111
									
								
								polictf/asms/decrypt.pstc
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										111
									
								
								polictf/asms/decrypt.pstc
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,111 @@ | |||||||
|  | def datastrlen: | ||||||
|  | ############### | ||||||
|  | # r0 = offset of str in data | ||||||
|  | # retval (r0) = strlen | ||||||
|  | ############### | ||||||
|  | push r1 | ||||||
|  | push r2 | ||||||
|  | push r3 | ||||||
|  | movr s2, r0 | ||||||
|  | movi s1, 0 | ||||||
|  | lodr s0, s2 | ||||||
|  | cmpb s0, 0 | ||||||
|  | jpei exit | ||||||
|  | loop: | ||||||
|  | movi s2, 0 | ||||||
|  | addi s1, 1 | ||||||
|  | addr s2, s1 | ||||||
|  | lodr s0, s2 | ||||||
|  | cmpb s0, 0 | ||||||
|  | jpni loop | ||||||
|  | exit: | ||||||
|  | movr r0, s1 | ||||||
|  | poop r3 | ||||||
|  | poop r2 | ||||||
|  | poop r1 | ||||||
|  | retn | ||||||
|  | 
 | ||||||
|  | def round: # round(uint16_t text[2]) | ||||||
|  | ################# | ||||||
|  | # r0 = offset of text[0] in data | ||||||
|  | # r1 = offset of text[1] in data | ||||||
|  | # r2 = text[0] | ||||||
|  | # r3 = text[1] | ||||||
|  | # retval = void | ||||||
|  | ################ | ||||||
|  | push r1 | ||||||
|  | push r2 | ||||||
|  | push r3 | ||||||
|  | lodr r2, r0 # text[0] | ||||||
|  | lodr r3, r1 # text[1] | ||||||
|  | movi s0, 0 # i | ||||||
|  | movi s1, 0 # sum | ||||||
|  | loop: | ||||||
|  | push s0 # saving i | ||||||
|  | # s0 and s1 will be used as tmps | ||||||
|  | ######### | ||||||
|  | # calc v1 | ||||||
|  | ######### | ||||||
|  | movr s0, r2 | ||||||
|  | shli s0, 4 | ||||||
|  | addi s0, 0x7275 # s0 = (text[0] << 4) + k2 | ||||||
|  | movr s1, r2 | ||||||
|  | xorr s0, s1 # s0 = ((text[0] << 4) + k2) ^ text[0] | ||||||
|  | push s0 | ||||||
|  | movr s0, r2 | ||||||
|  | shri s0, 5 | ||||||
|  | addi s0, 0x6e73 # s0 = (text[0] >> 5) + k3 | ||||||
|  | poop s1 | ||||||
|  | xorr s0, s1 # s0 = ((text[0] << 4) + k2) ^ text[0] ^ ((text[0] >> 5) + k3) | ||||||
|  | subr r3, s0 # r3 -= s0 | ||||||
|  | ######### | ||||||
|  | # calc v0 | ||||||
|  | ######### | ||||||
|  | movr s0, r3 | ||||||
|  | shli s0, 4 | ||||||
|  | addi s0, 0x7065 # s0 = (text[1] << 4) + k0 | ||||||
|  | movr s1, r3 | ||||||
|  | xorr s0, s1 # s0 = ((text[1] << 4) + k0) ^ text[1] | ||||||
|  | push s0 | ||||||
|  | movr s0, r3 | ||||||
|  | shri s0, 5 | ||||||
|  | addi s0, 0x7065 # s0 = (text[1] >> 5) + k1 | ||||||
|  | poop s1 | ||||||
|  | xorr s0, s1 # s0 = ((text[1] << 4) + k0) ^ text[1] ^ ((text[1] >> 5) + k1) | ||||||
|  | subr r2, s0 # r2 -= s0 | ||||||
|  | ###### | ||||||
|  | # end loop | ||||||
|  | ##### | ||||||
|  | poop s0 # restoring i | ||||||
|  | addi s0, 1 | ||||||
|  | cmpb s0, 127 # while (i < 128) | ||||||
|  | jpbi loop | ||||||
|  | # saving the values | ||||||
|  | strr r0, r2 | ||||||
|  | strr r1, r3 | ||||||
|  | poop r3 | ||||||
|  | poop r2 | ||||||
|  | poop r1 | ||||||
|  | retn | ||||||
|  | 
 | ||||||
|  | def main: | ||||||
|  | movi r0, 0 | ||||||
|  | call datastrlen | ||||||
|  | movr r2, r0 | ||||||
|  | movi s0, 0 | ||||||
|  | decrypt: | ||||||
|  | push s0 | ||||||
|  | movi r0, 0 | ||||||
|  | movi r1, 2 | ||||||
|  | addr r0, s0 | ||||||
|  | addr r1, s0 | ||||||
|  | call round | ||||||
|  | poop s0 | ||||||
|  | addi s0, 4 | ||||||
|  | cmpr s0, r2 | ||||||
|  | jpbi decrypt | ||||||
|  | lodi r0, 0 | ||||||
|  | lodi r1, 2 | ||||||
|  | lodi r2, 4 | ||||||
|  | lodi r3, 6 | ||||||
|  | shit | ||||||
| @ -53,7 +53,7 @@ shli s0, 4 | |||||||
| addi s0, 0x7065 # s0 = (text[1] << 4) + k0 | addi s0, 0x7065 # s0 = (text[1] << 4) + k0 | ||||||
| movr s1, r3 | movr s1, r3 | ||||||
| poop s3 # restoring sum in s3 | poop s3 # restoring sum in s3 | ||||||
| addr s1, s3 # s1 = text[1] + sum | #addr s1, s3 # s1 = text[1] + sum | ||||||
| push s3 # saving sum again | push s3 # saving sum again | ||||||
| xorr s0, s1 # s0 = ((text[1] << 4) + k0) ^ (text[1] + sum) | xorr s0, s1 # s0 = ((text[1] << 4) + k0) ^ (text[1] + sum) | ||||||
| push s0 | push s0 | ||||||
| @ -71,7 +71,7 @@ shli s0, 4 | |||||||
| addi s0, 0x7275 # s0 = (text[0] << 4) + k2 | addi s0, 0x7275 # s0 = (text[0] << 4) + k2 | ||||||
| movr s1, r2 | movr s1, r2 | ||||||
| poop s3 # restoring sum in s3 | poop s3 # restoring sum in s3 | ||||||
| addr s1, s3 # s1 = text[0] + sum | #addr s1, s3 # s1 = text[0] + sum | ||||||
| push s3 # saving sum again | push s3 # saving sum again | ||||||
| xorr s0, s1 # s0 = ((text[0] << 4) + k2) ^ (text[0] + sum) | xorr s0, s1 # s0 = ((text[0] << 4) + k2) ^ (text[0] + sum) | ||||||
| push s0 | push s0 | ||||||
| @ -118,7 +118,7 @@ addr r0, s0 | |||||||
| addr r1, s0 | addr r1, s0 | ||||||
| call round | call round | ||||||
| poop s0 | poop s0 | ||||||
| addi s0, 1 | addi s0, 4 | ||||||
| cmpr s0, r2 | cmpr s0, r2 | ||||||
| jpbi encrypt | jpbi encrypt | ||||||
| lodi r0, 0 | lodi r0, 0 | ||||||
| @ -1,4 +1,4 @@ | |||||||
| #include "../vm/vm.h" | #include "../../vm/vm.h" | ||||||
| #include <fstream> | #include <fstream> | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| #include <stdio.h> | #include <stdio.h> | ||||||
										
											Binary file not shown.
										
									
								
							| @ -1 +1 @@ | |||||||
| TheDataSectionHasBeenEncrypted | TheDataSectionHasBeenEncrypted!WhoAreYouGonnaCall?TheRuNasss! | ||||||
							
								
								
									
										1
									
								
								polictf/res/encrypteddatasection
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								polictf/res/encrypteddatasection
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1 @@ | |||||||
|  | Œê¾ªí Ðk™R%¹æØÿùé’zÅÄ~*ìg2E$ÐLdYí¦xþѼàØ:ùûùùn\RXF<58>UXE! | ||||||
| @ -1,5 +1,5 @@ | |||||||
| #include "../vm/vm.h" | #include "../../vm/vm.h" | ||||||
| #include "../vm/debug.h" | #include "../../vm/debug.h" | ||||||
| #include <fstream> | #include <fstream> | ||||||
| #include <iostream> | #include <iostream> | ||||||
| #include <stdint.h> | #include <stdint.h> | ||||||
| @ -25,13 +25,18 @@ void gen_random(uint8_t *s, const int len) { | |||||||
| } | } | ||||||
| 
 | 
 | ||||||
| unsigned char encrypted_data[] = { | unsigned char encrypted_data[] = { | ||||||
|     0xcc, 0x8d, 0x5a, 0xcc, 0x73, 0xb5, 0xf2, 0xa3, 0xf3, 0x92, |   0x8c, 0xea, 0xbe, 0xaa, 0xed, 0xa0, 0xd0, 0x6b, 0x99, 0x1c, 0x52, 0x25, | ||||||
|     0xa8, 0x8f, 0x2f, 0xf1, 0x3e, 0xf4, 0x69, 0x00, 0x4a, 0xcb, |   0xb9, 0xe6, 0xd8, 0xff, 0xf9, 0xe9, 0x92, 0x7a, 0x1c, 0xc5, 0xc4, 0x7e, | ||||||
|     0xed, 0xc4, 0x57, 0x9b, 0xf6, 0x9a, 0x78, 0x46, 0x83, 0xe9}; |   0x2a, 0xec, 0x67, 0x32, 0x1f, 0x45, 0x24, 0xd0, 0x4c, 0x7f, 0x15, 0x64, | ||||||
| unsigned int encrypted_data_len = 30; |   0x59, 0xed, 0xa6, 0x78, 0xfe, 0xad, 0xd1, 0xbc, 0xe0, 0xd8, 0x3a, 0xf9, | ||||||
|  |   0xfb, 0xf9, 0xf9, 0x6e, 0x5c, 0x52, 0x58, 0x46, 0x8d, 0x55, 0x58, 0x45, | ||||||
|  |   0x21 | ||||||
|  | }; | ||||||
|  | unsigned int encrypted_data_len = 61; | ||||||
|  | 
 | ||||||
| 
 | 
 | ||||||
| int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | ||||||
|   uint8_t *key = new uint8_t[KEYLEN], *decdatasec = new uint8_t[DATAKEYLEN], |   uint8_t *key = new uint8_t[KEYLEN], *decdatasec = new uint8_t[encrypted_data_len], | ||||||
|           *flag = new uint8_t[DATAKEYLEN]; |           *flag = new uint8_t[DATAKEYLEN]; | ||||||
|   uint8_t *clientcode; |   uint8_t *clientcode; | ||||||
|   uint8_t i; |   uint8_t i; | ||||||
| @ -40,42 +45,58 @@ int main(int argc, char *argv[]) { | |||||||
| 
 | 
 | ||||||
|   gen_random(key, KEYLEN); |   gen_random(key, KEYLEN); | ||||||
|   printf("Use this: \"%s\"\n", key); |   printf("Use this: \"%s\"\n", key); | ||||||
|  |   fflush(stdout); | ||||||
|   printf("How much data are you sending me?\n"); |   printf("How much data are you sending me?\n"); | ||||||
|  |   fflush(stdout); | ||||||
|   scanf("%d", &clientcodesize); |   scanf("%d", &clientcodesize); | ||||||
|   printf("Go ahead then!\n"); |   printf("Go ahead then!\n"); | ||||||
|  |   fflush(stdout); | ||||||
|   clientcode = new uint8_t[clientcodesize]; |   clientcode = new uint8_t[clientcodesize]; | ||||||
|   bytesread = read(0, clientcode, clientcodesize); |   bytesread = read(0, clientcode, clientcodesize); | ||||||
|   if (bytesread != clientcodesize) { |   if (bytesread != clientcodesize) { | ||||||
|     printf("ERROR! Couldn't read everything!\n"); |     printf("ERROR! Couldn't read everything!\n"); | ||||||
|  |     fflush(stdout); | ||||||
|     exit(1); |     exit(1); | ||||||
|   } |   } | ||||||
|   VM vm(key, clientcode, clientcodesize); |   VM vm(key, clientcode, clientcodesize); | ||||||
|   vm.as.insData(encrypted_data, encrypted_data_len); |   vm.as.insData(encrypted_data, encrypted_data_len); | ||||||
|  |   printf("BEFORE:\n"); | ||||||
|  |   for (i = 0; i < DATAKEYLEN; i++) { | ||||||
|  |     fprintf(stdout, "buf[%d] = 0x%02x\n", i, vm.as.data[i]); | ||||||
|  |   } | ||||||
|   vm.run(); |   vm.run(); | ||||||
| 
 | 
 | ||||||
|   datap = fopen("./res/decrypteddatasection.txt", "r"); |   datap = fopen("../res/decrypteddatasection.txt", "r"); | ||||||
|   if (datap == NULL) { |   if (datap == NULL) { | ||||||
|       printf("Couldn't open decrypteddatasection.txt!\n"); |       printf("Couldn't open decrypteddatasection.txt!\n"); | ||||||
|  |       fflush(stdout); | ||||||
|       exit(1); |       exit(1); | ||||||
|   } |   } | ||||||
|   fscanf(datap, "%s", decdatasec); |   fscanf(datap, "%s", decdatasec); | ||||||
|   fclose(datap); |   fclose(datap); | ||||||
| 
 | 
 | ||||||
|  |   for (i = 0; i < DATAKEYLEN; i++) { | ||||||
|  |     fprintf(stdout, "buf[%d] = 0x%02x\n", i, vm.as.data[i]); | ||||||
|  |   } | ||||||
|   for (i = 0; i < DATAKEYLEN; i++) { |   for (i = 0; i < DATAKEYLEN; i++) { | ||||||
|     if (vm.as.data[i] != decdatasec[i]) { |     if (vm.as.data[i] != decdatasec[i]) { | ||||||
|         DBG_INFO(("Checking data[%d]..\n", i)); |         printf("Checking data[%d]..\n", i); | ||||||
|  |         fflush(stdout); | ||||||
|       printf("Nope!\n"); |       printf("Nope!\n"); | ||||||
|  |       fflush(stdout); | ||||||
|       exit(1); |       exit(1); | ||||||
|     } |     } | ||||||
|   } |   } | ||||||
| 
 | 
 | ||||||
|   flagp = fopen("./res/flag.txt", "r"); |   flagp = fopen("../res/flag.txt", "r"); | ||||||
|   if (flagp == NULL) { |   if (flagp == NULL) { | ||||||
|       printf("Couldn't open flag.txt!\n"); |       printf("Couldn't open flag.txt!\n"); | ||||||
|  |       fflush(stdout); | ||||||
|       exit(1); |       exit(1); | ||||||
|   } |   } | ||||||
|   fscanf(flagp, "%s", flag); |   fscanf(flagp, "%s", flag); | ||||||
|   fclose(flagp); |   fclose(flagp); | ||||||
|   printf("Congratulations!\nThe flag is: %s\n", flag); |   printf("Congratulations!\nThe flag is: %s\n", flag); | ||||||
|  |   fflush(stdout); | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
							
								
								
									
										16
									
								
								polictf/server/test.py
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										16
									
								
								polictf/server/test.py
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,16 @@ | |||||||
|  | from pwn import * | ||||||
|  | import subprocess | ||||||
|  | 
 | ||||||
|  | key_re = re.compile(".*\"(.*)\".*") | ||||||
|  | r = remote("127.0.0.1", 8888) | ||||||
|  | 
 | ||||||
|  | first = r.recv() | ||||||
|  | key = key_re.match(first).group(1) | ||||||
|  | print("Using key: {}".format(key)) | ||||||
|  | subprocess.check_call(["python3", "../../assembler/assembler.py", "{}".format(key), "../asms/decrypt.pstc", "./out.pasticciotto"]) | ||||||
|  | with open("./out.pasticciotto") as f: | ||||||
|  |     data = f.read() | ||||||
|  | r.send("{}\n".format(len(data))) | ||||||
|  | print(r.recv()) | ||||||
|  | r.send("{}\n".format(data)) | ||||||
|  | print(r.recv(100000)) | ||||||
							
								
								
									
										40
									
								
								polictf/tea_cversion/tea-decrypt.c
									
									
									
									
									
										Normal file
									
								
							
							
						
						
									
										40
									
								
								polictf/tea_cversion/tea-decrypt.c
									
									
									
									
									
										Normal file
									
								
							| @ -0,0 +1,40 @@ | |||||||
|  | #include <stdint.h> | ||||||
|  | #include <stdio.h> | ||||||
|  | #include <stdlib.h> | ||||||
|  | #include <string.h> | ||||||
|  | #include <unistd.h> | ||||||
|  | 
 | ||||||
|  | void decrypt(uint16_t *v) { | ||||||
|  |   uint16_t v0 = v[0], v1 = v[1], i; | ||||||
|  |   uint16_t k0 = 0x7065;                           // "pe"
 | ||||||
|  |   uint16_t k1 = 0x7065;                           // "pe"
 | ||||||
|  |   uint16_t k2 = 0x7275;                           // "ru"
 | ||||||
|  |   uint16_t k3 = 0x6e73;                           // "ns"
 | ||||||
|  |   for (i = 0; i < 128; i++) { | ||||||
|  |     v1 -= ((v0 << 4) + k2) ^ (v0) ^ ((v0 >> 5) + k3); | ||||||
|  |     v0 -= ((v1 << 4) + k0) ^ (v1) ^ ((v1 >> 5) + k1); | ||||||
|  |   } | ||||||
|  |   v[0] = v0; | ||||||
|  |   v[1] = v1; | ||||||
|  | } | ||||||
|  | 
 | ||||||
|  | int main(int argc, char *argv[]) { | ||||||
|  |   uint8_t buf[1000]; | ||||||
|  |   uint32_t buflen, i; | ||||||
|  | 
 | ||||||
|  |   fprintf(stdout, "Length of the string?\n"); | ||||||
|  |   fflush(stdout); | ||||||
|  |   fscanf(stdin, "%d", &buflen); | ||||||
|  |   printf("Length: %d\n", buflen); | ||||||
|  |   read(0, buf, buflen); | ||||||
|  | 
 | ||||||
|  |   for (i = 0; i < buflen && i + 2 * (sizeof(uint16_t)) <= buflen; | ||||||
|  |        i += sizeof(uint32_t)) { | ||||||
|  |     decrypt((uint16_t *)&buf[i]); | ||||||
|  |   } | ||||||
|  |   for (i = 0; i < buflen; i++) { | ||||||
|  |     fprintf(stdout, "buf[%d] = 0x%02x\n", i, buf[i]); | ||||||
|  |   } | ||||||
|  |   printf("STRING: %s\n", buf); | ||||||
|  |   fflush(stdout); | ||||||
|  | } | ||||||
| @ -5,21 +5,15 @@ | |||||||
| #include <unistd.h> | #include <unistd.h> | ||||||
| 
 | 
 | ||||||
| void encrypt(uint16_t *v) { | void encrypt(uint16_t *v) { | ||||||
|   uint16_t v0 = v[0], v1 = v[1], sum = 0, i; /* set up */ |   uint16_t v0 = v[0], v1 = v[1], i; | ||||||
|   uint16_t delta = 0x626f; |  | ||||||
|   uint16_t k0 = 0x7065; // "pe"
 |   uint16_t k0 = 0x7065; // "pe"
 | ||||||
|   uint16_t k1 = 0x7065; // "pe"
 |   uint16_t k1 = 0x7065; // "pe"
 | ||||||
|   uint16_t k2 = 0x7275; // "ru"
 |   uint16_t k2 = 0x7275; // "ru"
 | ||||||
|   uint16_t k3 = 0x6e73; // "ns"
 |   uint16_t k3 = 0x6e73; // "ns"
 | ||||||
|   // printf("v0: 0x%x, v1: 0x%x\n", v0, v1);
 |  | ||||||
|   for (i = 0; i < 128; i++) { |   for (i = 0; i < 128; i++) { | ||||||
|     sum += delta; |     v0 += ((v1 << 4) + k0) ^ (v1) ^ ((v1 >> 5) + k1); | ||||||
|     v0 += ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); |     v1 += ((v0 << 4) + k2) ^ (v0) ^ ((v0 >> 5) + k3); | ||||||
|     v1 += ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); |  | ||||||
|     // printf("Intermediate v0: 0x%x | v1: 0x%x\n", v0, v1);
 |  | ||||||
|   } |   } | ||||||
|   // printf("SUM: 0x%x\n", sum);
 |  | ||||||
|   // printf("v0: 0x%x, v1: 0x%x\n", v0, v1);
 |  | ||||||
|   v[0] = v0; |   v[0] = v0; | ||||||
|   v[1] = v1; |   v[1] = v1; | ||||||
| } | } | ||||||
| @ -27,6 +21,7 @@ void encrypt(uint16_t *v) { | |||||||
| int main(int argc, char *argv[]) { | int main(int argc, char *argv[]) { | ||||||
|   uint8_t *buf; |   uint8_t *buf; | ||||||
|   uint32_t buflen, i; |   uint32_t buflen, i; | ||||||
|  |   FILE *f; | ||||||
|   if (argc != 2) { |   if (argc != 2) { | ||||||
|     printf("Usage: %s text_to_encrypt", argv[0]); |     printf("Usage: %s text_to_encrypt", argv[0]); | ||||||
|     exit(1); |     exit(1); | ||||||
| @ -34,11 +29,12 @@ int main(int argc, char *argv[]) { | |||||||
|   buflen = strlen(argv[1]); |   buflen = strlen(argv[1]); | ||||||
|   buf = (uint8_t *)malloc(buflen); |   buf = (uint8_t *)malloc(buflen); | ||||||
|   memcpy(buf, argv[1], buflen); |   memcpy(buf, argv[1], buflen); | ||||||
|   for (i = 0; i < buflen; i++) { | 
 | ||||||
|  |   for (i = 0; i < buflen && i + 2 * (sizeof(uint16_t)) <= buflen; | ||||||
|  |        i += sizeof(uint32_t)) { | ||||||
|     encrypt((uint16_t *)&buf[i]); |     encrypt((uint16_t *)&buf[i]); | ||||||
|   } |   } | ||||||
|   for (i = 0; i < buflen; i++) { | 
 | ||||||
|     printf("%c", buf[i]); |   write(1, buf, buflen); | ||||||
|   } |  | ||||||
|   return 0; |   return 0; | ||||||
| } | } | ||||||
| @ -1,27 +0,0 @@ | |||||||
| #include <stdint.h> |  | ||||||
| #include <stdio.h> |  | ||||||
| #include <stdlib.h> |  | ||||||
| #include <unistd.h> |  | ||||||
| 
 |  | ||||||
| void decrypt(uint32_t *v, uint32_t *k) { |  | ||||||
|   uint32_t v0 = v[0], v1 = v[1], sum = 0xC6EF3720, i; /* set up */ |  | ||||||
|   uint32_t delta = 0x9e3779b9; /* a key schedule constant */ |  | ||||||
|   uint32_t k0 = k[0], k1 = k[1], k2 = k[2], k3 = k[3]; /* cache key */ |  | ||||||
|   for (i = 0; i < 32; i++) {                           /* basic cycle start */ |  | ||||||
|     v1 -= ((v0 << 4) + k2) ^ (v0 + sum) ^ ((v0 >> 5) + k3); |  | ||||||
|     v0 -= ((v1 << 4) + k0) ^ (v1 + sum) ^ ((v1 >> 5) + k1); |  | ||||||
|     sum -= delta; |  | ||||||
|   } /* end cycle */ |  | ||||||
|   v[0] = v0; |  | ||||||
|   v[1] = v1; |  | ||||||
| } |  | ||||||
| 
 |  | ||||||
| int main(int argc, char *argv[]) { |  | ||||||
|   if (argc != 3) { |  | ||||||
|       printf("Usage: %s text_to_decrypt key", argv[0]); |  | ||||||
|       exit(1); |  | ||||||
|   } |  | ||||||
|   decrypt((uint32_t*)argv[1], (uint32_t*)argv[2]); |  | ||||||
|   printf("Result: %s", argv[1]); |  | ||||||
|   return 0; |  | ||||||
| } |  | ||||||
							
								
								
									
										36
									
								
								vm/vm.cpp
									
									
									
									
									
								
							
							
						
						
									
										36
									
								
								vm/vm.cpp
									
									
									
									
									
								
							| @ -91,41 +91,7 @@ void VM::status(void) { | |||||||
|   DBG_SUCC(("VM Status:\n")); |   DBG_SUCC(("VM Status:\n")); | ||||||
|   DBG_SUCC(("~~~~~~~~~~\n")); |   DBG_SUCC(("~~~~~~~~~~\n")); | ||||||
|   for (i = R0; i <= SP; i++) { |   for (i = R0; i <= SP; i++) { | ||||||
|     switch (i) { |     DBG_INFO(("%s:\t0x%04x\n", getRegName(i), regs[i])); | ||||||
|     case R0: |  | ||||||
|       DBG_INFO(("R0:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case R1: |  | ||||||
|       DBG_INFO(("R1:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case R2: |  | ||||||
|       DBG_INFO(("R2:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case R3: |  | ||||||
|       DBG_INFO(("R3:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case S0: |  | ||||||
|       DBG_INFO(("S0:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case S1: |  | ||||||
|       DBG_INFO(("S1:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case S2: |  | ||||||
|       DBG_INFO(("S2:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case S3: |  | ||||||
|       DBG_INFO(("S3:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case IP: |  | ||||||
|       DBG_INFO(("IP:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case RP: |  | ||||||
|       DBG_INFO(("RP:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     case SP: |  | ||||||
|       DBG_INFO(("SP:\t0x%x\n", this->regs[i])); |  | ||||||
|       break; |  | ||||||
|     } |  | ||||||
|   } |   } | ||||||
|   DBG_INFO(("Flags: ZF = %d, CF = %d\n", flags.ZF, flags.CF)); |   DBG_INFO(("Flags: ZF = %d, CF = %d\n", flags.ZF, flags.CF)); | ||||||
|   DBG_SUCC(("~~~~~~~~~~\n")); |   DBG_SUCC(("~~~~~~~~~~\n")); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user