\s?([^<]+)')
555 | SENDR1_REGEX = compile(r'email:\s([a-zA-Z0-9._%+-]+@[a-zA-Z0-9.-]+\.[a-zA0-9]{2,})')
556 | LEAK_REGEX = compile(r'leak-label">.*?
([^<]+)')
557 | DATE_REGEX = compile(r'Created
\n(\d{4}-\d{2}-\d{2})')
558 |
559 | for a in divtag_var:
560 | url_var = URL_REGEX.findall(str(a))
561 | date_var = DATE_REGEX.findall(str(a))
562 | subj_var = SUBJ_REGEX.findall(str(a))
563 | sendr1_var = SENDR1_REGEX.findall(str(a))
564 | leak_var = LEAK_REGEX.findall(str(a))
565 | sendr_var = sendr1_var[0] if sendr1_var else None
566 | date_var = date_var[0] if date_var else None
567 | subj_var = subj_var[0] if subj_var else None
568 | leak_var = leak_var[0] if leak_var else None
569 |
570 | if url_var or date_var or sendr_var or subj_var or leak_var:
571 | if date_var:
572 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Date:{Fore.LIGHTBLUE_EX} {date_var}')
573 | if sendr_var:
574 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Sender:{Fore.LIGHTBLUE_EX} {sendr_var}')
575 | if subj_var:
576 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Subject:{Fore.LIGHTBLUE_EX} {subj_var}')
577 | if url_var:
578 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} URL:{Fore.LIGHTBLUE_EX} {url_var}')
579 | if leak_var:
580 | print(f'{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Leak:{Fore.LIGHTBLUE_EX} {leak_var}')
581 | print('\n')
582 |
583 | def extract_links_ahmia(self, email):
584 | encoded_email = urllib.parse.quote(email)
585 | url = f"https://ahmia.fi/search/?q={encoded_email}"
586 |
587 | response = get(url)
588 |
589 | if response.status_code == 200:
590 | soup = BeautifulSoup(response.content, 'html.parser')
591 | links = soup.find_all('a', href=True)
592 |
593 | for link in links:
594 | href = link['href']
595 |
596 | if '/search/redirect?' in href:
597 | redirect_url = urllib.parse.parse_qs(urllib.parse.urlparse(href).query).get('redirect_url', [None])[0]
598 |
599 | if redirect_url:
600 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} .onion link found:{Fore.LIGHTBLUE_EX} {redirect_url}")
601 |
602 | def hudsonrock_api_email(self, text):
603 | try:
604 | url = f"https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-email?email={text}"
605 | response = get(url)
606 | response.raise_for_status()
607 | stealers_data = response.json().get('stealers', [])
608 |
609 | if stealers_data:
610 | for data in stealers_data:
611 | computer_name = data.get('computer_name', '/')
612 | operating_system = data.get('operating_system', '/')
613 | ip = data.get('ip', '/')
614 | malware_path = data.get('malware_path', '/')
615 | date_compromised = data.get('date_compromised', '/')
616 | antiviruses = data.get('antiviruses', '/')
617 | top_logins = data.get('top_logins', [])
618 | top_passwords = data.get('top_passwords', [])
619 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} STEALERS: ")
620 | print(f" {Fore.LIGHTWHITE_EX}├──Computer Name:{Fore.LIGHTBLUE_EX} ", computer_name)
621 | print(f" {Fore.LIGHTWHITE_EX}├──Operating System:{Fore.LIGHTBLUE_EX} ", operating_system)
622 | print(f" {Fore.LIGHTWHITE_EX}├──IP:{Fore.LIGHTBLUE_EX} ", ip)
623 | print(f" {Fore.LIGHTWHITE_EX}├──Malware Path:{Fore.LIGHTBLUE_EX} ", malware_path)
624 | print(f" {Fore.LIGHTWHITE_EX}├──Date Compromised:{Fore.LIGHTBLUE_EX} ", date_compromised)
625 | print(f" {Fore.LIGHTWHITE_EX}├──AntiViruses:{Fore.LIGHTBLUE_EX} ", antiviruses)
626 | print(f" {Fore.LIGHTWHITE_EX}├──Top Logins:{Fore.LIGHTBLUE_EX} ", ', '.join(top_logins))
627 | print(f" {Fore.LIGHTWHITE_EX}└──Passwords:{Fore.LIGHTBLUE_EX} ", ', '.join(top_passwords), "\n")
628 | else:
629 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No data found...")
630 | except HTTPError as http_err:
631 | print(f"{Fore.LIGHTRED_EX}[ERROR] HTTP error occurred: {http_err}")
632 | except Exception as err:
633 | print(f"{Fore.LIGHTRED_EX}[ERROR] Other error occurred: {err}")
634 | #endregion
635 |
636 |
637 | #region Phone information
638 |
639 |
640 | def get_phone_info(self, phone_number):
641 | url = f"http://phone-number-api.com/json/?number={phone_number}"
642 | response = get(url, headers=self.headers)
643 | if response.status_code == 200:
644 | return response.json()
645 | else:
646 | return None
647 | #endregion
648 |
649 |
650 | #region IP information
651 |
652 | def hudsonrock_api_ip(self, text):
653 | try:
654 | url = f"https://cavalier.hudsonrock.com/api/json/v2/osint-tools/search-by-ip?ip={text}"
655 | response = get(url)
656 | response.raise_for_status()
657 | stealers_data = response.json().get('stealers', [])
658 |
659 | if stealers_data:
660 | for data in stealers_data:
661 | computer_name = data.get('computer_name', '/')
662 | operating_system = data.get('operating_system', '/')
663 | ip = data.get('ip', '/')
664 | malware_path = data.get('malware_path', '/')
665 | date_compromised = data.get('date_compromised', '/')
666 | antiviruses = data.get('antiviruses', '/')
667 | top_logins = data.get('top_logins', [])
668 | top_passwords = data.get('top_passwords', [])
669 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} STEALERS: ")
670 | print(f" {Fore.LIGHTWHITE_EX}├──Computer Name:{Fore.LIGHTBLUE_EX} ", computer_name)
671 | print(f" {Fore.LIGHTWHITE_EX}├──Operating System:{Fore.LIGHTBLUE_EX} ", operating_system)
672 | print(f" {Fore.LIGHTWHITE_EX}├──IP:{Fore.LIGHTBLUE_EX} ", ip)
673 | print(f" {Fore.LIGHTWHITE_EX}├──Malware Path:{Fore.LIGHTBLUE_EX} ", malware_path)
674 | print(f" {Fore.LIGHTWHITE_EX}├──Date Compromised:{Fore.LIGHTBLUE_EX} ", date_compromised)
675 | print(f" {Fore.LIGHTWHITE_EX}├──AntiViruses:{Fore.LIGHTBLUE_EX} ", antiviruses)
676 | print(f" {Fore.LIGHTWHITE_EX}├──Top Logins:{Fore.LIGHTBLUE_EX} ", ', '.join(top_logins))
677 | print(f" {Fore.LIGHTWHITE_EX}└──Passwords:{Fore.LIGHTBLUE_EX} ", ', '.join(top_passwords), "\n")
678 | else:
679 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No data found...")
680 | except HTTPError as http_err:
681 | print(f"{Fore.LIGHTRED_EX}[ERROR] HTTP error occurred: {http_err}")
682 | except Exception as err:
683 | print(f"{Fore.LIGHTRED_EX}[ERROR] Other error occurred: {err}")
684 |
685 | def geolocation_ip(self, ip):
686 | url = f"https://ipwhois.app/json/{ip}"
687 | respon = get(url, headers=self.headers)
688 | if respon.status_code == 200:
689 | result = respon.json()
690 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} IP : ", result.get("ip"))
691 | print(f" {Fore.LIGHTWHITE_EX}├──Country :{Fore.LIGHTBLUE_EX} ", result.get("country"))
692 | print(f" {Fore.LIGHTWHITE_EX}├──Region :{Fore.LIGHTBLUE_EX} ", result.get("region"))
693 | print(f" {Fore.LIGHTWHITE_EX}├──City :{Fore.LIGHTBLUE_EX} ", result.get("city"))
694 | print(f" {Fore.LIGHTWHITE_EX}├──Location : {Fore.LIGHTBLUE_EX}", f"{result.get('latitude')}, {result.get('longitude')}")
695 | print(f" {Fore.LIGHTWHITE_EX}├──ISP : {Fore.LIGHTBLUE_EX}", result.get("isp"))
696 | print(f" {Fore.LIGHTWHITE_EX}└──ASN : {Fore.LIGHTBLUE_EX}", result.get("asn"))
697 | else:
698 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Unable to fetch data for IP: {ip}")
699 | #endregion
700 |
701 | #region Cameras
702 |
703 | def check_cameras(self):
704 | for country_code, path in self.countries.items():
705 | if os.path.exists(path):
706 | print()
707 | decrypted_content = self.decrypt_file(path)
708 | for line in decrypted_content.split("\n"):
709 | url = line.strip()
710 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} (Camera {country_code}) :{Fore.LIGHTBLUE_EX} {url}")
711 | else:
712 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} The file for {country_code} does not exist.")
713 |
714 | #endregion
715 |
716 |
717 | #region Personal information
718 |
719 | def algolia(self, fullname):
720 | encoded_username = urllib.parse.quote(fullname)
721 | url = f"https://hn.algolia.com/api/v1/search?query={encoded_username}"
722 | response = get(url)
723 | if response.status_code == 200:
724 | data = response.json()
725 | for hit in data['hits']:
726 | if 'title' in hit:
727 | title = hit['title']
728 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Title:{Fore.LIGHTBLUE_EX} {title}")
729 | if 'url' in hit:
730 | url = hit['url']
731 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} URL:{Fore.LIGHTBLUE_EX} {url}")
732 | print()
733 | #endregion
734 |
735 |
736 | #region Bitcoin Information
737 |
738 | def get_bitcoin_info(self, bitcoin):
739 | url = f"https://blockchain.info/rawaddr/{bitcoin}"
740 |
741 | try:
742 | response = get(url, headers=self.headers)
743 |
744 | if response.status_code != 200:
745 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} ERROR : {response.status_code}")
746 | return
747 |
748 | data = response.json()
749 |
750 | total_balance = data.get('final_balance', 0) / 1e8
751 | total_transactions = data.get('n_tx', 0)
752 | total_received = data.get('total_received', 0) / 1e8
753 | total_sent = data.get('total_sent', 0) / 1e8
754 |
755 | first_tx_time = 'None'
756 | if data.get('txs', []):
757 | first_tx_time = data['txs'][0].get('time', 'None')
758 |
759 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Bitcoin :{Fore.LIGHTBLUE_EX} {bitcoin}")
760 | print(f" {Fore.LIGHTWHITE_EX}├──Total Balance :{Fore.LIGHTBLUE_EX} {total_balance} BTC")
761 | print(f" {Fore.LIGHTWHITE_EX}├──Total Transactions : {Fore.LIGHTBLUE_EX}{total_transactions}")
762 | print(f" {Fore.LIGHTWHITE_EX}├──Total Received : {Fore.LIGHTBLUE_EX}{total_received} BTC")
763 | print(f" {Fore.LIGHTWHITE_EX}├──Total Sent :{Fore.LIGHTBLUE_EX} {total_sent} BTC")
764 | print(f" {Fore.LIGHTWHITE_EX}└──First Transaction (timestamp) :{Fore.LIGHTBLUE_EX} {first_tx_time}")
765 |
766 | except Exception as e:
767 | pass
768 |
769 | #endregion
770 |
771 |
772 |
773 | #region PyInstaller
774 |
775 | def get_pe_info(self, file):
776 | file_path = file
777 | try:
778 | pe = PE(file_path)
779 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} File Name : {path.basename(file_path)}")
780 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} File size : {path.getsize(file_path)} octets")
781 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Entrypoint : 0x{pe.OPTIONAL_HEADER.AddressOfEntryPoint:X}")
782 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} ImageBase : 0x{pe.OPTIONAL_HEADER.ImageBase:X}")
783 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Machine : {hex(pe.FILE_HEADER.Machine)}")
784 | timestamp = pe.FILE_HEADER.TimeDateStamp
785 | if timestamp > 0:
786 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} TimeDateStamp : {datetime.fromtimestamp(timestamp, UTC)}")
787 | for section in pe.sections:
788 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} {section.Name.decode().strip()} - VA: {hex(section.VirtualAddress)}, Size: {section.Misc_VirtualSize}, Entropie: {section.get_entropy()}")
789 | for entry in pe.DIRECTORY_ENTRY_IMPORT:
790 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} {entry.dll.decode()} : {[imp.name.decode() if imp.name else 'Ordinal' for imp in entry.imports]}")
791 | with open(file_path, "rb") as f:
792 | content = f.read()
793 | match = search(rb'python(\d{2,3})', content, IGNORECASE)
794 | if match:
795 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Version Python : Python{match.group(1).decode()}")
796 | with open(file_path, "rb") as f:
797 | file_data = f.read()
798 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} MD5 : {md5(file_data).hexdigest()}")
799 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} SHA-1 : {sha1(file_data).hexdigest()}")
800 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} SHA-256 : {sha256(file_data).hexdigest()}")
801 | pe.close()
802 | except Exception as e:
803 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} Error: {e}")
804 |
805 | #endregion
806 |
807 | #region MAC Information
808 |
809 | def mac_address_lookup(self, mac):
810 | url = f"https://api.maclookup.app/v2/macs/{mac}"
811 |
812 | try:
813 | response = get(url, headers=self.headers)
814 | response.raise_for_status()
815 | data = response.json()
816 |
817 | if data.get("success") and data.get("found"):
818 | return data
819 | else:
820 | return {"error": "Information not found for this MAC address."}
821 | except exceptions.RequestException as e:
822 | return {"error": str(e)}
823 |
824 | #endregion
825 |
826 | #region VIN Information
827 |
828 | def get_vehicle_info(self, vin):
829 | url = f"https://vpic.nhtsa.dot.gov/api/vehicles/decodevin/{vin}?format=json"
830 | response = get(url)
831 |
832 | if response.status_code == 200:
833 | data = response.json()
834 | results = data.get("Results", [])
835 |
836 | make = next((entry["Value"] for entry in results if entry["Variable"] == "Make"), "N/A")
837 | model = next((entry["Value"] for entry in results if entry["Variable"] == "Model"), "N/A")
838 | year = next((entry["Value"] for entry in results if entry["Variable"] == "Model Year"), "N/A")
839 | vehicle_type = next((entry["Value"] for entry in results if entry["Variable"] == "Vehicle Type"), "N/A")
840 |
841 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Make :", make)
842 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Model :", model)
843 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Year :", year)
844 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Type :", vehicle_type)
845 |
846 | #endregion
847 |
848 | #region MetaData docx
849 | def extract_metadata(self, docx_file):
850 | doc = docx.Document(docx_file)
851 | core_properties = doc.core_properties
852 |
853 | metadata = {}
854 |
855 | for prop in dir(core_properties):
856 | if prop.startswith('__'):
857 | continue
858 | value = getattr(core_properties, prop)
859 | if callable(value):
860 | continue
861 | if prop == 'created' or prop == 'modified' or prop == 'last_printed':
862 | if value:
863 | value = value.strftime('%Y-%m-%d %H:%M:%S')
864 | else:
865 | value = None
866 | metadata[prop] = value
867 |
868 | try:
869 | custom_properties = core_properties.custom_properties
870 | if custom_properties:
871 | metadata['custom_properties'] = {}
872 | for prop in custom_properties:
873 | metadata['custom_properties'][prop.name] = prop.value
874 | except AttributeError:
875 | pass
876 | return metadata
877 | #endregion
878 |
879 | #region PDF information
880 | def extract_pdf_metadata(self, pdf_path):
881 | with open(pdf_path, "rb") as file:
882 | content = file.read().decode(errors='ignore')
883 |
884 | patterns = {
885 | "Creator": r"/Creator \((.*?)\)",
886 | "Producer": r"/Producer \((.*?)\)",
887 | "CreationDate": r"/CreationDate \((.*?)\)",
888 | "ModDate": r"/ModDate \((.*?)\)",
889 | "Keywords": r"/Keywords \((.*?)\)",
890 | "Author": r"/Author \((.*?)\)",
891 | "Marked": r"/Marked (true|false)",
892 | "Suspects": r"/Suspects (true|false)",
893 | "DisplayDocTitle": r"/DisplayDocTitle (true|false)",
894 | "Count": r"/Count (\d+)",
895 | "PDF Version": r"%PDF-(\d+\.\d+)",
896 | "Lang": r"/Lang \((.*?)\)",
897 | "Width": r"/Width (\d+)",
898 | "Height": r"/Height (\d+)",
899 | "Title": r"/Title <([0-9A-Fa-f]+)>"
900 | }
901 |
902 | results = {}
903 | for key, pattern in patterns.items():
904 | match = search(pattern, content)
905 | if match:
906 | results[key] = match.group(1)
907 |
908 | if results:
909 | for key, value in results.items():
910 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} {key}: {value}")
911 | else:
912 | print(f"{Fore.LIGHTRED_EX}[+]{Fore.LIGHTWHITE_EX} No MetaData")
913 | #endregion
914 |
915 |
916 | def title():
917 | system('clear || cls')
918 | banner = rf'''{Fore.LIGHTBLUE_EX}
919 | _ _ _ ____ _____ _____ _ _ _______
920 | | | | | | | / __ \ / ____|_ _| \ | |__ __|
921 | | |__| | __ ___ _| | _____ _ __ | | | | (___ | | | \| | | |
922 | | __ |/ _` \ \ /\ / / |/ / _ \ '__| | | | |\___ \ | | | . ` | | |
923 | | | | | (_| |\ V V /| < __/ | | |__| |____) |_| |_| |\ | | |
924 | |_| |_|\__,_| \_/\_/ |_|\_\___|_| \____/|_____/|_____|_| \_| |_|
925 |
926 | .--~~,__ Good luck with your investigations.
927 | :-....,-------`~~'._.' Twitter → @DeAn0nim0us
928 | `-,,, ,_ ;'~U' Github → RetrO-M
929 | _,-' ,'`-__; '--. Discord Hawker → https://discord.gg/KRjzDPzDbx (NEW SERVER)
930 | (_/'~~ """"(;
931 | Want to improve this version? Join our Discord server and tell us all about it!
932 | {Fore.LIGHTWHITE_EX}01 {Fore.LIGHTCYAN_EX}→ Email Information
933 | {Fore.LIGHTWHITE_EX}02 {Fore.LIGHTCYAN_EX}→ Phone Information
934 | {Fore.LIGHTWHITE_EX}03 {Fore.LIGHTCYAN_EX}→ IP Information
935 | {Fore.LIGHTWHITE_EX}04 {Fore.LIGHTCYAN_EX}→ Camera Information
936 | {Fore.LIGHTWHITE_EX}05 {Fore.LIGHTCYAN_EX}→ Personal Information
937 | {Fore.LIGHTWHITE_EX}06 {Fore.LIGHTCYAN_EX}→ Bitcoin Information
938 | {Fore.LIGHTWHITE_EX}07 {Fore.LIGHTCYAN_EX}→ PyInstaller Information
939 | {Fore.LIGHTWHITE_EX}08 {Fore.LIGHTCYAN_EX}→ MAC Information
940 | {Fore.LIGHTWHITE_EX}09 {Fore.LIGHTCYAN_EX}→ VIN Information
941 | {Fore.LIGHTWHITE_EX}10 {Fore.LIGHTCYAN_EX}→ PDF Information
942 | {Fore.LIGHTWHITE_EX}11 {Fore.LIGHTCYAN_EX}→ Docx Information
943 |
944 | {Fore.LIGHTWHITE_EX}00 {Fore.LIGHTCYAN_EX}→ Hawker+
945 | '''
946 | print(banner)
947 |
948 | def main():
949 | haw = Hawker()
950 | haw.display_message("Donate Monero to support me, Thank you <3", "455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p", 3)
951 | haw.display_message("RetrO-M", "Remember to use legally, I wish you a good investigation", 2)
952 | while True:
953 | title()
954 | print(f'{Fore.LIGHTBLUE_EX}┌───[{Fore.LIGHTCYAN_EX}HAWKER{Fore.LIGHTBLUE_EX}@{Fore.LIGHTCYAN_EX}root{Fore.LIGHTBLUE_EX}]~[{Fore.LIGHTCYAN_EX}/{Fore.LIGHTBLUE_EX}]')
955 | command = input(f'{Fore.LIGHTBLUE_EX}└──{Fore.BLUE}>{Fore.LIGHTWHITE_EX} ')
956 |
957 | if command == "01" or command == "1":
958 | email = input(f"{Fore.LIGHTBLUE_EX}Email{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
959 | categories = {
960 | "Data Breach": [haw.search_database],
961 | "Ahmia": [haw.extract_links_ahmia],
962 | "Doxbin": [haw.doxbin_search],
963 | "PasteBin": [haw.pastebin_search],
964 | "Social Networks": [haw.check_github_email, haw.picsart, haw.pornhub, haw.check_spotify_email, haw.check_twitter_email, haw.check_chess_email, haw.check_duolingo_email, haw.check_gravatar_email, haw.check_pinterest_email, haw.bitmoji, haw.mewe, haw.firefox, haw.xnxx, haw.xvideos, haw.Patreon, haw.Instagram],
965 | "Hudsonrock API": [haw.hudsonrock_api_email],
966 | "WikiLeaks": [haw.wikileaks_search]
967 | }
968 | with Progress() as progress:
969 | task = progress.add_task("[cyan]Loading...", total=100)
970 | while not progress.finished:
971 | progress.update(task, advance=1)
972 | sleep(0.1)
973 | for category, functions in categories.items():
974 | banner(category)
975 | for func in functions:
976 | if func.__name__ == "pastebin_search":
977 | pastebin_results = func(email)
978 | if pastebin_results:
979 | for link in pastebin_results:
980 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
981 | elif func.__name__ == "doxbin_search":
982 | doxbin_results = func(email)
983 | if doxbin_results:
984 | for link in doxbin_results:
985 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
986 | else:
987 | func(email)
988 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
989 | elif command == "02" or command == "2":
990 | phone = input(f"{Fore.LIGHTBLUE_EX}Phone{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
991 | categories = {
992 | "Ahmia": [haw.extract_links_ahmia],
993 | "Doxbin": [haw.doxbin_search],
994 | "PasteBin": [haw.pastebin_search],
995 | "Phone Information": [haw.get_phone_info]
996 | }
997 | with Progress() as progress:
998 | task = progress.add_task("[cyan]Loading...", total=100)
999 | while not progress.finished:
1000 | progress.update(task, advance=1)
1001 | sleep(0.1)
1002 | for category, functions in categories.items():
1003 | banner(category)
1004 | for func in functions:
1005 | if func.__name__ == "pastebin_search":
1006 | pastebin_results = func(phone)
1007 | if pastebin_results:
1008 | for link in pastebin_results:
1009 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1010 | elif func.__name__ == "doxbin_search":
1011 | doxbin_results = func(phone)
1012 | if doxbin_results:
1013 | for link in doxbin_results:
1014 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1015 | elif func.__name__ == "get_phone_info":
1016 | data = func(phone)
1017 | if data:
1018 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number:{Fore.LIGHTBLUE_EX}", data.get('query'))
1019 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Status:{Fore.LIGHTBLUE_EX}", data.get('status'))
1020 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number Type:{Fore.LIGHTBLUE_EX}", data.get('numberType'))
1021 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number Valid:{Fore.LIGHTBLUE_EX}", data.get('numberValid'))
1022 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Number Valid for Region:{Fore.LIGHTBLUE_EX}", data.get('numberValidForRegion'))
1023 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Country Code:{Fore.LIGHTBLUE_EX}", data.get('numberCountryCode'))
1024 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Area Code:{Fore.LIGHTBLUE_EX}", data.get('numberAreaCode'))
1025 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} E.164 Format:{Fore.LIGHTBLUE_EX}", data.get('formatE164'))
1026 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} National Format:{Fore.LIGHTBLUE_EX}", data.get('formatNational'))
1027 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} International Format:{Fore.LIGHTBLUE_EX}", data.get('formatInternational'))
1028 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Continent:{Fore.LIGHTBLUE_EX}", data.get('continent'))
1029 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Country:{Fore.LIGHTBLUE_EX}", data.get('countryName'))
1030 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Region:{Fore.LIGHTBLUE_EX}", data.get('regionName'))
1031 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} City:{Fore.LIGHTBLUE_EX}", data.get('city'))
1032 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Latitude:{Fore.LIGHTBLUE_EX}", data.get('lat'))
1033 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Longitude:{Fore.LIGHTBLUE_EX}", data.get('lon'))
1034 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Timezone:{Fore.LIGHTBLUE_EX}", data.get('timezone'))
1035 | else:
1036 | func(phone)
1037 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1038 | elif command == "03" or command == "3":
1039 | ip = input(f"{Fore.LIGHTBLUE_EX}IP {Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1040 | categories = {
1041 | "Ahmia": [haw.extract_links_ahmia],
1042 | "Doxbin": [haw.doxbin_search],
1043 | "PasteBin": [haw.pastebin_search],
1044 | "Hudsonrock API": [haw.hudsonrock_api_ip],
1045 | "IP Information": [haw.geolocation_ip]
1046 | }
1047 | with Progress() as progress:
1048 | task = progress.add_task("[cyan]Loading...", total=100)
1049 | while not progress.finished:
1050 | progress.update(task, advance=1)
1051 | sleep(0.1)
1052 | for category, functions in categories.items():
1053 | banner(category)
1054 | for func in functions:
1055 | if func.__name__ == "pastebin_search":
1056 | pastebin_results = func(ip)
1057 | if pastebin_results:
1058 | for link in pastebin_results:
1059 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1060 | elif func.__name__ == "doxbin_search":
1061 | doxbin_results = func(ip)
1062 | if doxbin_results:
1063 | for link in doxbin_results:
1064 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1065 | else:
1066 | func(ip)
1067 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1068 | elif command == "04" or command == "4":
1069 | categories = {
1070 | "Cameras": [haw.check_cameras],
1071 | }
1072 | with Progress() as progress:
1073 | task = progress.add_task("[cyan]Loading...", total=100)
1074 | while not progress.finished:
1075 | progress.update(task, advance=1)
1076 | sleep(0.1)
1077 | for category, functions in categories.items():
1078 | banner(category)
1079 | for func in functions:
1080 | func()
1081 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1082 |
1083 | elif command == "05" or command == "5":
1084 | fullname = input(f"{Fore.LIGHTBLUE_EX}IP {Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1085 | categories = {
1086 | "News": [haw.algolia],
1087 | "Ahmia": [haw.extract_links_ahmia],
1088 | "Doxbin": [haw.doxbin_search],
1089 | "PasteBin": [haw.pastebin_search],
1090 | "PagesJaunes": [haw.pagesjaunes_search],
1091 | "WhitePages": [haw.whitepages_search]
1092 | }
1093 | with Progress() as progress:
1094 | task = progress.add_task("[cyan]Loading...", total=100)
1095 | while not progress.finished:
1096 | progress.update(task, advance=1)
1097 | sleep(0.1)
1098 | for category, functions in categories.items():
1099 | banner(category)
1100 | for func in functions:
1101 | if func.__name__ == "pastebin_search":
1102 | pastebin_results = func(fullname)
1103 | if pastebin_results:
1104 | for link in pastebin_results:
1105 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1106 | elif func.__name__ == "doxbin_search":
1107 | doxbin_results = func(fullname)
1108 | if doxbin_results:
1109 | for link in doxbin_results:
1110 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1111 | elif func.__name__ == "pagesjaunes_search":
1112 | pagesjaunes_results = func(fullname)
1113 | if pagesjaunes_results:
1114 | for link in pagesjaunes_results:
1115 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PagesJaunes {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1116 | elif func.__name__ == "whitepages_search":
1117 | whitepages_results = func(fullname)
1118 | if whitepages_results:
1119 | for link in whitepages_results:
1120 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} WhitePages {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1121 | else:
1122 | func(fullname)
1123 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1124 | elif command == "06" or command == "6":
1125 | bitcoin = input(f"{Fore.LIGHTBLUE_EX}Bitcoin{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1126 | categories = {
1127 | "Ahmia": [haw.extract_links_ahmia],
1128 | "Doxbin": [haw.doxbin_search],
1129 | "PasteBin": [haw.pastebin_search],
1130 | "BlockChain": [haw.get_bitcoin_info]
1131 | }
1132 | with Progress() as progress:
1133 | task = progress.add_task("[cyan]Loading...", total=100)
1134 | while not progress.finished:
1135 | progress.update(task, advance=1)
1136 | sleep(0.1)
1137 | for category, functions in categories.items():
1138 | banner(category)
1139 | for func in functions:
1140 | if func.__name__ == "pastebin_search":
1141 | pastebin_results = func(bitcoin)
1142 | if pastebin_results:
1143 | for link in pastebin_results:
1144 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1145 | elif func.__name__ == "doxbin_search":
1146 | doxbin_results = func(bitcoin)
1147 | if doxbin_results:
1148 | for link in doxbin_results:
1149 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1150 | else:
1151 | func(bitcoin)
1152 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1153 | elif command == "07" or command == "7":
1154 | file = input(f"{Fore.LIGHTBLUE_EX}File .exe{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1155 | categories = {
1156 | "PyInstaller Information": [haw.get_pe_info]
1157 | }
1158 | with Progress() as progress:
1159 | task = progress.add_task("[cyan]Loading...", total=100)
1160 | while not progress.finished:
1161 | progress.update(task, advance=1)
1162 | sleep(0.1)
1163 | for category, functions in categories.items():
1164 | banner(category)
1165 | for func in functions:
1166 | func(file)
1167 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1168 | elif command == "08" or command == "8":
1169 | mac = input(f"{Fore.LIGHTBLUE_EX}MAC Address{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1170 | categories = {
1171 | "Ahmia": [haw.extract_links_ahmia],
1172 | "Doxbin": [haw.doxbin_search],
1173 | "PasteBin": [haw.pastebin_search],
1174 | "MAC Information": [haw.get_pe_info]
1175 | }
1176 | with Progress() as progress:
1177 | task = progress.add_task("[cyan]Loading...", total=100)
1178 | while not progress.finished:
1179 | progress.update(task, advance=1)
1180 | sleep(0.1)
1181 | for category, functions in categories.items():
1182 | banner(category)
1183 | for func in functions:
1184 | if func.__name__ == "pastebin_search":
1185 | pastebin_results = func(mac)
1186 | if pastebin_results:
1187 | for link in pastebin_results:
1188 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1189 | elif func.__name__ == "doxbin_search":
1190 | doxbin_results = func(mac)
1191 | if doxbin_results:
1192 | for link in doxbin_results:
1193 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1194 | elif func.__name__ == "get_pe_info":
1195 | result = haw.mac_address_lookup(mac)
1196 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} MAC Prefix: {result.get('macPrefix', 'N/A')}")
1197 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Company: {result.get('company', 'N/A')}")
1198 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Address: {result.get('address', 'N/A')}")
1199 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Country: {result.get('country', 'N/A')}")
1200 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} MAC Block Start: {result.get('blockStart', 'N/A')} - {result.get('blockEnd', 'N/A')}")
1201 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Block Size: {result.get('blockSize', 'N/A')}")
1202 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Block Type: {result.get('blockType', 'N/A')}")
1203 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Updated on: {result.get('updated', 'N/A')}")
1204 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Is Random: {result.get('isRand', 'N/A')}")
1205 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Is Private: {result.get('isPrivate', 'N/A')}")
1206 | else:
1207 | func(mac)
1208 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1209 | elif command == "09" or command == "9":
1210 | vin_number = input(f"{Fore.LIGHTBLUE_EX}VIN{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1211 | categories = {
1212 | "Ahmia": [haw.extract_links_ahmia],
1213 | "Doxbin": [haw.doxbin_search],
1214 | "PasteBin": [haw.pastebin_search],
1215 | "VIN Information": [haw.get_vehicle_info]
1216 | }
1217 | with Progress() as progress:
1218 | task = progress.add_task("[cyan]Loading...", total=100)
1219 | while not progress.finished:
1220 | progress.update(task, advance=1)
1221 | sleep(0.1)
1222 | for category, functions in categories.items():
1223 | banner(category)
1224 | for func in functions:
1225 | if func.__name__ == "pastebin_search":
1226 | pastebin_results = func(vin_number)
1227 | if pastebin_results:
1228 | for link in pastebin_results:
1229 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} PasteBin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1230 | elif func.__name__ == "doxbin_search":
1231 | doxbin_results = func(vin_number)
1232 | if doxbin_results:
1233 | for link in doxbin_results:
1234 | print(f"{Fore.LIGHTGREEN_EX}[+]{Fore.LIGHTWHITE_EX} Doxbin {Fore.LIGHTCYAN_EX}→{Fore.LIGHTBLUE_EX} {link}")
1235 | else:
1236 | func(vin_number)
1237 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1238 | elif command == "00" or command == "0":
1239 | print(
1240 | f'''{Fore.LIGHTWHITE_EX}
1241 | Hawker+ is not yet available, if you want to be notified when it arrives, join the discord
1242 | https://discord.gg/KRjzDPzDbx
1243 |
1244 | Hawker+ is a more advanced version of the OSINT tool that provides access to large databases for investigative purposes.
1245 | This tool is intended for law enforcement and cybersecurity professionals.
1246 |
1247 | 1. Contact Me: Reach out to me via Discord for further information and access to the tool.
1248 | My Discord username is: `0.d4y`.
1249 |
1250 | 2. Make a Donation: To support the development of this tool, a donation of **1 XMR (Monero)** is required. Please send the
1251 | donation to the following
1252 |
1253 | Monero address: 455RrwkuryVRioADddHWfGXrWHSLk4n1DHX36E4tKkBHScps4CeFwMWVemyqgWkL5eYf5L2zRVkgQB4Y9dwaechDKqQzC7p
1254 |
1255 | 3. Confirmation: After completing the donation, send me the following:
1256 | - The transaction ID (txid)** of your Monero transaction.
1257 | - A screenshot** of your donation confirmation.
1258 |
1259 | 4. Receive the Tool: Once I confirm your donation, I will provide you with the link to
1260 | download the Hawker+ tool in a `.7z` archive format.
1261 | '''
1262 | )
1263 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1264 |
1265 | elif command == "11":
1266 | docx_path = input(f"{Fore.LIGHTBLUE_EX}DOCX File{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1267 | metadata = haw.extract_metadata(docx_path)
1268 | pprint(metadata)
1269 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1270 | elif command == "10":
1271 | pdf_path = input(f"{Fore.LIGHTBLUE_EX}PDF File{Fore.LIGHTWHITE_EX} →{Fore.LIGHTWHITE_EX} ")
1272 | haw.extract_pdf_metadata(pdf_path)
1273 | input(f"{Fore.LIGHTWHITE_EX}[{Fore.LIGHTBLUE_EX}>{Fore.LIGHTWHITE_EX}] Type 'enter' to continue. . .")
1274 | if __name__ == "__main__":
1275 | main()
1276 |
1277 |
1278 | """
1279 | In the next update I will make the code cleaner.
1280 | """
1281 |
--------------------------------------------------------------------------------
/requirements.txt:
--------------------------------------------------------------------------------
1 | cryptography
2 | colorama
3 | requests
4 | beautifulsoup4
5 | fake-useragent
6 | lxml
7 | rich
8 | python-docx
9 |
--------------------------------------------------------------------------------