Skip to content

Commit

Permalink
Implement Battle.Net Key Analyzer
Browse files Browse the repository at this point in the history
  • Loading branch information
DaRuudii committed Oct 6, 2019
1 parent 7c0942e commit 8927204
Show file tree
Hide file tree
Showing 3 changed files with 66 additions and 1 deletion.
4 changes: 3 additions & 1 deletion pastepwn/analyzers/__init__.py
Original file line number Diff line number Diff line change
Expand Up @@ -18,6 +18,7 @@
from .phonenumberanalyzer import PhoneNumberAnalyzer
from .steamkeyanalyzer import SteamKeyAnalyzer
from .uplaykeyanalyzer import UplayKeyAnalyzer
from .battlenetanalyzer import BattleNetKeyAnalyzer

__all__ = (
'AlwaysTrueAnalyzer',
Expand All @@ -38,5 +39,6 @@
'PrivateKeyAnalyzer',
'PhoneNumberAnalyzer',
'SteamKeyAnalyzer',
'UplayKeyAnalyzer'
'UplayKeyAnalyzer',
'BattleNetKeyAnalyzer'
)
14 changes: 14 additions & 0 deletions pastepwn/analyzers/battlenetkeyanalyzer.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,14 @@
# -*- coding: utf-8 -*-
from .regexanalyzer import RegexAnalyzer


class BattleNetKeyAnalyzer(RegexAnalyzer):
"""
Analyzer to match battle.net keys via regex
"""
name = "BattleNetKeyAnalyzer"

def __init__(self, actions):
# battle.net activation page shows 4-4-4-4 format, but there are also codes in the 4-4-5-4-4 format which work
regex = r"\b([A-Z0-9]{4}\-[A-Z0-9]{4}\-[A-Z0-9]{4}\-[A-Z0-9]{4}|[A-Z0-9]{4}\-[A-Z0-9]{4}\-[A-Z0-9]{5}\-[A-Z0-9]{4}\-[A-Z0-9]{4})\b"
super().__init__(actions, regex)
49 changes: 49 additions & 0 deletions pastepwn/analyzers/tests/battlenetkeyanalyzer_test.py
Original file line number Diff line number Diff line change
@@ -0,0 +1,49 @@
# -*- coding: utf-8 -*-
import unittest
from unittest import mock

from pastepwn.analyzers.battlenetkeyanalyzer import BattleNetKeyAnalyzer


class TestBattleNetKeyAnalyzer(unittest.TestCase):
def setUp(self):
self.analyzer = BattleNetKeyAnalyzer(None)
self.paste = mock.Mock()

def test_match_positive(self):
"""Test if positives are recognized"""
# working battlenet key in 4-4-5-4-4 format
self.paste.body = "NGM5-XB9P-8TLTR-V8BH-QFSW"
self.assertTrue(self.analyzer.match(self.paste))

# key in 4-4-4-4 format
self.paste.body = "MB9C-LV3C-4RG8-FME8"
self.assertTrue(self.analyzer.match(self.paste))

# part of a sentence
self.paste.body = "Hey, I have your key right here: MB9C-LV3C-4RG8-FME8!"
self.assertTrue(self.analyzer.match(self.paste))

# Newline seperated keys
self.paste.body = "MB9C-LV3C-4RG8-FME8\nNGM5-XB9P-8TLTR-V8BH-QFSW"
self.assertTrue(self.analyzer.match(self.paste))

def test_match_negative(self):
"""Test if negatives are not recognized"""
self.paste.body = ""
self.assertFalse(self.analyzer.match(self.paste))

self.paste.body = None
self.assertFalse(self.analyzer.match(self.paste))

# Invalid length
self.paste.body = "MB9AC-LV3C-4RG8-FME8"
self.assertFalse(self.analyzer.match(self.paste))

# Lower-case
self.paste.body = "mb9c-lv3c-4rg8-fme8"
self.assertFalse(self.analyzer.match(self.paste))


if __name__ == '__main__':
unittest.main()

0 comments on commit 8927204

Please sign in to comment.