From d5d7ae0ee505d4eb2487433d067e395bb34e7edc Mon Sep 17 00:00:00 2001 From: leslie Date: Mon, 4 Feb 2008 16:54:51 +0100 Subject: [PATCH] viaccess: (next try) fix TPS AU --- systems/viaccess/tps.c | 15 +++++++++------ testing/testTPS.c | 1 + 2 files changed, 10 insertions(+), 6 deletions(-) diff --git a/systems/viaccess/tps.c b/systems/viaccess/tps.c index 2ea6f41..5bda195 100644 --- a/systems/viaccess/tps.c +++ b/systems/viaccess/tps.c @@ -758,10 +758,10 @@ bool cTpsKeys::ProcessAu(const cOpenTVModule *mod) kd=addr; else if(d[addr]==0x73 && d[addr+1]==0x25 && d[addr+2]==0xFA) cb1=addr; - else if((d[addr]&0x60)==0x60 && (d[addr+1]&0xB0)==0xB0) { - if(d[addr+2]==0x24) cb2=addr; - else if(d[addr+2]==0x21) cb3=addr; - } + else if(d[addr]==0x64 && (d[addr+1]&0xB0)==0xB0 && d[addr+2]==0x24) + cb2=addr; + else if((d[addr]&0x60)==0x60 && (d[addr+1]&0xB0)==0xB0 && (d[addr+2]&0x20)==0x20) + cb3=addr; /* else if(d[addr]==0x73 && d[addr+1]==0x25) { static const unsigned char scan1[] = { 0x28, 0x20, 0x20, 0xC0 }; @@ -778,8 +778,11 @@ bool cTpsKeys::ProcessAu(const cOpenTVModule *mod) PRINTF(L_SYS_TPSAU,"couldn't locate all pointers in data section (%d,%d,%d,%d)",kd,cb1,cb2,cb3); return false; } - unsigned int len=(kd>cb1 && kd>cb2 && kd>cb3) ? kd : datahdr->dlen; - RegisterAlgo3(d,cb1,cb2,cb3,len); + + unsigned int end=(kd>cb1 && kd>cb2 && kd>cb3) ? kd : datahdr->dlen; + unsigned int off=min(cb1,min(cb2,cb3)); + PRINTF(L_SYS_TPSAU,"pointers in data section kd=%d cb1=%d cb2=%d cb3=%d - dlen=%d off=%d end=%d",kd,cb1,cb2,cb3,datahdr->dlen,off,end); + RegisterAlgo3(d+off,cb1-off,cb2-off,cb3-off,end-off); const unsigned char *data=&d[kd]; int seclen, numkeys; diff --git a/testing/testTPS.c b/testing/testTPS.c index 36e68cf..546d6ab 100644 --- a/testing/testTPS.c +++ b/testing/testTPS.c @@ -74,6 +74,7 @@ int main(int argc, char *argv[]) InitAll(argv[1]); LogAll(); + cLogging::SetModuleOption(LCLASS(L_SYS,L_SYS_DISASM),false); FILE *f=fopen(argv[2],"r"); if(f) { fseek(f,0,SEEK_END); -- 2.39.5