]> www.vanbest.org Git - sasc-ng.git/commitdiff
viaccess: (next try) fix TPS AU
authorleslie <unknown>
Mon, 4 Feb 2008 15:54:51 +0000 (16:54 +0100)
committerleslie <unknown>
Mon, 4 Feb 2008 15:54:51 +0000 (16:54 +0100)
systems/viaccess/tps.c
testing/testTPS.c

index 2ea6f41d9b0b941242000d9a131a1d83ecfd4f7e..5bda19571a5e6c41601602873274e0168b12f364 100644 (file)
@@ -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;
index 36e68cfcfe17a4f7f9791fd07a764a7fae741abf..546d6ab33f1fed0ccd87fc6ea66c0f082a7951b8 100644 (file)
@@ -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);