mirror of https://github.com/MISP/misp-modules
97 lines
3.3 KiB
Python
Executable File
97 lines
3.3 KiB
Python
Executable File
#!/usr/bin/env python
|
|
|
|
import requests
|
|
import logging
|
|
import os
|
|
# import pprint
|
|
|
|
copyright = """
|
|
Copyright 2019 (C) by Aaron Kaplan <aaron@lo-res.org>, all rights reserved.
|
|
This file is part of the ransomwarecoindDB project and licensed under the AGPL 3.0 license
|
|
"""
|
|
|
|
__version__ = 0.1
|
|
|
|
|
|
baseurl = "https://ransomcoindb.concinnity-risks.com/api/v1/"
|
|
user_agent = "ransomcoindb client via python-requests/%s" % requests.__version__
|
|
|
|
urls = {'BTC': {'btc': baseurl + 'bin2btc/',
|
|
'md5': baseurl + 'bin2btc/md5/',
|
|
'sha1': baseurl + 'bin2btc/sha1/',
|
|
'sha256': baseurl + 'bin2btc/sha256/',
|
|
},
|
|
'XMR': {'xmr': baseurl + 'bin2crypto/XMR/',
|
|
'md5': baseurl + 'bin2crypto/XMR/md5/',
|
|
'sha1': baseurl + 'bin2crypto/XMR/sha1/',
|
|
'sha256': baseurl + 'bin2crypto/XMR/sha256/',
|
|
}
|
|
}
|
|
|
|
|
|
def get_data_by(coin: str, key: str, value: str, api_key: str):
|
|
"""
|
|
Abstract function to fetch data from the bin2btc/{key} endpoint.
|
|
This function must be made concrete by generating a relevant function.
|
|
See below for examples.
|
|
"""
|
|
|
|
# pprint.pprint("api-key: %s" % api_key)
|
|
|
|
headers = {'x-api-key': api_key, 'content-type': 'application/json'}
|
|
headers.update({'User-Agent': user_agent})
|
|
|
|
# check first if valid:
|
|
valid_coins = ['BTC', 'XMR']
|
|
valid_keys = ['btc', 'md5', 'sha1', 'sha256']
|
|
if coin not in valid_coins or key not in valid_keys:
|
|
logging.error("get_data_by_X(): not a valid key parameter. Must be a valid coin (i.e. from %r) and one of: %r" % (valid_coins, valid_keys))
|
|
return None
|
|
try:
|
|
|
|
url = urls[coin.upper()][key]
|
|
logging.debug("url = %s" % url)
|
|
if not url:
|
|
logging.error("Could not find a valid coin/key combination. Must be a valid coin (i.e. from %r) and one of: %r" % (valid_coins, valid_keys))
|
|
return None
|
|
r = requests.get(url + "%s" % (value), headers=headers)
|
|
except Exception as ex:
|
|
logging.error("could not fetch from the service. Error: %s" % str(ex))
|
|
|
|
if r.status_code != 200:
|
|
logging.error("could not fetch from the service. Status code: %s" %
|
|
r.status_code)
|
|
return r.json()
|
|
|
|
|
|
def get_bin2btc_by_btc(btc_addr: str, api_key: str):
|
|
""" Function to fetch the data from the bin2btc/{btc} endpoint """
|
|
return get_data_by('BTC', 'btc', btc_addr, api_key)
|
|
|
|
|
|
def get_bin2btc_by_md5(md5: str, api_key: str):
|
|
""" Function to fetch the data from the bin2btc/{md5} endpoint """
|
|
return get_data_by('BTC', 'md5', md5, api_key)
|
|
|
|
|
|
def get_bin2btc_by_sha1(sha1: str, api_key: str):
|
|
""" Function to fetch the data from the bin2btc/{sha1} endpoint """
|
|
return get_data_by('BTC', 'sha1', sha1, api_key)
|
|
|
|
|
|
def get_bin2btc_by_sha256(sha256: str, api_key: str):
|
|
""" Function to fetch the data from the bin2btc/{sha256} endpoint """
|
|
return get_data_by('BTC', 'sha256', sha256, api_key)
|
|
|
|
|
|
if __name__ == "__main__":
|
|
""" Just for testing on the cmd line. """
|
|
to_btc = "1KnuC7FdhGuHpvFNxtBpz299Q5QteUdNCq"
|
|
api_key = os.getenv('api_key')
|
|
r = get_bin2btc_by_btc(to_btc, api_key)
|
|
print(r)
|
|
r = get_bin2btc_by_md5("abc", api_key)
|
|
print(r)
|
|
r = get_data_by('XMR', 'md5', "452878CD7", api_key)
|
|
print(r)
|