| java777 |
| Regular user |

 |
|
| Joined: Sep 25, 2010 |
| Posts: 5 |
|
|
|
 |
 |
 |
|
Hi,
I`m tring to read the zinio magazines for free, I managed to download the full magazine in 2 different ways the zno file to be read offline ( wich I think is impossible to open it needs a dsa signature)
The online file is a zip file with all the thubnails and swf pages to be read online. But this swf files are some how encoded ( I`m starting to believe they are pdf) the online reader needs a key for each page like 0824c615632de28d8a19ab702599d1dd2695a40afd874fd868725619d32fa69a for page 0
Since I have all the pages and the keys for page 0 and 1 is it possible to get the other files key?
Has any one messed around with zinio and can give me a few tips thanks.
Here is the online files http://rapidshare.com/files/425297743/416141596.zip
Thanks
Edit
Ithink that the functioon to decode is this:
| Code: |
package com.zinio.crypto
{
import flash.utils.*;
public class Drm11Decryptor extends Object implements IDecryptor
{
private var cipher:ICipher;
private static const ZNO_HEADER_LENGTH:int = 5;
private static const PREPEND_PACKING_LENGTH:int = 1024;
private static const HEAD_ENCRYPTED_LENGTH:int = 2048;
private static const TAIL_ENCRYPTED_LENGTH:int = 1024;
private static const CLEAR_LENGTH:int = 60;
private static const ENCRYPTED_LENGTH:int = 8;
public function Drm11Decryptor()
{
return;
}// end function
public function decrypt(param1:ByteArray, param2:ByteArray) : ByteArray
{
var _loc_4:uint;
var _loc_7:uint;
var _loc_8:uint;
var _loc_3:uint;
var _loc_5:* = new ByteArray();
var _loc_6:uint;
if (this.cipher == null)
{
this.cipher = new Arc4Cipher();
}
this.cipher.init(CipherMode.DECRYPT, param1);
_loc_3 = _loc_3 + ZNO_HEADER_LENGTH;
_loc_4 = Math.min(param2.length - _loc_3, HEAD_ENCRYPTED_LENGTH);
_loc_6 = _loc_6 + this.cipher.update(param2, _loc_3, _loc_4, _loc_5, _loc_6);
_loc_3 = _loc_3 + _loc_4;
while (param2.length - _loc_3 > TAIL_ENCRYPTED_LENGTH)
{
_loc_5.position = _loc_6;
_loc_5.writeBytes(param2, _loc_3, CLEAR_LENGTH);
_loc_6 = _loc_6 + CLEAR_LENGTH;
_loc_3 = _loc_3 + CLEAR_LENGTH;
_loc_6 = _loc_6 + this.cipher.update(param2, _loc_3, ENCRYPTED_LENGTH, _loc_5, _loc_6);
_loc_3 = _loc_3 + ENCRYPTED_LENGTH;
}
_loc_7 = param2.length - _loc_3;
this.cipher.update(param2, _loc_3, _loc_7, _loc_5, _loc_6);
var _loc_9:* = new ByteArray();
new ByteArray().writeBytes(_loc_5, PREPEND_PACKING_LENGTH, 0);
return _loc_9;
}// end function
}
}
|
|
|