Jump to content

Decompilar Python (2.5)


MasterGipy
 Share

Recommended Posts

É possível reaver o código de um ficheiro .pyc?

Tentei usar este software:

http://code.google.com/p/unpyc/

(mas sem sucesso)

Se conhecerem outra forma melhor e gratuita...

edit:

Encontrei uma forma gratuita.

Agora deparei-me com outro problema. É possível reaver o código de um script compilado com py2exe (Python 2.5)?

Link to comment
Share on other sites

Boas!

Consegues apartir de um .pyc retirar o código fonte? Podes meter aqui um exemplo simples do tipo, o código inicial e depois o código que resultou da desconpilação do .pyc?

Em relação á tua questão, ja vi noutros lados dizerem que é possível, mas não vi nem diziam como se faz... Mas tenhos as minhas dúvidas... Penso que é muito mais dificil do que de com os bytcodes

Cumps

Link to comment
Share on other sites

Exemplo:

stat.py

"""Constants/functions for interpreting results of os.stat() and os.lstat().

Suggested usage: from stat import *
"""

# Indices for stat struct members in the tuple returned by os.stat()

ST_MODE  = 0
ST_INO   = 1
ST_DEV   = 2
ST_NLINK = 3
ST_UID   = 4
ST_GID   = 5
ST_SIZE  = 6
ST_ATIME = 7
ST_MTIME = 8
ST_CTIME = 9

# Extract bits from the mode

def S_IMODE(mode):
    return mode & 07777

def S_IFMT(mode):
    return mode & 0170000

# Constants used as S_IFMT() for various file types
# (not all are implemented on all systems)

S_IFDIR  = 0040000
S_IFCHR  = 0020000
S_IFBLK  = 0060000
S_IFREG  = 0100000
S_IFIFO  = 0010000
S_IFLNK  = 0120000
S_IFSOCK = 0140000

# Functions to test for each file type

def S_ISDIR(mode):
    return S_IFMT(mode) == S_IFDIR

def S_ISCHR(mode):
    return S_IFMT(mode) == S_IFCHR

def S_ISBLK(mode):
    return S_IFMT(mode) == S_IFBLK

def S_ISREG(mode):
    return S_IFMT(mode) == S_IFREG

def S_ISFIFO(mode):
    return S_IFMT(mode) == S_IFIFO

def S_ISLNK(mode):
    return S_IFMT(mode) == S_IFLNK

def S_ISSOCK(mode):
    return S_IFMT(mode) == S_IFSOCK

# Names for permission bits

S_ISUID = 04000
S_ISGID = 02000
S_ENFMT = S_ISGID
S_ISVTX = 01000
S_IREAD = 00400
S_IWRITE = 00200
S_IEXEC = 00100
S_IRWXU = 00700
S_IRUSR = 00400
S_IWUSR = 00200
S_IXUSR = 00100
S_IRWXG = 00070
S_IRGRP = 00040
S_IWGRP = 00020
S_IXGRP = 00010
S_IRWXO = 00007
S_IROTH = 00004
S_IWOTH = 00002
S_IXOTH = 00001

# Names for file flags

UF_NODUMP    = 0x00000001
UF_IMMUTABLE = 0x00000002
UF_APPEND    = 0x00000004
UF_OPAQUE    = 0x00000008
UF_NOUNLINK  = 0x00000010
SF_ARCHIVED  = 0x00010000
SF_IMMUTABLE = 0x00020000
SF_APPEND    = 0x00040000
SF_NOUNLINK  = 0x00100000
SF_SNAPSHOT  = 0x00200000

stat.pyc (decompilado)

"""Constants/functions for interpreting results of os.stat() and os.lstat().

Suggested usage: from stat import *
"""
ST_MODE = 0
ST_INO = 1
ST_DEV = 2
ST_NLINK = 3
ST_UID = 4
ST_GID = 5
ST_SIZE = 6
ST_ATIME = 7
ST_MTIME = 8
ST_CTIME = 9

def S_IMODE(mode):
    return (mode & 4095)



def S_IFMT(mode):
    return (mode & 61440)


S_IFDIR = 16384
S_IFCHR = 8192
S_IFBLK = 24576
S_IFREG = 32768
S_IFIFO = 4096
S_IFLNK = 40960
S_IFSOCK = 49152

def S_ISDIR(mode):
    return (S_IFMT(mode) == S_IFDIR)



def S_ISCHR(mode):
    return (S_IFMT(mode) == S_IFCHR)



def S_ISBLK(mode):
    return (S_IFMT(mode) == S_IFBLK)



def S_ISREG(mode):
    return (S_IFMT(mode) == S_IFREG)



def S_ISFIFO(mode):
    return (S_IFMT(mode) == S_IFIFO)



def S_ISLNK(mode):
    return (S_IFMT(mode) == S_IFLNK)



def S_ISSOCK(mode):
    return (S_IFMT(mode) == S_IFSOCK)


S_ISUID = 2048
S_ISGID = 1024
S_ENFMT = S_ISGID
S_ISVTX = 512
S_IREAD = 256
S_IWRITE = 128
S_IEXEC = 64
S_IRWXU = 448
S_IRUSR = 256
S_IWUSR = 128
S_IXUSR = 64
S_IRWXG = 56
S_IRGRP = 32
S_IWGRP = 16
S_IXGRP = 8
S_IRWXO = 7
S_IROTH = 4
S_IWOTH = 2
S_IXOTH = 1
UF_NODUMP = 1
UF_IMMUTABLE = 2
UF_APPEND = 4
UF_OPAQUE = 8
UF_NOUNLINK = 16
SF_ARCHIVED = 65536
SF_IMMUTABLE = 131072
SF_APPEND = 262144
SF_NOUNLINK = 1048576
SF_SNAPSHOT = 2097152

#+++ okay decompyling
# decompiled 1 files: 1 okay, 0 failed, 0 verify failed

Vi num forum um user que disse isto:

In older versions of py2exe (haven't tried it for new ones) I only had

to drag the py2exe created file to my zip archiever program window.

That somehow got the program to treat the py2exe application as a zip

archieve effectively decompressing it right there in the window of the

program. This enabled me to extract the files if I wish to do so to any

place I want.

This is also valid, I noted, for the binary distributions created for

windows

by the distutils.

A.B., Khalid

Testei com o 7-ZIP e funcionou (até fiquei parvo xD)

Mas esse decompilador só funciona com ficheiros .pyc qual é a diferença entre esses e os .pyo

É que preciso de decompilar .pyo e não sei como :S

Edit: encontrei um outro decompilador, mas só suporta até 5kb

http://www.depython.net/

Link to comment
Share on other sites

Ficou praticamente igual. Sera que com códigos mais complicados também fica assim? Eu testei com uns programas que aqui tinha e não ficou nada de jeito... Mas também não era python2.5...

Funciona com o 7-zip?lol Pensei que era mais complicado...

Os .pyo pelo que sei são extenções em C ou C++... não sei se pode ser de outra linguagem. Por isso deve ser complicado decompilalos...

Cumps

Link to comment
Share on other sites

Pois...

http://www.depython.net/  -> este nao tem limites de tamanho só processa apenas .pyc

http://www.depython.com/ -> este processa .pyc e .pyo mas tem limite de 5kb

Eu preciso de decompilar .pyo

Já decompilei alguns .pyo com tamanho entre (1-5kb) e o resultado foi muito bom...

Mas alguns ficheiros têm 100kb e não arranjo forma de os decomiplar  🙂

Se alguém  souber de uma forma...  😉

Link to comment
Share on other sites

http://sourceforge.net/projects/decompyle/

É possível fazer com que este programa decompile python 2.5?

É que só está apto para 2.3

Se fizerem um serviço online para decompilar python é que era magnifico. Aqui fica a sugestão, pode não ser o local mais indicado mas é aqui que os programadores de Python normalmente costumam vir.

O que acham?

Link to comment
Share on other sites

http://sourceforge.net/projects/decompyle/

É possível fazer com que este programa decompile python 2.5?

É que só está apto para 2.3

Se fizerem um serviço online para decompilar python é que era magnifico. Aqui fica a sugestão, pode não ser o local mais indicado mas é aqui que os programadores de Python normalmente costumam vir.

O que acham?

Se pagares para alguém trabalhar uns mesitos num serviço desses, tenho a certeza que existem programadores que o fazem.

<3 life

Link to comment
Share on other sites

Tentei instalar decompyle_2.3.2 no Linux debian 2.6.26-2-686 tenho o python2.5 instalado

E obtive este erro...

debian:~/Desktop/decompyle-2.3.2.orig# ./setup.py install
running install
running build
running build_py
running build_ext
building 'decompyle/marshal_20' extension
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.5 -c decompyle/marshal_20.c -o build/temp.linux-i686-2.5/decompyle/marshal_20.o
decompyle/marshal_20.c:8:20: error: Python.h: Arquivo ou diretório não encontrado
decompyle/marshal_20.c:9:25: error: longintrepr.h: Arquivo ou diretório não encontrado
decompyle/marshal_20.c:10:21: error: compile.h: Arquivo ou diretório não encontrado
decompyle/marshal_20.c:11:21: error: marshal.h: Arquivo ou diretório não encontrado
decompyle/marshal_20.c:37: error: expected specifier-qualifier-list before âFILEâ
decompyle/marshal_20.c: In function âw_moreâ:
decompyle/marshal_20.c:54: error: âWFILEâ has no member named âstrâ
decompyle/marshal_20.c:54: error: âNULLâ undeclared (first use in this function)
decompyle/marshal_20.c:54: error: (Each undeclared identifier is reported only once
decompyle/marshal_20.c:54: error: for each function it appears in.)
decompyle/marshal_20.c:56: warning: implicit declaration of function âPyString_Sizeâ
decompyle/marshal_20.c:56: error: âWFILEâ has no member named âstrâ
decompyle/marshal_20.c:58: warning: implicit declaration of function â_PyString_Resizeâ
decompyle/marshal_20.c:58: error: âWFILEâ has no member named âstrâ
decompyle/marshal_20.c:59: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:59: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:62: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:62: warning: implicit declaration of function âPyString_AS_STRINGâ
decompyle/marshal_20.c:62: error: âPyStringObjectâ undeclared (first use in this function)
decompyle/marshal_20.c:62: error: expected expression before â)â token
decompyle/marshal_20.c:63: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:64: error: expected expression before â)â token
decompyle/marshal_20.c:65: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:65: warning: implicit declaration of function âPy_SAFE_DOWNCASTâ
decompyle/marshal_20.c:65: error: expected expression before âintâ
decompyle/marshal_20.c: In function âw_stringâ:
decompyle/marshal_20.c:72: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:72: error: âNULLâ undeclared (first use in this function)
decompyle/marshal_20.c:73: warning: implicit declaration of function âfwriteâ
decompyle/marshal_20.c:73: warning: incompatible implicit declaration of built-in function âfwriteâ
decompyle/marshal_20.c:73: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:77: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:77: warning: implicit declaration of function âputcâ
decompyle/marshal_20.c:77: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:77: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:77: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:77: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c: In function âw_shortâ:
decompyle/marshal_20.c:86: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:86: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:86: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:86: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:86: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:87: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:87: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:87: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:87: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:87: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c: In function âw_longâ:
decompyle/marshal_20.c:93: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:93: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:93: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:93: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:93: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:94: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:94: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:94: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:94: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:94: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:95: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:95: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:95: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:95: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:95: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:96: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:96: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:96: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c:96: error: âWFILEâ has no member named âendâ
decompyle/marshal_20.c:96: error: âWFILEâ has no member named âptrâ
decompyle/marshal_20.c: At top level:
decompyle/marshal_20.c:109: error: expected â)â before â*â token
decompyle/marshal_20.c:270: error: expected declaration specifiers or â...â before âFILEâ
decompyle/marshal_20.c: In function âPyMarshal_WriteLongToFileâ:
decompyle/marshal_20.c:273: error: âWFILEâ has no member named âfpâ
decompyle/marshal_20.c:273: error: âfpâ undeclared (first use in this function)
decompyle/marshal_20.c:274: error: âWFILEâ has no member named âerrorâ
decompyle/marshal_20.c:275: error: âWFILEâ has no member named âdepthâ
decompyle/marshal_20.c: At top level:
decompyle/marshal_20.c:280: error: expected â)â before â*â token
decompyle/marshal_20.c: In function âr_stringâ:
decompyle/marshal_20.c:298: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:298: error: âNULLâ undeclared (first use in this function)
decompyle/marshal_20.c:299: warning: implicit declaration of function âfreadâ
decompyle/marshal_20.c:299: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:300: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:300: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:301: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:301: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:302: warning: implicit declaration of function âmemcpyâ
decompyle/marshal_20.c:302: warning: incompatible implicit declaration of built-in function âmemcpyâ
decompyle/marshal_20.c:302: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:303: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c: In function âr_shortâ:
decompyle/marshal_20.c:311: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:311: warning: implicit declaration of function âgetcâ
decompyle/marshal_20.c:311: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:311: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:311: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:311: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:311: error: âEOFâ undeclared (first use in this function)
decompyle/marshal_20.c:312: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:312: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:312: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:312: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:312: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c: In function âr_longâ:
decompyle/marshal_20.c:322: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:322: error: âfpâ undeclared (first use in this function)
decompyle/marshal_20.c:322: error: âRFILEâ has no member named âfpâ
decompyle/marshal_20.c:330: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:330: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:330: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:330: error: âEOFâ undeclared (first use in this function)
decompyle/marshal_20.c:331: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:331: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:331: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:332: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:332: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:332: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:333: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c:333: error: âRFILEâ has no member named âendâ
decompyle/marshal_20.c:333: error: âRFILEâ has no member named âptrâ
decompyle/marshal_20.c: At top level:
decompyle/marshal_20.c:349: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:373: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:636: error: expected â)â before â*â token
decompyle/marshal_20.c:644: error: expected â)â before â*â token
decompyle/marshal_20.c:670: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:714: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:726: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:741: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:770: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:799: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:824: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:833: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before â*â token
decompyle/marshal_20.c:855: error: expected â=â, â,â, â;â, âasmâ or â__attribute__â before âmarshal_methodsâ
decompyle/marshal_20.c: In function âinitmarshal_20â:
decompyle/marshal_20.c:866: warning: implicit declaration of function âPy_InitModuleâ
decompyle/marshal_20.c:866: error: âmarshal_methodsâ undeclared (first use in this function)
error: command 'gcc' failed with exit status 1

O que estou a fazer de errado?

Link to comment
Share on other sites

Instalei mas agora o erro é outro  :wallbash:

root:~# apt-get install python-dev
A ler as listas de pacotes... Pronto
A construir árvore de dependências       
A ler a informação de estado... Pronto
Os seguintes pacotes extra serão instalados:
  python2.5-dev
Serão instalados os seguintes NOVOS pacotes:
  python-dev python2.5-dev
0 pacotes actualizados, 2 pacotes novos instalados, 0 a remover e 0 não actualizados.
É necessário obter 1899kB de arquivos.
Após esta operação, serão utilizados 5620kB adicionais de espaço em disco.
Deseja continuar [Y/n]? Y
Obter:1 http://ftp.pt.debian.org lenny/main python2.5-dev 2.5.2-15 [1898kB]
Obter:2 http://ftp.pt.debian.org lenny/main python-dev 2.5.2-3 [928B]
Obtidos 1899kB em 1s (971kB/s)
A seleccionar pacote anteriormente não seleccionado python2.5-dev
(A ler a base de dados ... 93875 ficheiros e directórios actualmente instalados.)
A descompactar python2.5-dev (desde .../python2.5-dev_2.5.2-15_i386.deb) ...
A seleccionar pacote anteriormente não seleccionado python-dev
A descompactar python-dev (desde .../python-dev_2.5.2-3_all.deb) ...
A instalar python2.5-dev (2.5.2-15) ...
A instalar python-dev (2.5.2-3) ...

O erro:


root:~/Desktop/decompyle-2.3.2.orig# ./setup.py install
running install
running build
running build_py
creating build
creating build/lib.linux-i686-2.5
creating build/lib.linux-i686-2.5/decompyle
copying decompyle/Scanner.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/opcode_23.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_files.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_21.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/verify.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/marshal_files.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/spark.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_22.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/Walker.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_20.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/__init__.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/magics.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_15.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_16.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/Parser.py -> build/lib.linux-i686-2.5/decompyle
copying decompyle/dis_23.py -> build/lib.linux-i686-2.5/decompyle
running build_ext
building 'decompyle/marshal_20' extension
creating build/temp.linux-i686-2.5
creating build/temp.linux-i686-2.5/decompyle
gcc -pthread -fno-strict-aliasing -DNDEBUG -g -fwrapv -O2 -Wall -Wstrict-prototypes -fPIC -I/usr/include/python2.5 -c decompyle/marshal_20.c -o build/temp.linux-i686-2.5/decompyle/marshal_20.o
decompyle/marshal_20.c:270: error: conflicting types for ‘PyMarshal_WriteLongToFile’
/usr/include/python2.5/marshal.h:12: error: previous declaration of ‘PyMarshal_WriteLongToFile’ was here
decompyle/marshal_20.c:280: error: conflicting types for ‘PyMarshal_WriteObjectToFile’
/usr/include/python2.5/marshal.h:13: error: previous declaration of ‘PyMarshal_WriteObjectToFile’ was here
decompyle/marshal_20.c:742: error: conflicting types for ‘PyMarshal_WriteObjectToString’
/usr/include/python2.5/marshal.h:14: error: previous declaration of ‘PyMarshal_WriteObjectToString’ was here
error: command 'gcc' failed with exit status 1

Link to comment
Share on other sites

Create an account or sign in to comment

You need to be a member in order to leave a comment

Create an account

Sign up for a new account in our community. It's easy!

Register a new account

Sign in

Already have an account? Sign in here.

Sign In Now
 Share

×
×
  • Create New...

Important Information

By using this site you accept our Terms of Use and Privacy Policy. We have placed cookies on your device to help make this website better. You can adjust your cookie settings, otherwise we'll assume you're okay to continue.