3
Ëã^w%  ã            \   @   st  d dl mZ d dlZd dlZd dlmZ d dljZd dl	m
Z
 dd„ Zdd„ Zd	d
„ Zdd„ Zdd„ Zy
eƒ ZW n   G dd„ deƒZY nX d dddddddddddddddd d!d"d#d$d%d&d'd(d)d*d+d,d-d.d/d0d1d2d3d4d5d6d7d8d9d:d;d<d=d>d?d@dAdBdCdDdEdFdGdHdIdJdKdLdMdNdOdPdQdRdSdTdUdVdWdXdYdZd[d\d]d^d_d`dadbdcdddeœUZdfedg< dhedi< djed< dked< dledj< dmedn< died< doedp< dqedr< dsedt< duedv< dwed0< dxed2< dyed5< dzed1< d{ed|< i Zd}d~„ Zyd dlmZ W n ek
rø   d€d„ ZY nX ed‚dƒ„ ƒZd‹d…d†„Zd‡dˆ„ Zed‰krpd dlZd dlZejd4krbe dŠej!j"ejd  ƒ ƒ ej#dƒ eejd ƒ dS )Œé    )Úprint_functionN)ÚPYTHON3)ÚCode2Compatc             C   s<   |d> |A d@ }||d? A }||d> A }| d | d d@ S )Né   l   ÿÿ é   é   iÍ i;Ëf© )ÚaÚbÚcr   r   úS/home/psgendb/BIRCHDEV/python/lib/python3.6/site-packages/xdis/dropbox/decrypt25.pyÚrng   s    r   c             C   s>   t | |ƒ}t || ƒ}t ||ƒ}t ||ƒ}t ||ƒ}||||fS )N)r   )r	   r
   ÚkaZkbZkcZkdZker   r   r   Úget_keys   s    




r   c             C   s<   | d? |d> A |d? | d> A  ||A ||d@ |A  | A  A S )Nr   é   é   é   r   )ÚzÚyÚsumÚkeyÚpÚer   r   r   ÚMX'   s    r   c       
   	   C   s¦   d}t | ƒ}dd|  }|| }| d }xx|dkr |d? d@ }xVt|d d	d
ƒD ]B}| || d |  }	| | t|	|||||ƒ d@ | |< | | }qPW ||8 }q*W | S )zt
    Tiny Decryption Algorithm decription (TEA)
    See https://en.wikipedia.org/wiki/Tiny_Encryption_Algorithm
    l   ¹yn< é   é4   r   r   r   é   l   ÿÿ éÿÿÿÿr   )ÚlenÚranger   )
Úvr   ZDELTAÚnÚroundsr   r   r   r   r   r   r   r   Útea_decipher-   s    
"r#   c       
      C   s  | j ƒ }| j ƒ }t||ƒ}|d d@ }|d }| j| j| j| … }ttjd| |ƒƒ}t||ƒ |  j|7  _tj	tj
d| f|žŽ ƒ}|jƒ }t|jƒ}	trÜt|j|j|j|j|	|j|j|j|j|j|j|j|j|jƒS tj|j|j|j|j|	|j|j|j|j|j|j|j|j|jƒS dS )zî
    Returns a Python code object like xdis.unmarshal.load_code(),
    but in we decrypt the data in self.bufstr.

    That is:
      * calculate the TEA key,
      * decrypt self.bufstr
      * create and return a Python code-object
    é   r   z<%dLNiðÿÿÿ)Úload_intr   ZbufstrZbufposÚlistÚstructÚunpackr#   ÚxmarshalÚ_FastUnmarshallerÚpackÚ	load_codeÚpatchÚco_coder   r   Úco_argcountÚ
co_nlocalsÚco_stacksizeÚco_flagsÚ	co_constsÚco_namesÚco_varnamesÚco_filenameÚco_nameÚco_firstlinenoÚ	co_lnotabÚco_freevarsÚco_cellvarsÚtypesÚCodeType)
Úselfr	   r
   r   ZpadsizeZintsizeÚdataÚobjÚcoder.   r   r   r   r,   A   sV    



r,   c               @   s4   e Zd Zdd„ Zdd„ Zdd„ Zdd„ Zd	d
„ ZdS )Ú	bytearrayc             C   s   t t|ƒ| _d S )N)ÚmapÚordÚl)r>   Úsr   r   r   Ú__init__   s    zbytearray.__init__c             C   s   || j |< d S )N)rE   )r>   ÚidxÚvalr   r   r   Ú__setitem__„   s    zbytearray.__setitem__c             C   s
   | j | S )N)rE   )r>   rH   r   r   r   Ú__getitem__‡   s    zbytearray.__getitem__c             C   s   dj tt| jƒƒS )NÚ )ÚjoinrC   ÚchrrE   )r>   r   r   r   Ú__str__Š   s    zbytearray.__str__c             C   s
   t | jƒS )N)r   rE   )r>   r   r   r   Ú__len__   s    zbytearray.__len__N)Ú__name__Ú
__module__Ú__qualname__rG   rJ   rK   rO   rP   r   r   r   r   rB   €   s
   rB   éW   éB   é   é7   é>   éG   éO   é   r   éH   r   é   é   é    é!   é?   éV   é8   é<   éI   r$   éJ   é   é   éD   éP   é   éY   é   é@   éR   é   é   é   éT   r   r   é(   é)   é*   é+   éU   éS   éX   é   é=   ét   é~   éd   én   éx   éz   é„   é…   éh   ée   éf   é]   é}   éo   é_   é†   éi   ék   él   ép   é‚   é|   é\   é[   éZ   é‡   éˆ   é‰   éj   éƒ   éq   éc   éa   éy   ég   éŒ   é   éŽ   )Ur   r   r   r   r   é   é	   é
   rh   r   é   r$   é   r   r{   é   rk   rm   é   r^   r`   é"   é#   é$   é&   é'   rt   ru   rv   rw   é2   é3   r   é6   rW   rc   é;   rd   r|   rX   ra   rn   éA   rU   éC   ri   éE   éF   rY   r\   re   rf   éK   éL   éM   éN   rZ   rj   éQ   ro   ry   rs   rx   rb   rz   rl   r•   r”   r“   rˆ   é^   r‹   r   rœ   r   r†   r‡   rŸ   r…   r   r™   rŽ   rŠ   r   r›   r»   é%   r¨   é   é`   r³   éw   é9   é   r¯   é,   r°   é-   r   é.   é5   é/   rº   r¹   r²   r·   r¸   é:   c             C   s    t | ƒ} d}t| ƒ}xv||k rŠ| | }|tkrXtd| tt| ƒƒƒ tj|dƒd t|< tj||ƒ| |< |d7 }tj||ƒdkr|d7 }qW tr˜t	| ƒS t| ƒS )Nr   zmissing opcode %d. code: r   r•   r   )
rB   r   ÚtableÚprintÚreprÚstrÚmissesÚgetr   Úbytes)rA   Úir!   Úopr   r   r   r-     s    
r-   )Ú
builtinifyc             C   s   | S )Nr   )Úfr   r   r   Ú<lambda>  s    rÔ   c             C   s   t j| ƒ}t|jt j< |jƒ S )zp
    xdis.marshal.load() but with its dispatch load_code() function replaced
    with our decoding version.
    )r)   r*   r,   ÚdispatchZ	TYPE_CODEÚload)rF   Zumr   r   r   Úloads  s    
r×   ú/tmp/test.pycc             C   sR   t jd| jdƒƒd }| jdƒ}t jd|ƒd }| jƒ }t|ƒ}d|d|d|d fS )NÚIr   r   g      @i³ò  F)r'   r(   Úreadr×   )ÚfpZ	fixed_pycÚsource_sizeÚtsÚ	timestampr
   Úcor   r   r   Úfix_dropbox_pyc#  s    
rà   c       	      C   sÖ   dd l }xÈ|j| ƒD ]º\}}}x®|D ]¦}|jdƒs4q$|jj||ƒ}td|ƒ t|ƒjƒ }ytj	|dd … ƒ}W n4 t
k
r¢ } ztd|t|ƒƒ w$W Y d d }~X nX t|dƒjd|dd…  tj|ƒ ƒ q$W qW d S )	Nr   ZpycZfixingrÂ   ÚerrorÚwu   Â³Ã²
r   )ÚosÚwalkÚendswithÚpathrM   rÊ   ÚopenrÚ   r)   r×   Ú	ExceptionrË   ÚwriteÚdumps)	ræ   rã   ÚrootÚdirsÚfilesÚnamer?   r   r   r   r   r   Úfix_dir,  s    


rï   Ú__main__zUsage: %s python-file)rØ   )$Ú
__future__r   r<   r'   Zxdis.version_infor   Z
xdis.marshZmarshr)   Zxdis.codetyper   r   r   r   r#   r,   rB   r	   ÚobjectrÉ   rÍ   r-   Z__pypy__rÒ   ÚImportErrorr×   rà   rï   rQ   rã   ÚsysÚargvrÊ   ræ   ÚbasenameÚexitr   r   r   r   Ú<module>	   s  
	;

	

