View Full Version : "Cinavia"/Verance BluRay audio watermark protection
jpsdr
10th March 2011, 16:14
No, it's the oposite. He searches to compare audio with cinavia with audio without, so, it's perfect.
Ghitulescu
10th March 2011, 16:54
And if one imagines that having the same audio in two tracks, w/ and w/o cinavia, can manage to cut cinavia out (like classical denoisers), s/he's naïve.
jpsdr
10th March 2011, 17:18
I think he first wants to analyse the tracks, to see if he can find something.
Ghitulescu
10th March 2011, 17:27
The algorithms are clearly described in the patents. One cannot blindly find out something so resilient to manipulations.
SamuriHL
10th March 2011, 17:39
Imagine if you have two stacks of hay. They're identical, except for a needle in one of them. So you compare them straw by straw looking for the needle. You have no idea what the needle looks like or where it is. That is the essense of what "comparing the tracks looking for 'cinavia'" is going to be like. You're looking for.....something. Some kind of "difference". With the belief and theory that you can isolate it somehow. Then, as the theory goes, you can "filter out" the Cinavia signal. :rolleyes: Not likely.
HOWEVER.....
The tracks AREN'T identical, are they? You're talking about an HD audio track on the blu-ray with Cinavia vs an AC3 or DTS lossy track on the DVD without. You think maybe you'll find "differences" in that comparison that aren't related to Cinavia? I'm gonna say yea, that's very likely.
In the end, blind comparisons aren't going to solve this problem. It'll take real reverse engineering and a LOT of effort.
Ghitulescu
10th March 2011, 17:57
Simplistic seen, yes. The problem is not to find the differences between track A and track B, but to reverse the algorithm for every affected BD. There are about 7 methods described, and of course their combinations.
A player must not decompile cinavia, and not remove it. Just identify it.
SamuriHL
10th March 2011, 18:16
Yup, that's correct. The key is definitely going to be to look at the detection side of that equation and figure out what it's looking for. Once you can do that, you can THEN identify the embedded Cinavia signal. But poking around in a track looking for something blindly....unless you have 1000 monkeys, it's unlikely. :D
setarip_old
10th March 2011, 18:29
As I've suggested previously, one can hopefully look forward to the recent hack of the PS3 yielding a permanent solution to the Verance/"Cinavia" protection...
SamuriHL
10th March 2011, 18:33
The problem with that is that I haven't seen any evidence that links the PS3 jailbreaking to anything Cinavia related. Have we heard of anyone anywhere looking at the PS3's BD player software component to try to figure out Cinavia? I haven't seen evidence of that. That's NOT to say no one's doing it, and perhaps keeping it secret, but, I've not heard of anyone doing it.
setarip_old
10th March 2011, 18:54
Have we heard of anyone anywhere looking at the PS3's BD player software component to try to figure out Cinavia?
I view this lack of public "detailed progress reports" to be a good thing. As I said in Post #664 of this thread:Not everyone operates in the glare of daylight ;>}
I also suggested to "xenex" that if he/she started a more technical thread than this one, arrangements should be made for any and all detailed true development work and communication regarding same to be done somewhere other than at the Doom9 Forum (With, perhaps, periodic generalized updates/progress reports posted to this thread)...
victorth
12th March 2011, 02:06
Perhaps this is a crazy idea, and if it is I won't be upset if you tell me so. But I was reading xenex's post #846 regarding AACS folders on DVDs that have Cinavia. Is it possible to create a counterfeit AACS folder? If so, and you've ripped a Cinavia-infected BluRay and down-converted to DVD format, could you put said counterfeit AACS folder on the DVD to trick out the player? It wouldn't actually remove Cinavia, but it would be one more way of getting around it.
SamuriHL
12th March 2011, 02:53
Can't create the AACS certificate. You'd need the private key used to create them and that's not available.
xenex
12th March 2011, 11:20
The program I have written here may be of interest to Linux programmers. Without the AACS_CCpriv key it is kind of useless, but it can verify the AACS certificate, hash table, and can build a new hash table. I wrote this program for my own edification. I'm still working on this, but maybe some people will find it interesting:
/* Experimental program to display/verify/examine AACS/ECDSA data on Cinavia-affected DVD's
* (c) 2011 xenex, Licensed under GNU GPL v2, see <http://www.gnu.org/licenses/> for details.
*
* You will need libssl-dev and libiso9660-dev installed
*
* compile with: g++ -o aacschk aacschk.c -lssl -liso9660 -Wall
*/
#define _FILE_OFFSET_BITS 64
#define _LARGEFILE64_SOURCE 1
#define _LARGEFILE_SOURCE 1
#define DVD_BLOCK_SIZE 2048
#define BUFMAX 5000
#define IFOMAX 300
// KNOWN key AACS_CCpub
#define AACS_CC_PUB_X "686795158131444840350934441718292981749606298444"
#define AACS_CC_PUB_Y "667926496774724305600543583224894590551199207"
// UNKNOWN key AACS_CCpriv
#define AACS_CC_PRV_X "000000000000000000000000000000000000000000000000"
#define AACS_CC_PRV_Y "000000000000000000000000000000000000000000000000"
#include <stdio.h>
#include <unistd.h>
#include <fcntl.h>
#include <cdio/iso9660.h>
#include <algorithm>
#include <string.h>
#include <cstring>
#include <openssl/sha.h>
#include <openssl/bn.h>
#include <openssl/evp.h>
#include <openssl/obj_mac.h>
#include <openssl/err.h>
#include <openssl/ec.h>
#include <openssl/ecdsa.h>
using namespace std;
void hprintf(unsigned char*, int);
unsigned long long read_aacs(int, iso9660_t *);
unsigned long long read_ifo(int, iso9660_t *);
unsigned long long read_video(int, iso9660_t *, unsigned long long);
EC_KEY *aacs_key();
EC_GROUP *aacs_group();
int main(int argc, char *argv[])
{
unsigned int i, j, k, l, fd, vobnum, dgst_len = 0;
unsigned int NHVcnt = 1;
off64_t disc_len;
unsigned long long pos, savpos, nhv, index, offset, vend = 0;
unsigned long long htvalues[500000];
unsigned char digest[EVP_MAX_MD_SIZE];
unsigned char * buffer;
unsigned char * hbuffer;
iso9660_t * p_iso;
//ECDSA Values
EC_KEY *eckey = NULL;
ECDSA_SIG *sig = ECDSA_SIG_new();
BIGNUM *pub_key_x = BN_new(); BN_dec2bn(&pub_key_x,AACS_CC_PUB_X); // AACS_CC_pubX
BIGNUM *pub_key_y = BN_new(); BN_dec2bn(&pub_key_y,AACS_CC_PUB_Y); // AACS_CC_pubY
const EC_GROUP *group;
EC_POINT *pub_key;
EVP_MD_CTX md_ctx;
//END ECDSA Values
if (!(buffer = (unsigned char *) malloc(BUFMAX*DVD_BLOCK_SIZE))) { printf("Main Buffer Allocation : FAIL!\n"); return 1; }
if (!(hbuffer = (unsigned char *) malloc(BUFMAX*DVD_BLOCK_SIZE))) { printf("Hash Buffer Allocation : FAIL!\n"); return 1; }
if (argc < 2) { printf("usage:\n\t %s <input iso> || <input device>\n", argv[0]); return 1; }
if ((fd = open(argv[1], O_RDONLY)) < 0) { printf("Open Input File : FAIL!\n"); return 1; }
if ((disc_len = lseek(fd, 0, SEEK_END)) < 0) { printf("Determine Input Size: FAIL!\n"); return 1; }
//Get the total block/sector size of the entire DVD/ISO
//printf("\nDVDBLOCKNUMBER: %d\n", (int)(disc_len / DVD_BLOCK_SIZE));
if ((p_iso = iso9660_open(argv[1])) == NULL) { printf("Open %s as ISO9660 : FAIL!\n", argv[1]); return 1; }
//Get the start LSN's for all IFO files
//for(i=0; i<100; i++) if(read_ifo(i,p_iso)) ; else { printf("END OF READ_IFO TEST\n\n"); break; }
/////////////////// WE FIRST READ IN AND SHA1-HASH THE HASH TABLE FILE /////////////////////////////
pos = read_aacs(2,p_iso);
if(pos != 0) {
lseek(fd, pos * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, hbuffer, DVD_BLOCK_SIZE);
nhv = hbuffer[1]*65536 + hbuffer[2]*256 + hbuffer[3];
lseek(fd, pos * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, hbuffer,((nhv+1)*8));
SHA1(hbuffer,(nhv+1)*8,digest);
printf("HASH TABLE SHA-1 DIGEST: "); hprintf(&digest[12],8);
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/////////// THIS WILL READ, DISPLAY, AND ECDSA SIGNATURE-VERIFY THE CERTIFICATE FILE ///////////////
pos = read_aacs(1,p_iso);
if(pos != 0) {
lseek(fd, pos * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, DVD_BLOCK_SIZE);
printf("\n");
printf("Certificate Type : "); hprintf(&buffer[0],1); printf("Reserved : "); hprintf(&buffer[1],1);
printf("Total # of Hash Units : "); hprintf(&buffer[2],4); printf("Total # of Layers : "); hprintf(&buffer[6],1);
printf("Layer_Number : "); hprintf(&buffer[7],1); printf("Number of Hash Units : "); hprintf(&buffer[8],4);
printf("Number of Digests : "); hprintf(&buffer[12],2); printf("Applicant ID : "); hprintf(&buffer[14],2);
printf("Content Sequence # : "); hprintf(&buffer[16],4); printf("Reserved : "); hprintf(&buffer[20],2);
printf("Reserved : "); hprintf(&buffer[22],2); printf("Len. Format Spec. Sec.: "); hprintf(&buffer[24],2);
printf("Reserved : "); hprintf(&buffer[26],2); printf("Content HTDigest : "); hprintf(&buffer[28],8);
printf("Signature Data 'R' : "); hprintf(&buffer[36],20); printf("Signature Data 'S' : "); hprintf(&buffer[56],20);
BN_bin2bn(buffer+36, 20, sig->r);
BN_bin2bn(buffer+56, 20, sig->s);
eckey = aacs_key();
group = EC_KEY_get0_group(eckey);
group = aacs_group();
pub_key = EC_POINT_new(group);
EC_POINT_set_affine_coordinates_GFp(group, pub_key, pub_key_x, pub_key_y, NULL);
EC_KEY_set_public_key(eckey, pub_key);
EVP_MD_CTX_init(&md_ctx);
EVP_DigestInit(&md_ctx, EVP_ecdsa());
EVP_DigestUpdate(&md_ctx, buffer, 36);
EVP_DigestFinal(&md_ctx, digest, &dgst_len);
printf(" -> %i <-\n",ECDSA_do_verify(digest, dgst_len, sig, eckey));
}
////////////////////////////////////////////////////////////////////////////////////////////////////
/////////////////////////////// THIS DISPLAY THE HASH TABLE FILE ///////////////////////////////////
printf("\n");
printf("NHV : "); hprintf(&hbuffer[0],4);
printf("Reserved : "); hprintf(&hbuffer[4],4);
nhv = hbuffer[1]*65536 + hbuffer[2]*256 + hbuffer[3];
//nhv = 32; //This can make the HV printout shorter. Comment it out for the full list
for(i=8; i<((nhv+1)*8); i+=8) { printf("HV : 0%05x : ",NHVcnt++); hprintf(&hbuffer[i],8); }
////////////////////////////////////////////////////////////////////////////////////////////////////
exit(1); // Code beyond this can re-create a hash table. Tested, and works perfectly.
NHVcnt = 1; //the hash value count starts at 1 (one)
//// Start with VIDEO_TS.IFO and VIDEO_TS.VOB (if there is one) first as per specification
pos = read_ifo(0,p_iso);
lseek(fd, pos * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, IFOMAX * DVD_BLOCK_SIZE);
l = 0;
i = (buffer[0xdc] << 24) | (buffer[0xdd] << 16) | (buffer[0xde] << 8) | (buffer[0xdf]) * DVD_BLOCK_SIZE;
if(i != 0) {
j = ((buffer[i] << 24) | (buffer[i+1] << 16) | (buffer[i+2] << 8) | (buffer[i+3])) + i;
for(i+=4; i<=j; i+=4) { k = ((buffer[i] << 24) | (buffer[i+1] << 16) | (buffer[i+2] << 8) | (buffer[i+3])); htvalues[l++] = k; }
pos = read_video(0,p_iso,vend); htvalues[l] = vend;
for(k=0; k<l; k++) { index = htvalues[k]; offset = htvalues[k+1]; nhv = (offset - index) * DVD_BLOCK_SIZE;
lseek(fd, (pos + index) * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, nhv); SHA1(buffer, nhv, digest);
printf("HV : 0%05x : ", NHVcnt++); hprintf(&digest[12],8); }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
for(vobnum = 1; vobnum<100; vobnum++) {
pos = read_ifo(vobnum,p_iso);
lseek(fd, pos * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, IFOMAX * DVD_BLOCK_SIZE);
l = 0;
i = (buffer[0xdc] << 24) | (buffer[0xdd] << 16) | (buffer[0xde] << 8) | (buffer[0xdf]) * DVD_BLOCK_SIZE;
if(i != 0) {
j = ((buffer[i] << 24) | (buffer[i+1] << 16) | (buffer[i+2] << 8) | (buffer[i+3])) + i;
for(i+=4; i<=j; i+=4) { k = ((buffer[i] << 24) | (buffer[i+1] << 16) | (buffer[i+2] << 8) | (buffer[i+3])); htvalues[l++] = k; }
pos = read_video(vobnum * 10,p_iso,vend); htvalues[l] = vend;
for(k=0; k<l; k++) { index = htvalues[k]; offset = htvalues[k+1]; nhv = (offset - index) * DVD_BLOCK_SIZE;
lseek(fd, (pos + index) * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, nhv); SHA1(buffer, nhv, digest);
printf("HV : 0%05x : ", NHVcnt++); hprintf(&digest[12],8); }
}
///////////////////////////////////////////////////////////////////////////////////////////////////////////////////////
pos = read_ifo(vobnum,p_iso);
lseek(fd, pos * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, IFOMAX * DVD_BLOCK_SIZE);
l = 0;
i = (buffer[0xe4] << 24) | (buffer[0xe5] << 16) | (buffer[0xe6] << 8) | (buffer[0xe7]) * DVD_BLOCK_SIZE;
j = ((buffer[i] << 24) | (buffer[i+1] << 16) | (buffer[i+2] << 8) | (buffer[i+3])) + i;
for(i+=4; i<=j; i+=4) { k = ((buffer[i] << 24) | (buffer[i+1] << 16) | (buffer[i+2] << 8) | (buffer[i+3])); htvalues[l++] = k; }
pos = read_video((vobnum*10+1),p_iso,vend);
for(unsigned int x=(vobnum*10+9); x>=(vobnum*10+1); x--) { if((read_video(x,p_iso,vend))) {
savpos = (vend + read_video(x,p_iso,vend)); break; }}
vend = savpos - pos;
htvalues[l] = vend;
for(k=0; k<l; k++) { index = htvalues[k]; offset = htvalues[k+1]; nhv = (offset - index) * DVD_BLOCK_SIZE;
lseek(fd, (pos + index) * DVD_BLOCK_SIZE, SEEK_SET);
read(fd, buffer, nhv); SHA1(buffer, nhv, digest);
printf("HV : 0%05x : ", NHVcnt++); hprintf(&digest[12],8); }
}
return 0;
}
void hprintf(unsigned char* data, int length) { int ptr = 0; for(;ptr < length;ptr++) printf("%02x",(unsigned char)*(data+ptr)); printf("\n"); }
unsigned long long read_aacs(int ft, iso9660_t *p_iso)
{
CdioList_t *p_entlist;
CdioListNode_t *p_entnode;
unsigned long long aacslsn = 0;
p_entlist = iso9660_ifs_readdir (p_iso, "/AACS/");
if( !p_entlist) p_entlist = iso9660_ifs_readdir (p_iso, "/aacs/");
if( !p_entlist) { printf("No AACS Folder Found!\n"); return 0; }
if (p_entlist) {
_CDIO_LIST_FOREACH (p_entnode, p_entlist)
{
char filename[512];
iso9660_stat_t *p_statbuf = (iso9660_stat_t *) _cdio_list_node_data (p_entnode);
iso9660_name_translate(p_statbuf->filename, filename);
if(! strcmp(filename,"css_content_cert.aacs") && ft==1) aacslsn=p_statbuf->lsn;
if(! strcmp(filename,"css_content_hash_table.aacs") && ft==2) aacslsn=p_statbuf->lsn;
}
_cdio_list_free (p_entlist, true);
}
return aacslsn;
}
unsigned long long read_ifo(int ft, iso9660_t *p_iso)
{
CdioList_t *p_entlist;
CdioListNode_t *p_entnode;
unsigned long long ifolsn=NULL;
char filename[512], wfilename[512] = "video_ts.ifo";
if(ft > 0) sprintf(wfilename, "%s%02i%s", "vts_", ft, "_0.ifo");
p_entlist = iso9660_ifs_readdir (p_iso, "/VIDEO_TS/");
if( !p_entlist) p_entlist = iso9660_ifs_readdir (p_iso, "/video_ts/");
if( !p_entlist) { printf("No VIDEO_TS Folder Found!\n"); return 0; }
if (p_entlist) {
_CDIO_LIST_FOREACH (p_entnode, p_entlist)
{
iso9660_stat_t *p_statbuf = (iso9660_stat_t *) _cdio_list_node_data (p_entnode);
iso9660_name_translate(p_statbuf->filename, filename);
if(! strcmp(filename,wfilename) && ft== 0) { ifolsn=p_statbuf->lsn; }
if(! strcmp(filename,wfilename) && ft > 0) { ifolsn=p_statbuf->lsn; }
}
_cdio_list_free (p_entlist, true);
}
if(ifolsn) { return ifolsn; }
return 0;
}
unsigned long long read_video(int ft, iso9660_t *p_iso, unsigned long long vts_end)
{
CdioList_t *p_entlist;
CdioListNode_t *p_entnode;
unsigned long long vidlsn = 0;
p_entlist = iso9660_ifs_readdir (p_iso, "/VIDEO_TS/");
if( !p_entlist) p_entlist = iso9660_ifs_readdir (p_iso, "/video_ts/");
if( !p_entlist) { printf("No VIDEO_TS Folder Found!\n"); return(0); }
if (p_entlist) {
_CDIO_LIST_FOREACH (p_entnode, p_entlist)
{
char filename[512], wfilename[512] = "video_ts.vob";
if(ft > 0) sprintf(wfilename, "%s%02i%s%1i%s", "vts_", ft / 10, "_", ft % 10, ".vob");
iso9660_stat_t *p_statbuf = (iso9660_stat_t *) _cdio_list_node_data (p_entnode);
iso9660_name_translate(p_statbuf->filename, filename);
if(! strcmp(filename,wfilename) && ft==0) { vidlsn=p_statbuf->lsn;
vts_end = (unsigned long long)(p_statbuf->size / 2048); return vidlsn; }
if(! strcmp(filename,wfilename) && ((ft %10) == 0) ) { vidlsn=p_statbuf->lsn;
vts_end = (unsigned long long)(p_statbuf->size / 2048); return vidlsn; }
if(! strcmp(filename,wfilename) && ((ft %10) != 0) ) { vidlsn=p_statbuf->lsn;
vts_end = (unsigned long long)(p_statbuf->size / 2048); return vidlsn; }
}
_cdio_list_free (p_entlist, true);
}
return 0;
}
EC_KEY *aacs_key() {
EC_GROUP *group;
EC_KEY *key = EC_KEY_new();
if (key == NULL) { return NULL; }
group = aacs_group();
if (!EC_KEY_set_group(key, group)) { EC_KEY_free(key); EC_GROUP_free(group); return NULL; }
else { return key; }
}
EC_GROUP *aacs_group() {
EC_GROUP *group = NULL;
EC_POINT *P = NULL;
BN_CTX *ctx = NULL;
BIGNUM *p = NULL, *a = NULL, *b = NULL, *x = NULL, *y = NULL, *order = NULL;
int ok = 0;
//AACS ECDSA Curve Parameters
const char data_p[] = "900812823637587646514106462588455890498729007071";
const char data_a[] = "-3";
const char data_b[] = "366394034647231750324370400222002566844354703832";
const char data_x[] = "264865613959729647018113670854605162895977008838";
const char data_y[] = "51841075954883162510413392745168936296187808697";
const char data_r[] = "900812823637587646514106555566573588779770753047";
if ((ctx = BN_CTX_new()) == NULL) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_MALLOC_FAILURE); goto err; }
if ((p = BN_new()) == NULL || (a = BN_new()) == NULL || (b = BN_new()) == NULL || (x = BN_new()) == NULL ||
(y = BN_new()) == NULL || (order = BN_new()) == NULL)
{ ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_MALLOC_FAILURE); goto err; }
if (!BN_dec2bn(&p, data_p) || !BN_dec2bn(&a, data_a) || !BN_dec2bn(&b, data_b)) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB); goto err; }
if ((group = EC_GROUP_new_curve_GFp(p, a, b, ctx)) == NULL) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB); goto err; }
if ((P = EC_POINT_new(group)) == NULL) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB); goto err; }
if (!BN_dec2bn(&x, data_x) || !BN_dec2bn(&y, data_y)) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB); goto err; }
if (!EC_POINT_set_affine_coordinates_GF2m(group, P, x, y, ctx)) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB); goto err; }
if (!BN_dec2bn(&order, data_r) || !BN_set_word(x, 1)) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_BN_LIB); goto err; }
if (!EC_GROUP_set_generator(group, P, order, x)) { ECerr(EC_F_EC_GROUP_NEW_FROM_DATA, ERR_R_EC_LIB); goto err; }
ok=1;
err:
if (!ok) { printf("There was an error in aacs_group function!\n"); EC_GROUP_free(group); group = NULL; }
if (P) EC_POINT_free(P);
if (ctx) BN_CTX_free(ctx);
if (p) BN_free(p);
if (a) BN_free(a);
if (b) BN_free(b);
if (order) BN_free(order);
if (x) BN_free(x);
if (y) BN_free(y);
return group;
}
Eza17
17th March 2011, 13:34
The tracks AREN'T identical, are they? You're talking about an HD audio track on the blu-ray with Cinavia vs an AC3 or DTS lossy track on the DVD without. You think maybe you'll find "differences" in that comparison that aren't related to Cinavia? I'm gonna say yea, that's very likely.
In the end, blind comparisons aren't going to solve this problem. It'll take real reverse engineering and a LOT of effort.
Couldn't you make two identical tracks though?
Find a short 5 second section of sound, preferably a constant sound and cut this from each audio sample.
I'm no sound expert but if you have a short sample like this, surely you could make them identical, even if if involves re-recording with an analogue method (cinavia is supposedly resistant to this so should remain).
Once you have these two short sections, you might then be able to compare for differences.
SamuriHL
17th March 2011, 13:48
No, you can't make them identical. Re-encoding them will only make the situation worse. The idea behind a lossy codec is that you lose information. There is no way to guarantee you "lose" the same bits when re-encoding. (To the audio experts out there I apologize for this vastly crude explanation. I realize it's far more complex than this.) If you're trying to find the proverbial needle in a haystack, you can't have any encoding differences in your source tracks. Even decoding both to lpcm won't help because they aren't the same to begin with. So no, this idea has no chance of ever working even though clever people keep bringing it up every few weeks as though it's a completely new and fresh idea. It will take a real effort to find and remove cinavia.
haggi
17th March 2011, 13:50
Couldn't you make two identical tracks though?
Find a short 5 second section of sound, preferably a constant sound and cut this from each audio sample.
I'm no sound expert but if you have a short sample like this, surely you could make them identical, even if if involves re-recording with an analogue method (cinavia is supposedly resistant to this so should remain).
Once you have these two short sections, you might then be able to compare for differences.
1. Take one audio file from any original audio cd you own. Encode a snipped of about 10 Seconds as
1.a) wave file
1.b) max quality aac
1.c) high quality aac
2. decode the two aac's to wave files
3. compare the three files
4. understand that this is NOT AS EASY AS IT SEEMS
SamuriHL
17th March 2011, 13:52
1. Take one audio file from any original audio cd you own. Encode a snipped of about 10 Seconds as
1.a) wave file
1.b) max quality aac
1.c) high quality aac
2. decode the two aac's to wave files
3. compare the three files
4. understand that this is NOT AS EASY AS IT SEEMS
That will indeed prove the point quite nicely...and that's starting with identical sources!
Eza17
17th March 2011, 15:46
Thanks for the explanation guys, told you I was no expert :)
I was just thinking you could record the sound with a microphone but if I understand you right then even the same sound recorded twice wont be the same.
SamuriHL
17th March 2011, 15:57
That's correct. Just the nature of how audio is done. They will "sound" identical for all intents and purposes, but, as far as bit exact, that's extremely unlikely. When you use a lossy codec like AC3, it drops information that isn't deemed important to the overall sound quality. How it does that depends on a lot of variables. Even assuming the same source, encoding it twice might not necessarily give you bit exact output. There's a whole host of things like sample rate and timing factors that determine the final output. Even theoretically it'd be difficult to get an exact bit for bit copy of a track where one has Cinavia embedded and the other doesn't. And if you're looking for an unknown "signal" embedded in the audio, you'll never know if it's "Cinavia" or some other encoding factor that is causing a "difference". It's really not the way to go about this problem at all. I get that people believe the idea is "simple" in that you take two seemingly identical tracks, subtract them, and whatever is left is "Cinavia". But it's even more complicated than that as Cinavia is mixed into the recording in a very nasty way.
Eza17
18th March 2011, 11:27
Thanks for the explanations on why comparing wouldn't work, it's clear to me now why people say this is impossible without the original source without cinavia. Just thinking outside the box and again, sorry if it's a silly question but couldn't you add your own watermark? I know it's probably not straight forward to add a watermark but if some filter could be added which works on a similar principle, i.e. affecting non-audible areas, wouldn't this corrupt the cinavia watermark and prevent it being identified properly? This method obviously wouldn't remove cinavia, rather make it unrecognisable.
Ghitulescu
18th March 2011, 11:35
Thanks for the explanations on why comparing wouldn't work, it's clear to me now why people say this is impossible without the original source without cinavia. Just thinking outside the box and again, sorry if it's a silly question but couldn't you add your own watermark? I know it's probably not straight forward to add a watermark but if some filter could be added which works on a similar principle, i.e. affecting non-audible areas, wouldn't this corrupt the cinavia watermark and prevent it being identified properly? This method obviously wouldn't remove cinavia, rather make it unrecognisable.
I'm getting slowly tired to draw the attention of the "hackers" to the algorithms that are public, thereupon cinavia works. No need to compare or other silly methods, just to reverse one algorithm or their combinations. Then a list will be published with each and one movie, and that's it; the next format will be even more "uncopiable" (and probably the same degree of unsellable).
mayhem2408
18th March 2011, 13:49
Yes. Save your time and cash, there is no Cinavia on the DVD version of Salt, 100% certain of that.
Thats my point. I want to compare the Cinavia Bluray Audio with the Non Cinavia DVD Audio and see if I can find the not audible watermark.
I have the DVD now and have the audio streams from both extracted. Now I'm trying to come up with some algorithms to detect the non audible differences.
And this all has to be done in the analog realm. The Cinavia watermark is ment to survival all types of reencoding which means things like phase shifts will not affect it. It also means that comparing the signals digitally will be nearly impossible. The encoding process on the DVD would produce and completely different digital signature to the Bluray even though they would sound nearly identical. There could be slight phase differences, Left and Right seperation might be slightly different, but these differences would not be heard.
Eza17
18th March 2011, 14:05
I'm getting slowly tired to draw the attention of the "hackers" to the algorithms that are public, thereupon cinavia works. No need to compare or other silly methods, just to reverse one algorithm or their combinations. Then a list will be published with each and one movie, and that's it; the next format will be even more "uncopiable" (and probably the same degree of unsellable).
Sorry I'm not sure what you are saying or implying? I think you are stating that this is not possible by reference to the patents (I have tried reading them but unless you are familiar with the area then they're not that easy to understand). I take it you mean that the watermark cannot be overwritten or confused by other non-audible watermarking.
I'm also sorry you are getting tired of people posting questions, sorry I can't understand the patents and I did use the search before posting to try and determine if someone had asked the question before.
Ghitulescu
18th March 2011, 14:41
Once more,
cinavia is added to an existing audio track using one of the several algorithms and/or their combinations. It's not so simple as adding say a 16kHz narrow pilot signal some people suggested (which is indeed one method), which can be "denoised" out very efficiently (like the FM or hum filters). It involves a spatial distribution, phase changing and so on. It doesn't help to extract the differences from eg The loosers then to apply them to the next BD. Because cinavia is not there to be reverse engineered by the player, only to be recognised. It's much easier to recognize the hum than to get rid of hum, and this is an easy task. That cinavia survives analog loophole, MP3 compression (or any other lossy ones) is because it doesn't depend on artificial signals injected into the audio , but on processing that audio.
These are not always evidenced by running comparisons on both tracks. Since even the MP3 vs WAV is difficult to compare in terms of spatial/phase differences, not to mention what happens if one track is differently mastered than the other, which is extremely likely, as mastering DD is different from mastering LPCM.
MickJT
18th March 2011, 17:26
Well.. I'm going to propose a slight variation of what I said in the SlySoft forums. Firstly, and sorry for possibly saying something that has already been said, has anyone tried playing back two or three Cinavia encoded audio tracks mixed together into 1 file, muxed with the video, and seeing if it gets detected? (Of course you'll have the audio from 3 discs all going at the same time, so it'll sound abhorrent, but nevertheless). If it doesn't get detected, then perhaps a Cinavia signal can be taken from a point of silence in a bunch of movies, all merged together, and overlaid on top of an audio track all throughout it, disrupting any check for Cinavia.
The downside is, this might make it twice or 3 times as easy to detect, but has it even been tried at all? Shouldn't be hard.
Eza17
18th March 2011, 17:50
So, I find a way to add my own 'cinavia' and it has no chance of affecting the cinavia that is already there? Isn't there any chance that my own 'inaudible' signal would interfere with the existing signal? I wouldn't be trying to remove cinavia, just make it impossible to reliably detect.
MickJT
18th March 2011, 17:53
That's my line of thought. Have multiple Cinavia signals overlaid on top of each other, making it hard (or extremely easy) to detect. Needs to be tried at least once, if it hasn't already.
Ghitulescu
18th March 2011, 17:59
May I point to the fact that the goal is to play a BD (and now a DVD, too). What use to fool the detection routines in the player if the sound is itself a sort of cacophony?
MickJT
18th March 2011, 18:03
You can take a part of Cinavia infected silence (assuming that exists). You wouldn't be able to tell the difference. Of course, you still need to re-encode the audio. Something you'd need to do removing just Cinavia, anyway.
My post on SlySoft, I had a different idea, with less thought put into it, which was about taking any other Cinavia source, silent or not, cloning one channel to another, and inverting, then having the receiver cancel that audio out while downmixing. Crap result, with less channels, but it was basically the same thing.
mayhem2408
18th March 2011, 22:09
You can take a part of Cinavia infected silence (assuming that exists). You wouldn't be able to tell the difference. Of course, you still need to re-encode the audio. Something you'd need to do removing just Cinavia, anyway.
My problem with that is the Cinavia watermark is not affected by background noise, even when rerecorded by camcorder, so I doubt the cinavia watermark would be put into silence. It would actually make sence for it not to be put into silence, making it harder to find and remove.
Ajax_Undone
19th March 2011, 06:58
My problem with that is the Cinavia watermark is not affected by background noise, even when rerecorded by camcorder, so I doubt the cinavia watermark would be put into silence. It would actually make sence for it not to be put into silence, making it harder to find and remove.
http://forum.slysoft.com/showpost.php?p=303746&postcount=630
This idea is something that I find interesting.
Eza17
23rd March 2011, 16:10
Sorry to go on about audio comparisons and I understand that it's hard to get 2 samples the same but aren't there already audio streams out there with and without cinavia? Reading around the web, it seems to indicate that the English blu ray version of Salt has cinavia but other regions don't. If this is the case, wouldn't the non-speaking parts of the audio be the same apart from the english version having cinavia?
Big Vern
3rd April 2011, 09:58
I know this could be a load of hogwash, but I found this on my travels.........
Solution: If you are getting the Cinavia DRM problem with PS3, you can remove the watermark by downloading ‘tunebite’ and converting it to 256kps MP3
Can't see that working, but I thought I would post it nonetheless.
P.S. I have no way of testing this either as I do not have a PS3, nor a Cinavia enabled blu-ray player.
mike20021969
3rd April 2011, 15:46
I know this could be a load of hogwash, but I found this on my travels.........
Solution: If you are getting the Cinavia DRM problem with PS3, you can remove the watermark by downloading ‘tunebite’ and converting it to 256kps MP3
Can't see that working, but I thought I would post it nonetheless.
There's no could be about it.
It is hogwash and doesn't work.
pacaveli211
3rd April 2011, 22:16
and you'd be effectively ruining your audio (IMO anyways)...even if it did work
pandy
4th April 2011, 11:40
Don't have experience with this DRM but maybe lowpass filter 8kHz + SBR to recreate everything over 8kHz can solve temporary this problem?
Don't have recordings but maybe someone affected can check this idea?
smegolas
4th April 2011, 17:06
Synchronisation attack is what I would be looking at.
setarip_old
4th April 2011, 19:28
@smegolas
Hi! Synchronisation attack is what I would be looking at.
1) Would you be good enough to provide a bit of detail regarding your suggested procedure?
2) Have you tried using this procedure with a Cinavia-protected disc? If so, what were the results?
muzzz33
8th April 2011, 21:40
i have read on several websites (psgroove.com is one) that the new media player called showtime for jailbroken ps3's does not trigger the cinavia protection and it also supports mkv's. i have no media with cinavia to try and confirm this ,anyone here fancy having a go?
ron spencer
8th April 2011, 21:51
@smegolas
Hi!
1) Would you be good enough to provide a bit of detail regarding your suggested procedure?
2) Have you tried using this procedure with a Cinavia-protected disc? If so, what were the results?
see here:
http://www.springerlink.com/content/j47t79366320114g/
setarip_old
9th April 2011, 00:24
@ron spencer
Thanks for the link.
It will be interesting to hear back from "smegolas"
setarip_old
9th April 2011, 00:51
@muzzz33
Hi!
What you've described sounds promising. However, upon visiting the "psgroove" website, I was unable to locate any postings stating or confirming that a PS3 that would otherwise be subject to Verance/"Cinavia" protection can, by using the "Showtime" player program, play Verance/"Cinavia-protected Blu-ray discs without incident.
If this is in fact the case, this would represent a very significant breakthrough (as I've suggested on several occasions in this thread since the PS3 was "jailbroken") ;>}
Please be good enough to provide links to posts at "psgroove" or other sources that clearly provide this specific information.
muzzz33
9th April 2011, 17:11
Hi the link below gives an example of the showtime player ignoring cinavia
http://www.digital-kaos.co.uk/forums/f15/cinavia-198938/
setarip_old
9th April 2011, 18:15
Following the link provided by "muzzz33" led me to the following which appears to indicate that a combination of a "Custom FirmWare" (CFW) v.3.55 and a homebrewn player named "Showtime" allows PS3 playback of of Verance/"Cinavia"-protected Blu-ray backup copies without interference by the protection:
http://www.digital-kaos.co.uk/forums/f15/cinavia-198938/#post1047445
If you have CFW just install Showtime
I tried to watch Battle LA on PS3, cinavia kicked in,
switched to Showtime, no cinavia
Additional related/supporting posts can be found by performing the following Googlesearch:
cfw+ps3+showtime
For the benefit of the community, it would be wonderful if any members who have "jailbroken" PS3s could check out and report on the described custom firmware and the "Showtime" player program when used in conjunction with a backup copy of a known Verance/"Cinavia"-protected Blu-ray disc.
(As I've mentioned previously, I do not own a PS3.)
SamuriHL
9th April 2011, 18:54
I have a PS3 but it's not jailbroken so I can't test this. I'd also be very interested to hear first hand testimonials as to how well this "Showtime" player works.
setarip_old
9th April 2011, 19:56
@SamuriHL I'd also be very interested to hear first hand testimonials as to how well this "Showtime" player works.Actually, from what I've read (albeit skimmingly), it sounds like you should be able to use the "Showtime" player for non-Verance/"Cinavia"-protected Blu-ray copies with ANY PS3 (not only "jailbroken" PS3s).
It sounds similar in concept to the oft' spoken of SlySoft player-in-development...
SamuriHL
9th April 2011, 20:13
@SamuriHL Actually, from what I've read (albeit skimmingly), it sounds like you should be able to use the "Showtime" player for non-Verance/"Cinavia"-protected Blu-ray copies with ANY PS3 (not only "jailbroken PS3s).
It sounds similar in concept to the oft' spoken of SlySoft player-in-development...
Hmm. I may have to look into that when I get a chance. From a post Peer made on SlySoft recently, it sounds like they're making progress on SlyPlayer. In any case, I'll see if I can test this out sometime this weekend.
SamuriHL
9th April 2011, 20:17
Actually, this seems worrisome:
Things that do NOT work
-TV-style remote controller has not been tested. No idea if it works or not.
-BD/DVD/CD Discs – No idea how that works
-Digital pass thru audio (AC3, DTS, etc)
And the following:
Most of this should work except for playback of high res. HD videos (basically when the PPU runs out of cycles). There are some methods of fixing them, but no one knows yet. I will update it when they do.
So, it would seem that you would have to convert the video in order to play it? Or am I reading that wrong? That's right from their website, so, I'm guessing this is an issue?
setarip_old
9th April 2011, 23:02
@SamuriHL
Apparently, you've viewed a different website than the ones I've seen (Including the "Showtime" author's home pages)
You might want to check out the following links:
https://www.lonelycoder.com/hts/showtime_overview.html Video playback
Showtime supports all video formats supported by FFmpeg
http://ps3.dashhacks.com/2011/04/07/showtime-it-does-1080p-now
And here's a YouTube example: www.youtube.com/watch?v=pGcrfsWh8d4
(Please keep in mind that I do not own a PS3 - just sharing apparent information)
SamuriHL
9th April 2011, 23:10
I'll take a look at it. I don't have a lot of time right now as I'm trying to get my bedroom machine to have stable playback at 24Hz. I'm finding that with how things are progressing with MPC-HC/LAV Splitter/LAV CUVID/madVR these past few weeks, things are looking up on the PC playback front. Since it's open source it won't ever support Cinavia and can play BD's (assuming protection removed, of course) and MKV's with perfectly clarity and the absolute best PQ I've seen on a PC. Quite frankly, my preferred method for getting around Cinavia is only getting better with time. :) However, if this player on the PS3 works, that's really good news as it's one of the most popular players.
vBulletin® v3.8.11, Copyright ©2000-2026, vBulletin Solutions Inc.