This may help some of you...

The Following is all you need to fix your OPOS card flash file...

Code:
You don't have permission to view the code content. Log in or register now.

BUT, there is one bit of information missing and that's the jump (XXXX'd out above) out of and back into the cards original routine....

You have to figure that out, jump to this code and then the rts instruction at the end will take you back.
You must execute this before the EMM though ;)

So what does all that code above do, well this:

[1st we need to 'save' the accumulator (A) so we can restore it's value after we've finished]

88 pusha (value A is stored on the stack)

[Next we need to check for 2 locations of the instruction #$42 in the EMM BYTES DUMP]
[We're doing this because we want to detect both the new EMM and the one that appeared last May]

C6 00 A8 load the contents of address $A8 into A
A1 42 cmp A with #$42 (is #$42 stored at address $A8)
27 0C beq (jump 12 bytes if $A8 = #$42)
C6 00 A9 load the contents of address $A9 into A
A1 42 cmp A with #$42 (is #$42 stored at address $A9)
27 05 beq (jump 5 bytes if $A9 = #$42)

[above, if #$42 is not at either $A8 or $A9, we run the next 3 lines]
[if either $A8 or $A9 = #$42, the branch (beq) instructions would've caused us to skip the next 3 lines]

84 popa (original value of A is restored from the stack)
CD XX XX jsr to the sub routine that SHOULD have run instead of ours
81 rts (returns back to the point we broke away to our code)

[above, we recover the original value of A and jump to the sub routine that should've run instead of ours...We need the rts instruction to return from our routine back to the intial jump instruction where we forced the card to run our code]

[if we've got this far, we know that the EMM BYTES DUMP must contain #$42 at either $A8 or $A9]
[next we fix the May 07 call to register $07]

C6 00 8F load the contents of address $8F into A
A1 07 cmp A with #$07 (is #$07 stored at address $8F)
26 08 bne (jump 8 bytes if $8F does NOT = #$07)
A6 A6 load value #$A6 into A
B7 8E store A into address $8E
A6 03 load value #$03 into A
B7 8F store A into address $8F

[above, we check the EMM at $8F for the value #$07. This would be the May 2007 Register $07 call EMM. WE don't like that call so we write it out...See that we've replaced $8E and $8F to read A6 03. That's all that's needed before the original EMM executes to fix the problem and update your keys. We need this in case VM switch back to using this method in the future....]

[If $8F does NOT = #$07 we have a different key update so we branch (bne) 8 bytes to prevent the above code (A6 A6 to B7 8F) running...]

[the next few lines of code checks for the NEW EMM and fixes the problem]

C6 00 83 load the contents of address $83 into A
A1 4E cmp A with #$4E (is #$4E stored at address $83)
26 0E bne (jump 14 bytes if $83 does NOT = #$4E)
A6 A6 load value #$A6 into A
B7 81 store A into address $81
B7 8F store A into address $8F
A6 01 load value #$01 into A
B7 82 store A into address $82
A6 81 load value #$81 into A
B7 90 store A into address $90

[above, we check the EMM BYTES DUMP at address $83 for #$4E (the swapa instruction). If we don't find it, we branch (bne) 14 bytes to the code below as it can't be the new EMM. If it is, we write the value #$A6 into both $81 and $8F addresses. We also write the values #$01 and #$81 into addresses $82 and $90 respectively. To see what this does, look at the 2 EMM's at the end.]

[the following code is the same as the code above that runs if no keyroll was in the EMM buffer which restores the value of A and executes the original routine before we return back from our routine to the point we started our patch.]
84 popa (END of patch)
CD XX XX jsr to the sub routine that SHOULD have run instead of ours
81 rts (returns back to the point we broke away to our code)



Now let's see the results of the routine that fixes the new EMM....

Original EMM

DISASSEMBLY OF CODE:
------------------------------

0081: B6 02 lda $02 ; Load in A
0083: 4E swapa ; Nibble exchange of A
0084: A4 10 and #$10 ; A= A and ...
0086: B8 AD eor $AD ; A= A xor ...
0088: B7 AD sta $AD ; Store A in...
008A: 9B sei ; I <-- 1
008B: 11 02 bclr0 $02 ; Bit 0 <-- 0
008D: 1E 02 bset7 $02 ; Bit 7 <-- 1
008F: B6 02 lda $02 ; Load in A
0091: 4E swapa ; Nibble exchange of A
0092: A4 18 and #$18 ; A= A and ...
0094: B8 B2 eor $B2 ; A= A xor ...
0096: B7 B2 sta $B2 ; Store A in...
0098: 1F 02 bclr7 $02 ; Bit 7 <-- 0
009A: 9A cli ; I <-- 0
009B: A6 26 lda #$26 ; Load in A
009D: CC 6B 01 jmp $6B01 ; Jump

BYTES DUMP:
---------------------
00A0: 00 00 00 00 00 00 83 5D
00A8: 01 42 05 ED 74 0E 7A 5F
00B0: 6B 60 58 42 85 FF 6C C6
00B8: A0 EB 80 02 EA

Patched EMM

DISASSEMBLY OF CODE:
------------------------------

0081: A6 01 lda #$01 ; Load in A
0083: 4E swapa ; Nibble exchange of A
0084: A4 10 and #$10 ; A= A and ...
0086: B8 AD eor $AD ; A= A xor ...
0088: B7 AD sta $AD ; Store A in...
008A: 9B sei ; I <-- 1
008B: 11 02 bclr0 $02 ; Bit 0 <-- 0
008D: 1E 02 bset7 $02 ; Bit 7 <-- 1
008F: A6 81 lda #$81 ; Load in A
0091: 4E swapa ; Nibble exchange of A
0092: A4 18 and #$18 ; A= A and ...
0094: B8 B2 eor $B2 ; A= A xor ...
0096: B7 B2 sta $B2 ; Store A in...
0098: 1F 02 bclr7 $02 ; Bit 7 <-- 0
009A: 9A cli ; I <-- 0
009B: A6 26 lda #$26 ; Load in A
009D: CC 6B 01 jmp $6B01 ; Jump

BYTES DUMP:
---------------------
00A0: 00 00 00 00 00 00 83 5D
00A8: 01 42 05 ED 74 0E 7A 5F
00B0: 6B 60 58 42 85 FF 6C C6
00B8: A0 EB 80 02 EA

We are no longer loading the value stored in $02 (register $02) into A (at $81 or $8F), we're loading the values #$01 and #$81 instead as these would be the values read from the register if the opos correctly emulated it....
The routine runs because we DO have #$42 at $A9...

Now that the EMM has been altered, we return to the original card routines that execute the EMM (as we want it) and bingo, the keys are updated correctly...

Now ffs, someone apply it and keep me just slightly the right side of the law ta :cool:
 
great fix, and great way of posting. remember to give thanks if you need it opos or tit2

edit, done! will check on tit2 or port to tit 1 tomoz.

dont believe there is a need to post up an actual file at least for another week. most should understand this
 
Last edited:
I should add that as the patch includes the May 07 EMM, you should patch a PRE MAY 07 flash file....
 
The Following is all you need to fix your OPOS card flash file...............

Well, if they cant follow that subtle hint then they really dont deserve a fix.

This is supposed to be a "learn about cable systems" forum, not a "can you give me a fix" forum !

Its disappointing to see so few people actually having a go at this stuff.
 
Last edited:
I even used branch's to avoid them worrying about jumping to addresses ffs lol
 
I used notepad and/or UltraEdit (and nothing else, except for a decrypted logfile of course lol)
 
You know you could take a raw EMM and fire in into SOSIA and output the log as a text file....

Then search it for a call to the EMM starting address and read backwards to find a jump...

The biggest clue in the land has been missed and I can't really believe it...

I said you should replace my XX XX's with the original data that you're going to use to jump to my patch...What does that tell you....It's only 2 effin bytes and starts with a CD (so it must be another jump)...

So you're looking for a jump command (CD YY YY) that jumps to another jump command that runs just before the EMM is run (at $81)

Now I really can't make this any more easier lol
 
Last edited:
I used notepad and/or UltraEdit (and nothing else, except for a decrypted logfile of course lol)

ahh, a proper programmer at last !

Do you have 16 fingers by any chance to aid in hexadecimal counting ?
 
hope this is not to daft but i see were your saying to put the new bytes in CD XX XX do we also have to do this near the end were we have the CD XX XX again now the bit im not sure about is how to patch it in is it justa case of copy and paste in to ultraedit or notepad
 
hope this is not to daft but i see were your saying to put the new bytes in CD XX XX do we also have to do this near the end were we have the CD XX XX again now the bit im not sure about is how to patch it in is it justa case of copy and paste in to ultraedit or notepad

Hells bells. Times likw these remind me how simple I really am! Someone pass me the colouring book!
 
Once the Opus file is uncrypted, which applicatiopn/software is required to read the information?

Please can someone tel me the filename or add the file here. Thanks
 
ok, enough's enough.....

Looking at the plain flash in notepad (no SOSIA, EMM Studio or feck all) we need to find address $74EC....

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

^Thats 74E0...

The last byte of every line is the checksum and cannot be used...

You can only use the area as shown below

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Ignore the initial 10, the 00 after the address and the cheksum at the end and you've got your codespace...

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Above I have highlighted 74EC. You should see a CD followed by.....?

Take the 2 bytes that follow the CD and replace the XXXX's in my patch with what's there....

Now, you need only find a free area in the ROM to jump to. When you know where, write the address after the CD at $74EC.

The card merrily runs till the jump at $74EC, jumps to our patch, if required patches the EMMs, jumps to the routine that should've run (was at $74EC) and then returns back (to $74EF as the CD instruction uses 3 bytes obviously)

Ensure your ROM code does NOT include the following

:108230000ABA05B7081307140712078481CD9A10EC
:1082400081000000008176597597FEF97F504E40FD

which was the previous May 07 mod....
(oh look, even a clue to the free space you could use after the CD there lol)

Ensure it reads

:108230000ABA05B708130714071207848113071336
:1082400007150713078176597597FEF97F504E4041

Ensure the free space is clear for the new routine (not a clue now, but the bleeding obvious lol)

:109A10001307130715071307C6008FA1072703CDE8
:109A20009A34C600A8A1422703CD9A34A6A6B78EC1
:109A3000A603B78F81FFFFFFFFFFFFFFFFFFFFFFC1

should now read

:109A1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56
:109A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46
:109A3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36

(the above removes the May 07 mod if you only have the last files to work with)

Now, you simply choose where to start the patch and add the address after the CD at $74EC (taking note of what's there already)
Write out the patch in the useable codespace in a linear fashion (line wrapping when you run out of space on the line) ensuring the 2 CD instructions are udated to reflect what was at $74EC....

Save the file, correct the checksums and encrypt the 2 files to produce your 3 opos files. Program the card and add your image with NagraEdit...

Done


It's really that simple :cool:
 
ok, enough's enough.....

Looking at the plain flash in notepad (no SOSIA, EMM Studio or feck all) we need to find address $74EC....

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

^Thats 74E0...

The last byte of every line is the checksum and cannot be used...

You can only use the area as shown below

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Ignore the initial 10, the 00 after the address and the cheksum at the end and you've got your codespace...

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Above I have highlighted 74EC. You should see a CD followed by.....?

Take the 2 bytes that follow the CD and replace the XXXX's in my patch with what's there....

Now, you need only find a free area in the ROM to jump to. When you know where, write the address after the CD at $74EC.

The card merrily runs till the jump at $74EC, jumps to our patch, if required patches the EMMs, jumps to the routine that should've run (was at $74EC) and then returns back (to $74EF as the CD instruction uses 3 bytes obviously)

Ensure your ROM code does NOT include the following

:108230000ABA05B7081307140712078481CD9A10EC
:1082400081000000008176597597FEF97F504E40FD

which was the previous May 07 mod....
(oh look, even a clue to the free space you could use after the CD there lol)

Ensure it reads

:108230000ABA05B708130714071207848113071336
:1082400007150713078176597597FEF97F504E4041

Ensure the free space is clear for the new routine (not a clue now, but the bleeding obvious lol)

:109A10001307130715071307C6008FA1072703CDE8
:109A20009A34C600A8A1422703CD9A34A6A6B78EC1
:109A3000A603B78F81FFFFFFFFFFFFFFFFFFFFFFC1

should now read

:109A1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56
:109A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46
:109A3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36

(the above removes the May 07 mod if you only have the last files to work with)

Now, you simply choose where to start the patch and add the address after the CD at $74EC (taking note of what's there already)
Write out the patch in the useable codespace in a linear fashion (line wrapping when you run out of space on the line) ensuring the 2 CD instructions are udated to reflect what was at $74EC....

Save the file, correct the checksums and encrypt the 2 files to produce your 3 opos files. Program the card and add your image with NagraEdit...

Done


It's really that simple :cool:


he..he..he.. like your style m8, i do not have a clue what any of this means :err:, i am very grateful for all you peeps working on it "respect" and hope you get it sorted
 
ok, enough's enough.....

Looking at the plain flash in notepad (no SOSIA, EMM Studio or feck all) we need to find address $74EC....

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

^Thats 74E0...

The last byte of every line is the checksum and cannot be used...

You can only use the area as shown below

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Ignore the initial 10, the 00 after the address and the cheksum at the end and you've got your codespace...

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Above I have highlighted 74EC. You should see a CD followed by.....?

Take the 2 bytes that follow the CD and replace the XXXX's in my patch with what's there....

Now, you need only find a free area in the ROM to jump to. When you know where, write the address after the CD at $74EC.

The card merrily runs till the jump at $74EC, jumps to our patch, if required patches the EMMs, jumps to the routine that should've run (was at $74EC) and then returns back (to $74EF as the CD instruction uses 3 bytes obviously)

Ensure your ROM code does NOT include the following

:108230000ABA05B7081307140712078481CD9A10EC
:1082400081000000008176597597FEF97F504E40FD

which was the previous May 07 mod....
(oh look, even a clue to the free space you could use after the CD there lol)

Ensure it reads

:108230000ABA05B708130714071207848113071336
:1082400007150713078176597597FEF97F504E4041

Ensure the free space is clear for the new routine (not a clue now, but the bleeding obvious lol)

:109A10001307130715071307C6008FA1072703CDE8
:109A20009A34C600A8A1422703CD9A34A6A6B78EC1
:109A3000A603B78F81FFFFFFFFFFFFFFFFFFFFFFC1

should now read

:109A1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56
:109A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46
:109A3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36

(the above removes the May 07 mod if you only have the last files to work with)

Now, you simply choose where to start the patch and add the address after the CD at $74EC (taking note of what's there already)
Write out the patch in the useable codespace in a linear fashion (line wrapping when you run out of space on the line) ensuring the 2 CD instructions are udated to reflect what was at $74EC....

Save the file, correct the checksums and encrypt the 2 files to produce your 3 opos files. Program the card and add your image with NagraEdit...

Done


It's really that simple :cool:

hey coolguy

are you saying all you need to decrypt the latest emm to make opos Auto update again is the opos flash file in wordpad?

thanks
 
OK I have found the line:-

:1074E000CD4EEDA607CC6B01A0742607CD742725E1

Help I cant find 74EC All I see after CD... 7427

Please help...

ok, enough's enough.....

Looking at the plain flash in notepad (no SOSIA, EMM Studio or feck all) we need to find address $74EC....

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

^Thats 74E0...

The last byte of every line is the checksum and cannot be used...

You can only use the area as shown below

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Ignore the initial 10, the 00 after the address and the cheksum at the end and you've got your codespace...

:1074E000CD4EEDA607CC6B01A0742607CDXXXX2552

Above I have highlighted 74EC. You should see a CD followed by.....?

Take the 2 bytes that follow the CD and replace the XXXX's in my patch with what's there....

Now, you need only find a free area in the ROM to jump to. When you know where, write the address after the CD at $74EC.

The card merrily runs till the jump at $74EC, jumps to our patch, if required patches the EMMs, jumps to the routine that should've run (was at $74EC) and then returns back (to $74EF as the CD instruction uses 3 bytes obviously)

Ensure your ROM code does NOT include the following

:108230000ABA05B7081307140712078481CD9A10EC
:1082400081000000008176597597FEF97F504E40FD

which was the previous May 07 mod....
(oh look, even a clue to the free space you could use after the CD there lol)

Ensure it reads

:108230000ABA05B708130714071207848113071336
:1082400007150713078176597597FEF97F504E4041

Ensure the free space is clear for the new routine (not a clue now, but the bleeding obvious lol)

:109A10001307130715071307C6008FA1072703CDE8
:109A20009A34C600A8A1422703CD9A34A6A6B78EC1
:109A3000A603B78F81FFFFFFFFFFFFFFFFFFFFFFC1

should now read

:109A1000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF56
:109A2000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF46
:109A3000FFFFFFFFFFFFFFFFFFFFFFFFFFFFFFFF36

(the above removes the May 07 mod if you only have the last files to work with)

Now, you simply choose where to start the patch and add the address after the CD at $74EC (taking note of what's there already)
Write out the patch in the useable codespace in a linear fashion (line wrapping when you run out of space on the line) ensuring the 2 CD instructions are udated to reflect what was at $74EC....

Save the file, correct the checksums and encrypt the 2 files to produce your 3 opos files. Program the card and add your image with NagraEdit...

Done


It's really that simple :cool:
 
i dont have opos but think what he is saying is that you have to make the jump to a patch,in the space pointed out i.e 109A10/$9a10,add the patch there and get it to jump back ,i.e set cd to $74EF.i think....and i could be well off the ball
 
OK I have found the line:-

:1074E000CD4EEDA607CC6B01A0742607CD742725E1

Help I cant find 74EC All I see after CD... 7427

Please help...

:10 - Address + 00 - 00 - 01 - 02 - 03 - 04 - 05 - 06 - 07 - 08 - 0A - 0B - 0C - 0D - 0E - 0F - checksum
------------------------------------------------------------------------------------------
:10 74E0 00 CD 4E ED A6 07 CC 6B 01 A0 74 26 07 CD 74 27 25 E1

Each Address is your START. You then count left to right starting at 00 (74E ZERO) then 74E1, 74E2 etc etc etc.....

So you change the CD 74 27 to say CD B0 00 and add your patch code at :10B00000 ensuring the CD XX XX are updated to read CD 74 27

Simple :cool:
 
Last edited:
Back
Top