Esempio n. 1
0
/*
 * process_ecma_array The onMetaData sub type named ECMA Array
 * data, the data will be parsed
 *
 * return the offset of the data
*/
int process_ecma_array(unsigned char *data)
{
    int ecma_array_len = 0;
    int keyname_len = 0;
    unsigned char keyname[32];
    unsigned char *p = data;
    int i = 0;

    ecma_array_len = get_key_len(p);
    p += 4;

    for (i = 0; i < ecma_array_len; i++) {
        keyname_len = get_string_len(p);
        p += 2;
        memset(keyname, 0, sizeof(keyname));
        strncpy((char *)keyname, (const char *)p, keyname_len);
        fprintf(stdout, "keyname = [%s]\n", keyname);
        p += keyname_len;
        p += script_type_parse(p);
    }

    if (*p == 0 && *(p + 1) == 0 && *(p + 2) == 9) {
        p += 3;
    }
    return p - data;
}
void break_repeating_key_xor(const unsigned char *in, size_t in_len,
		unsigned char *key, size_t key_max_len, unsigned int *key_len,
		unsigned char *out)
{
	unsigned int i, j;
	unsigned int base_limit, limit, leftover;
	unsigned char *buf;

	*key_len = get_key_len(in, in_len, key_max_len);
	base_limit = in_len / *key_len;
	leftover = in_len % *key_len;
	buf = malloc(base_limit + !!leftover);
	if (!buf)
		exit(1);
	for (i = 0; i < *key_len; i++) {
		limit = base_limit + (leftover > i);
		for (j = 0; j < limit; j++)
			out[j] = in[j * *key_len + i];
		key[i] = crack_single_byte_xor(out, limit, buf);
	}
	free(buf);
	repeating_key_xor(in, in_len, key, *key_len, out);
}