├── requirements.txt ├── .gitattributes ├── README.md ├── banner.py ├── LICENSE ├── useragents.py ├── .gitignore └── main.py /requirements.txt: -------------------------------------------------------------------------------- 1 | bs4 2 | argparse 3 | requests -------------------------------------------------------------------------------- /.gitattributes: -------------------------------------------------------------------------------- 1 | # Auto detect text files and perform LF normalization 2 | * text=auto 3 | -------------------------------------------------------------------------------- /README.md: -------------------------------------------------------------------------------- 1 | # Venmo-OSINT 2 | Venmo: Open Source Intelligence Investigation Tool 3 | 4 | 5 | 6 | 7 | ## Usage 8 | 9 | Install Dependencies: 10 | 11 | `pip3 install -r requirements.txt` 12 | 13 | Run the script: 14 | 15 | `python3 main.py --username YOURUSERNAME --filename YOUROUTPUTFILENAME` 16 | 17 | 18 | The script then returns all public transactions and their recipients to the user 19 | -------------------------------------------------------------------------------- /banner.py: -------------------------------------------------------------------------------- 1 | banner = r""" 2 | 3 | ██╗ ██╗███████╗███╗ ██╗███╗ ███╗ ██████╗ ██████╗ ███████╗██╗███╗ ██╗████████╗ 4 | ██║ ██║██╔════╝████╗ ██║████╗ ████║██╔═══██╗ ██╔═══██╗██╔════╝██║████╗ ██║╚══██╔══╝ 5 | ██║ ██║█████╗ ██╔██╗ ██║██╔████╔██║██║ ██║ ██║ ██║███████╗██║██╔██╗ ██║ ██║ 6 | ╚██╗ ██╔╝██╔══╝ ██║╚██╗██║██║╚██╔╝██║██║ ██║ ██║ ██║╚════██║██║██║╚██╗██║ ██║ 7 | ╚████╔╝ ███████╗██║ ╚████║██║ ╚═╝ ██║╚██████╔╝ ╚██████╔╝███████║██║██║ ╚████║ ██║ 8 | ╚═══╝ ╚══════╝╚═╝ ╚═══╝╚═╝ ╚═╝ ╚═════╝ ╚═════╝ ╚══════╝╚═╝╚═╝ ╚═══╝ ╚═╝ 9 | 10 | 11 | created by sc1341 12 | """ -------------------------------------------------------------------------------- /LICENSE: -------------------------------------------------------------------------------- 1 | MIT License 2 | 3 | Copyright (c) 2020 sc1341 4 | 5 | Permission is hereby granted, free of charge, to any person obtaining a copy 6 | of this software and associated documentation files (the "Software"), to deal 7 | in the Software without restriction, including without limitation the rights 8 | to use, copy, modify, merge, publish, distribute, sublicense, and/or sell 9 | copies of the Software, and to permit persons to whom the Software is 10 | furnished to do so, subject to the following conditions: 11 | 12 | The above copyright notice and this permission notice shall be included in all 13 | copies or substantial portions of the Software. 14 | 15 | THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR 16 | IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY, 17 | FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE 18 | AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER 19 | LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM, 20 | OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE 21 | SOFTWARE. 22 | -------------------------------------------------------------------------------- /useragents.py: -------------------------------------------------------------------------------- 1 | user_agents = [ 2 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36', 3 | 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 4 | 'Mozilla/5.0 (Windows NT 5.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 5 | 'Mozilla/5.0 (Windows NT 6.2; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.90 Safari/537.36', 6 | 'Mozilla/5.0 (X11; Linux x86_64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/44.0.2403.157 Safari/537.36', 7 | 'Mozilla/5.0 (Windows NT 6.3; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/60.0.3112.113 Safari/537.36', 8 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 9 | 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/57.0.2987.133 Safari/537.36', 10 | 'Mozilla/5.0 (Windows NT 10.0; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 11 | 'Mozilla/5.0 (Windows NT 6.1; Win64; x64) AppleWebKit/537.36 (KHTML, like Gecko) Chrome/55.0.2883.87 Safari/537.36', 12 | 'Mozilla/4.0 (compatible; MSIE 9.0; Windows NT 6.1)', 13 | 'Mozilla/5.0 (Windows NT 6.1; WOW64; Trident/7.0; rv:11.0) like Gecko', 14 | 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; WOW64; Trident/5.0)', 15 | 'Mozilla/5.0 (Windows NT 6.1; Trident/7.0; rv:11.0) like Gecko', 16 | 'Mozilla/5.0 (Windows NT 6.2; WOW64; Trident/7.0; rv:11.0) like Gecko', 17 | 'Mozilla/5.0 (Windows NT 10.0; WOW64; Trident/7.0; rv:11.0) like Gecko', 18 | 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.0; Trident/5.0)', 19 | 'Mozilla/5.0 (Windows NT 6.3; WOW64; Trident/7.0; rv:11.0) like Gecko', 20 | 'Mozilla/5.0 (compatible; MSIE 9.0; Windows NT 6.1; Trident/5.0)', 21 | 'Mozilla/5.0 (Windows NT 6.1; Win64; x64; Trident/7.0; rv:11.0) like Gecko', 22 | 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; WOW64; Trident/6.0)', 23 | 'Mozilla/5.0 (compatible; MSIE 10.0; Windows NT 6.1; Trident/6.0)', 24 | 'Mozilla/4.0 (compatible; MSIE 8.0; Windows NT 5.1; Trident/4.0; .NET CLR 2.0.50727; .NET CLR 3.0.4506.2152; .NET CLR 3.5.30729)' 25 | ] -------------------------------------------------------------------------------- /.gitignore: -------------------------------------------------------------------------------- 1 | # Byte-compiled / optimized / DLL files 2 | __pycache__/ 3 | *.py[cod] 4 | *$py.class 5 | # Mac stuff 6 | *.DS_Store 7 | # C extensions 8 | *.so 9 | 10 | # Distribution / packaging 11 | .Python 12 | build/ 13 | develop-eggs/ 14 | dist/ 15 | downloads/ 16 | eggs/ 17 | .eggs/ 18 | lib/ 19 | lib64/ 20 | parts/ 21 | sdist/ 22 | var/ 23 | wheels/ 24 | pip-wheel-metadata/ 25 | share/python-wheels/ 26 | *.egg-info/ 27 | .installed.cfg 28 | *.egg 29 | MANIFEST 30 | 31 | # PyInstaller 32 | # Usually these files are written by a python script from a template 33 | # before PyInstaller builds the exe, so as to inject date/other infos into it. 34 | *.manifest 35 | *.spec 36 | 37 | # Installer logs 38 | pip-log.txt 39 | pip-delete-this-directory.txt 40 | 41 | # Unit test / coverage reports 42 | htmlcov/ 43 | .tox/ 44 | .nox/ 45 | .coverage 46 | .coverage.* 47 | .cache 48 | nosetests.xml 49 | coverage.xml 50 | *.cover 51 | .hypothesis/ 52 | .pytest_cache/ 53 | 54 | # Translations 55 | *.mo 56 | *.pot 57 | 58 | # Django stuff: 59 | *.log 60 | local_settings.py 61 | db.sqlite3 62 | 63 | # Flask stuff: 64 | instance/ 65 | .webassets-cache 66 | 67 | # Scrapy stuff: 68 | .scrapy 69 | 70 | # Sphinx documentation 71 | docs/_build/ 72 | 73 | # PyBuilder 74 | target/ 75 | 76 | # Jupyter Notebook 77 | .ipynb_checkpoints 78 | 79 | # IPython 80 | profile_default/ 81 | ipython_config.py 82 | 83 | # pyenv 84 | .python-version 85 | 86 | # pipenv 87 | # According to pypa/pipenv#598, it is recommended to include Pipfile.lock in version control. 88 | # However, in case of collaboration, if having platform-specific dependencies or dependencies 89 | # having no cross-platform support, pipenv may install dependencies that don't work, or not 90 | # install all needed dependencies. 91 | #Pipfile.lock 92 | 93 | # celery beat schedule file 94 | celerybeat-schedule 95 | 96 | # SageMath parsed files 97 | *.sage.py 98 | 99 | # Environments 100 | .env 101 | .venv 102 | env/ 103 | venv/ 104 | ENV/ 105 | env.bak/ 106 | venv.bak/ 107 | 108 | # Spyder project settings 109 | .spyderproject 110 | .spyproject 111 | 112 | # Rope project settings 113 | .ropeproject 114 | 115 | # mkdocs documentation 116 | /site 117 | 118 | # mypy 119 | .mypy_cache/ 120 | .dmypy.json 121 | dmypy.json 122 | 123 | # Pyre type checker 124 | .pyre/ 125 | -------------------------------------------------------------------------------- /main.py: -------------------------------------------------------------------------------- 1 | #!/usr/bin/env python3 2 | # 3 | # Venmo-OSINT Tool 4 | # Created by sc1341 5 | 6 | import argparse 7 | import random 8 | import requests 9 | import os 10 | import json 11 | 12 | from banner import banner 13 | from bs4 import BeautifulSoup 14 | from useragents import user_agents 15 | 16 | 17 | class VenmoOSINT: 18 | 19 | def __init__(self, username): 20 | self.username = username 21 | self.profile_data = {} 22 | 23 | def scan_profile(self): 24 | """Scans the target profile and returns the data""" 25 | try: 26 | r = requests.get(f"https://venmo.com/{self.username}", 27 | headers={"User-Agent":random.choice(user_agents)}) 28 | except requests.exceptions.ConnectionError: 29 | print("Error, unable to connect to host... check your network connection") 30 | return 1 31 | 32 | soup = BeautifulSoup(r.text, "html.parser") 33 | transactions = soup.find_all("div", attrs={"class":"single-payment content-wrap"}) 34 | print(f"{self.username} has {len(transactions)} public transactions") 35 | for i, transaction in enumerate(transactions): 36 | send, recv = transaction.find_all("a") 37 | send, recv = send.getText(), recv.getText() 38 | message = transaction.find_all("div", attrs={"class":"paymentpage-text m_five_t"})[0].getText() 39 | date = transaction.find_all("div", attrs={"class":"date"})[0].getText() 40 | export_message = f"{send} paid {recv}{date} for {message}" 41 | print(export_message) 42 | # assign values in dictionary for output 43 | self.profile_data[str(i)] = {"sender":send, 44 | "recipient":recv, 45 | "date":date, 46 | "exportMessage":export_message 47 | } 48 | def save_data(self, filename: str): 49 | """Saves the data from the scan into a file 50 | :params: filename 51 | :return: none 52 | """ 53 | i = 0 54 | while True: 55 | if (not os.path.exists(filename + str(i))): 56 | with open(f"{filename}{i}.txt", "w") as f: 57 | f.write(json.dumps(self.profile_data)) 58 | break 59 | else: 60 | i += 1 61 | 62 | 63 | def parse_args(): 64 | parser = argparse.ArgumentParser(description="Venmo-OSINT Tool, created by sc1341") 65 | parser.add_argument("--username", help="Username", required=True, nargs=1) 66 | parser.add_argument("--filename", help="Output file name", required=True, nargs=1) 67 | return parser.parse_args() 68 | 69 | def main(): 70 | args = parse_args() 71 | print(banner) 72 | a = VenmoOSINT(args.username[0]) 73 | a.scan_profile() 74 | a.save_data(args.filename[0]) 75 | 76 | 77 | if __name__ == "__main__": 78 | main() 79 | 80 | --------------------------------------------------------------------------------