For every CONNECT request from SOCKS, we do:
- negotiate with server using password
- when succeeded, get a random cipher from server
- use this cipher to fuzzy the following TCP streams
for detail protocol infomation, see protocol.md.
In step(1), we MUST encrypt the password, in a way that even some evil man in the middle capture the packet, they CAN NOT:
- restore the plain text infomation from the packet
- replay the negotiation using the packet
We assume that most of the websites supported HTTPS at precent, therefor strong encryption for streams is unnecessary and we just do some simple fuzzy such as xor mapping to avoid keyword detection. However, it's hackable, and you can roll your own quite easily.
- Prevent idle TCP connection(using timeout)
- Prevent brute force attack(blacklist ip manually/automaticly)
It's just for fuzzing, doesn't matter if it's CRACKED if our payload is encrypted by upper layer(such as HTTPS).
- Base16
- Base32
- Base64
- Base85
- XXEncode
- UUEncode
- Atbash Cipher
-
XOR
-
Rail-Fence Cipher
-
Caesar Cipher
-
Curve Cipher
-
Columnar Transposition Cipher
-
Vigenère Cipher
-
Autokey Cipher
-
Beaufort Cipher
-
Running Key Cipher
-
ROT5/13/18/47
-
Simple Substitution Cipher
-
Hill Cipher
-
Pigpen Cipher
-
Polybius Square Cipher
-
ADFGX Cipher
-
Playfair Cipher
-
Porta Cipher
-
Homophonic Substitution Cipher
-
Affine Cipher
-
Baconian Cipher
-
Bifid Cipher
-
Trifid Cipher
-
Four-Square Cipher
-
Checkerboard Cipher
-
Straddle Checkerboard Cipher
-
Fractionated Morse Cipher
-
Bazeries Cipher
-
Digrafid Cipher
-
Beale Cipher
-
to be more ...