
    9c
                     n    d dl Z d dlZd dlZ G d dej                  j
                  j                        Zy)    Nc                   v    e Zd ZdZdgZdZdZdZdZdZ	ee	z   ez   Z
eZeez   Ze	Ze	ez   ZdZeZeZeZeZd Zd	 Zy
)ArcadyanDeobfuscatorzB
    Deobfuscator for known Arcadyan firmware obfuscation(s).
    	Signature   i       h   r   c                     | j                   j                  j                  r3| j                   j                  j                  dd| j                         y y )Nz^obfuscated arcadyan firmware
obfuscated)regex	extensioncmd)module	extractorenabledadd_rule)selfs    :/usr/lib/python3/dist-packages/binwalk/plugins/arcadyan.pyinitzArcadyanDeobfuscator.init"   sD    ;;  ((KK!!**1P&NN + $ )    c           	      b   d }t         j                  j                  |      }t        j                  j
                  j                  |d      }|j                  | j                        }|j                          t         j                  j                  |      | j                  kD  rt        d      t        |      | j                  k\  rx|| j                  | j                   }|| j                   | j"                   }|| j$                  | j&                   }|| j(                  | j*                   }|| j,                  d  }	||z   |z   |z   |	z   }d}
t/        | j                   | j"                        D ]7  }|
t1        t3        ||         dz  dz  t3        ||         dz  dz	  z         z  }
9 || j                  | j                   |
z   || j"                  d  z   }d}| j                   }|| j"                  k  r&|||dz      ||   z   z  }|dz  }|| j"                  k  r&|| j                  | j                   |z   || j"                  d  z   }|rot        j                  j
                  j                  t         j                  j5                  |      d	   d
z   d      }|j7                  |       |j                          yy)Nrbz5Input file too large for Arcadyan obfuscated firmware    r            r   z.deobfuscatedwbTF)ospathabspathbinwalkcorecommon	BlockFilereadMIN_FILE_SIZEclosegetsizeMAX_IMAGE_SIZE	ExceptionlenP1_STARTP1_ENDBLOCK1_START
BLOCK1_ENDP2_STARTP2_ENDBLOCK2_START
BLOCK2_ENDP3_STARTrangechrordsplitextwrite)r   fnamedeobfuscatedinfiler
   p1b1p2b2p3nswapibswapouts                 r   r   zArcadyanDeobfuscator.extractor(   s}   &$$..ud;[[!3!34
77??5!D$7$77STTz?d000DMM$++6BD--doo>BDMM$++6BD--doo>BDMMN+B7R<",r1L E4,,doo> js<?3d:q@c,WX/FZ]aFafgEghiij'dkk+-235A$//BR5STL E!!Adoo%a!e,|A>>Q doo% (dkk+-235A$//BR5STL ,,%%//1A1A%1H1Ko1]`deCIIl#IIKr   N)__name__
__module____qualname____doc__MODULESOBFUSCATION_MAGIC_SIZEr)   
BLOCK_SIZEBLOCK1_OFFSETBLOCK2_OFFSETr&   r.   r/   r2   r3   r,   r-   r0   r1   r4   r   r    r   r   r   r      sz     mGNJMM+m;jHM L
*J L+JHFHFH$*r   r   )r   binwalk.core.commonr!   binwalk.core.pluginr"   pluginPluginr   rO   r   r   <module>rT      s,    	  L7<<..55 Lr   