|
22 | 22 | from scapy.base_classes import Net
|
23 | 23 | from scapy.compat import bytes_encode, chb, plain_str
|
24 | 24 | from scapy.utils import corrupt_bits, corrupt_bytes
|
25 |
| -from scapy.libs.six.moves import zip_longest |
26 | 25 |
|
27 | 26 | from scapy.compat import (
|
28 | 27 | List,
|
@@ -1412,115 +1411,3 @@ class CorruptedBits(CorruptedBytes):
|
1412 | 1411 | def _fix(self):
|
1413 | 1412 | # type: () -> bytes
|
1414 | 1413 | return corrupt_bits(self.s, self.p, self.n)
|
1415 |
| - |
1416 |
| - |
1417 |
| -class CyclicPattern(VolatileValue[bytes]): |
1418 |
| - """ |
1419 |
| - Generate a cyclic pattern |
1420 |
| -
|
1421 |
| - :param size: Size of generated pattern. Default is random size. |
1422 |
| - :param start: Start offset of the generated pattern. |
1423 |
| - :param charset_type: Charset types: |
1424 |
| - 0: basic (0-9A-Za-z) |
1425 |
| - 1: extended |
1426 |
| - 2: maximum (almost printable chars) |
1427 |
| -
|
1428 |
| -
|
1429 |
| - The code of this class was inspired by |
1430 |
| -
|
1431 |
| - PEDA - Python Exploit Development Assistance for GDB |
1432 |
| - Copyright (C) 2012 Long Le Dinh <longld at vnsecurity.net> |
1433 |
| - License: This work is licensed under a Creative Commons |
1434 |
| - Attribution-NonCommercial-ShareAlike 3.0 Unported License. |
1435 |
| - """ |
1436 |
| - |
1437 |
| - @staticmethod |
1438 |
| - def cyclic_pattern_charset(charset_type=None): |
1439 |
| - # type: (Optional[int]) -> str |
1440 |
| - """ |
1441 |
| - :param charset_type: charset type |
1442 |
| - 0: basic (0-9A-Za-z) |
1443 |
| - 1: extended (default) |
1444 |
| - 2: maximum (almost printable chars) |
1445 |
| - :return: list of charset |
1446 |
| - """ |
1447 |
| - |
1448 |
| - charset = \ |
1449 |
| - [string.ascii_uppercase, string.ascii_lowercase, string.digits] |
1450 |
| - |
1451 |
| - if charset_type == 1: # extended type |
1452 |
| - charset[1] = "%$-;" + re.sub("[sn]", "", charset[1]) |
1453 |
| - charset[2] = "sn()" + charset[2] |
1454 |
| - |
1455 |
| - if charset_type == 2: # maximum type |
1456 |
| - charset += [string.punctuation] |
1457 |
| - |
1458 |
| - return "".join( |
1459 |
| - ["".join(k) for k in zip_longest(*charset, fillvalue="")]) |
1460 |
| - |
1461 |
| - @staticmethod |
1462 |
| - def de_bruijn(charset, n, maxlen): |
1463 |
| - # type: (str, int, int) -> str |
1464 |
| - """ |
1465 |
| - Generate the De Bruijn Sequence up to `maxlen` characters |
1466 |
| - for the charset `charset` and subsequences of length `n`. |
1467 |
| - Algorithm modified from wikipedia |
1468 |
| - https://en.wikipedia.org/wiki/De_Bruijn_sequence |
1469 |
| - """ |
1470 |
| - k = len(charset) |
1471 |
| - a = [0] * k * n |
1472 |
| - sequence = [] # type: List[str] |
1473 |
| - |
1474 |
| - def db(t, p): |
1475 |
| - # type: (int, int) -> None |
1476 |
| - if len(sequence) == maxlen: |
1477 |
| - return |
1478 |
| - |
1479 |
| - if t > n: |
1480 |
| - if n % p == 0: |
1481 |
| - for j in range(1, p + 1): |
1482 |
| - sequence.append(charset[a[j]]) |
1483 |
| - if len(sequence) == maxlen: |
1484 |
| - return |
1485 |
| - else: |
1486 |
| - a[t] = a[t - p] |
1487 |
| - db(t + 1, p) |
1488 |
| - for j in range(a[t - p] + 1, k): |
1489 |
| - a[t] = j |
1490 |
| - db(t + 1, t) |
1491 |
| - |
1492 |
| - db(1, 1) |
1493 |
| - return ''.join(sequence) |
1494 |
| - |
1495 |
| - def __init__(self, size=None, start=0, charset_type=None): |
1496 |
| - # type: (Optional[int], int, Optional[int]) -> None |
1497 |
| - self.size = size if size is not None else RandNumExpo(0.01) |
1498 |
| - self.start = start |
1499 |
| - self.charset_type = charset_type |
1500 |
| - |
1501 |
| - def _command_args(self): |
1502 |
| - # type: () -> str |
1503 |
| - ret = "" |
1504 |
| - if isinstance(self.size, VolatileValue): |
1505 |
| - if self.size.lambd != 0.01 or self.size.base != 0: |
1506 |
| - ret += "size=%r" % self.size.command() |
1507 |
| - else: |
1508 |
| - ret += "size=%r" % self.size |
1509 |
| - |
1510 |
| - if self.start != 0: |
1511 |
| - ret += ", start=%r" % self.start |
1512 |
| - |
1513 |
| - if self.charset_type: |
1514 |
| - ret += ", charset_type=%r" % self.charset_type |
1515 |
| - |
1516 |
| - return ret |
1517 |
| - |
1518 |
| - def _fix(self): |
1519 |
| - # type: () -> bytes |
1520 |
| - if isinstance(self.size, VolatileValue): |
1521 |
| - size = self.size._fix() |
1522 |
| - else: |
1523 |
| - size = self.size |
1524 |
| - charset = self.cyclic_pattern_charset(self.charset_type or 0) |
1525 |
| - pattern = self.de_bruijn(charset, 3, size + self.start) |
1526 |
| - return pattern[self.start:size + self.start].encode('utf-8') |
0 commit comments