Code Monkey home page Code Monkey logo

xilinx-unprotect's Introduction

XilinxUnprotect

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

Another tool decrypting begin_protect sections: hdl_decrypt

Encryption tools

  • Aldec protectip
  • Synplify encryptP1735.pl - on pastebin
  • 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

xilinx-unprotect's People

Contributors

merlinepedra avatar

Stargazers

 avatar  avatar  avatar 摸鱼真人 avatar  avatar Gaspacho25 avatar  avatar

Watchers

 avatar

Forkers

iceshy

xilinx-unprotect's Issues

Could you please update the readme file,thanks

Hi merlinepedra

I'm interested in your scripts, But it seems that readme file out of date. Could you please update it.
And i also want to know did you find out the other keys which listed in TODO section of readme file.
thanks

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    🖖 Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. 📊📈🎉

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google ❤️ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.