Update 'README.md'

This commit is contained in:
hakzor 2022-04-17 21:14:46 +02:00
parent 4e7c08bff1
commit 885d7ca671
1 changed files with 140 additions and 1 deletions

141
README.md
View File

@ -1,3 +1,142 @@
# XilinxUnprotect
Decrypt Xilinx protected IP files.
Tool for removing content protection from vhdl and verilog files.
Xilinx, and other fpga tool suppliers use several kinds of content protection in their products.
## Xilinx method
In older versions of ISE Xilinx used their own scheme. The contents of the file was either only
compressed, or compressed and encrypted with a fixed key.
These files start with a magic string: `XlxV`.
## Verilog Protected Envelope
A method used by several manufacturers: Verilog Protected Envelope. This is standardized in IEEE P1735.
These files can be recognized by presence of the string: `pragma protect begin_protected`.
The private keys needed to decrypt are found by reverse engineering fpga toolchains.
If you find a file which can not yet be decoded by `xlxunprotect.py`, please open an issue here on github.
Currently keys for Xilinx, mentor and altera have been found.
## Usage
python xlxunprotect.py filelist
files will be output to stdout with content protection removed.
## Some statistics
Here is an overview of how many of various kinds of protected files i found in my ISE directory.
| occurence | protection type
| -----:| ------
| 824 | XILINX-XDB 0.1 STUB 0.1 ASCII.XILINX-XDM V1.6e
| 30 | XlxV32DM ( in XILINX-XDB 0.1 STUB 0.1 ASCII.XILINX-XDM V1.6 )
| 17 | XlxV35EB
| 4 | XlxV36EB
| 3816 | XlxV37EB
| 64 | XlxV38EB
| 5351 | XlxV50EB
| 15 | XlxV60EB
| 74 | XlxV61EB
| 34132 | XlxV64EB
| 6664 | XlxV65EB
| 189 | XlxVHYEB
| 0 | XlxVc1EB
| 0 | XlxVHLEB
| 3517 | `pragma protect
These have many different file extensions, but the most interesting:
| occurence | file
| -----:| ------
| 17747 | protected .v or .vhd
| 22517 | unprotected .v or .vhd
The Xilinx RSA keys
===================
The private keys for the vhdl content protection are stored in `.pem` files in the `/opt/Xilinx/14.7/ISE_DS/ISE/data` directory.
These private keys can be decrypted, for instance using openssl:
openssl rsa -passin pass:<longhexkey> -in xilinx.pem -out decrypted.pem
The filenames of the keys are: `xilinx_2048_pvt.pem`, `xilinx_3072_pvt.pem`, `xilinx_2013_09.pem`, `xilinx_2014_03.pem`.
The key for the first three is:
6e0380d8f8b58ae296366baab0a421fec94f87c6b6f6dc10id48625a6428f1b3464b27c0379304d09d157b3869bdcb2dc1a19c4d299027a9fc04bf09abc13f2
The key for the 2014 key is:
f8b58ae26ea380d82a1421fei6366ba1c94fh7c69d4h625ab6564c1a642hf1b33g9304d0464227c0i4157b38c1a19c4d6ibdcb242i9027aiabc13fb
The key for the 2015 key is:
6ea380d8f8b58ae22a1421feabc13fb
in 2016 Xilinx switched to using binary keys, you can no longer use the openssl commandline to decrypt these.
the 2017.1 key is: hex:`08 0f 07 05 6b 09 0a c1 08 0e f5 05 0c 01 0e 0a 07 ae 05 ba`
The encrypted certificates have become a bit more difficult to extract from the `libisl_iostreams` library,
I now found them by piecing together the chunks of base64 like text until they matched up to be a valid certificate.
The Xilinx download files
=========================
When installing a xilinx product, the installer will download many .xz archives. These are password protected, with the password:
www.Trebuchet.com
Since 2016.1, the password is: `www.theonion_saidnasser.com`
The password is now stored in the file `data/idata.dat`, in `idata.xml`, in the property named `archivePasswd`.
The `.dat` file is encrypted with this password:
Error, There was an unexpected error, code 00345~. See AR:342674 @ http://www.xilinx.com
You can find this by decompiling xinstaller, and look in IDataManager.java.
Links
=====
Previously this tool was published
* [as a gist](https://gist.github.com/anonymous/8de2917b7b305718e920)
* [on github](https://github.com/reversing-research/XilinxUnprotect)
* [on okis.ru](http://revres.okis.ru/)
* [now defunct onion](haklab4ulibiyeix.onion/revres/XilinxUnprotect)
Another tool decrypting `begin_protect` sections: [hdl_decrypt](https://github.com/hdl-writer/hdl_decrypt)
Encryption tools
================
* Aldec protectip
* Synplify encryptP1735.pl - on [pastebin](https://github.com/reversing-research/XilinxUnprotect/blob/master/pastebin.com/cdHTHBB1)
* Xilinx Encryption Tool
* Cadence ncprotect
TODO
+===
Find keys for the following:
* fixed AES-256 key named: `CDS_DATA_KEY` for Cadence Design Systems, tool: `ncprotect`
* fixed AES-128 key named: Model Technology tool: `DEV`
* rsa key named: `VCS001`
* rsa key named: `ALDEC08_001` for Aldec, tool: `protectip`, Riviera PRO
* rsa key named: `SYNP05_001` for Synplicity
* rsa key named: `SNPS-VCS-RSA-1` for Synopsys
* rsa key named: `cds_rsa_key` for Cadence Design Systems
* rsa key named: `MGC-PREC-RSA` for Mentor Graphics Corporation
* rsa key named: `ALDEC15_001` for Aldec