devicesal
This is an old revision of the document!
Native modules:
// CBC Encrypt/Decrypt. The OUT buffer must be pre-allocated.
// Block size of the cipher is 64 bit, key length is 160 bit.
blob_t
native::ocmmod (blob_t in, blob_t out, blob_t key, int len, int decrypt)
{
if (decrypt)
ocmmod_cbc_decrypt (in, out, key, len);
else
ocmmod_cbc_encrypt (in, out, key, blob_len (in));
return out;
}
int
dev_0x01 (blob_t someblob, bool_t somebool)
{
int res;
if (somebool == 1)
{
res = dev_0x00 (someblob);
if (res != 0)
return res;
}
int some_nr = (unsigned) SubBlob (someblob, 0, 4);
int some_nr2 = (unsigned) dev_0xd1 (some_nr);
res = "localekb" (some_nr2);
// FIXME: Don't know the stack layout after this.
if (res != 0)
return; // but what?
blob_t someblob2; // probably from localekb
int some_nr3 = (signed) SubBlob (someblob2, 0, 4) + 1;
vector<blob_t> vec;
do
{
vec.append (SubBlob (some_nr3 * 16, 24));
}
while (some_nr3-- >= 0);
int some_nr3 = (signed) SubBlob (someblob2, 0, 4);
res = dev_0xc1 (some_nr3);
if (res != 0)
return res;
int some_nr4 = (signed) SubBlob (someblob2, 16, 4);
if (some_nr3 == some_nr4)
return 0;
else
return 8;
// is vec returned as well? it's still on the stack.
}
int
dev_0xb7 (any_t thing)
{
if (get_type (thing) != TYPE_BLOB)
return 0;
if (thing[2] == 0x31)
return 2;
else
{
if (! strncmp (thing, "\x31\x31", 2))
return 1;
else
return 0;
}
}
block_t
dev_0xd1 (int nr)
{
if (nr > 1)
{
0x80 ("Invalid version...");
return 0;
}
else
{
return 00 81 00 00 00 00 00 00;
}
}
// Some decrypt function.
any_t
dev_0xd8 (blob_t data1, blob_t data2)
{
blob_t data3 = data2 XOR concat (dict[0xfc], dict[0xfc]);
dict[0xdb] = data3;
blob_t shasum = SHA1 (data3[0..1f]);
blob_t iv = shasum[0..7];
blob_t key = shasum[8..15]
blob_t dec_data1 = DES_CBC_Decrypt (data1, iv, key, 0xd8_DESDecrypt);
// Decrypt with ocmmod cipher.
int len = blob_length (dec_data);
// Round up to multiple of 8.
len = (len + 7) / 8 * 8;
blob_t out = repeat_nul (len);
out = native::ocmmod (dec_data1, out, shasum, len, 1);
return decode_asn1 (out);
}
devicesal.1241689100.txt.gz · Last modified: 2009/05/07 09:38 by marcus
