-
Notifications
You must be signed in to change notification settings - Fork 1
Commit
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
- Loading branch information
0 parents
commit b14a3b3
Showing
7 changed files
with
374 additions
and
0 deletions.
There are no files selected for viewing
Binary file not shown.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,80 @@ | ||
# HashID | ||
HashID adalah sebuah alat untuk meretas atau membobol hash dengan metode Rainbow Table. HashID dibuat menggunakan bahasa program python. | ||
|
||
## Cara install | ||
- Linux | ||
- apt-get install git | ||
- pip3 install keyboard | ||
- git clone https://github.com/Billal06/hashid,git | ||
- cd hashid | ||
- python3 hashid.py | ||
|
||
- Termux | ||
- pkg install git python | ||
- pip install keyboard | ||
- git clone https://github.com/Billal06/hashid.git | ||
- cd hashid | ||
- python hashid.py | ||
|
||
Setelah install maka akan keluar | ||
|
||
``` | ||
_ _ HashID [0.6] | ||
_| || |_ Simple tool to crack hash | ||
|_ __ _| | ||
_| || |_ Author : Billal Fauzan | ||
|_ __ _| Version: 0.6 | ||
|_||_| | ||
Usage: hashid.py [options] | ||
Options: | ||
-h, --help show this help message and exit | ||
-t TARGET, --target=TARGET | ||
Set target (recommended) | ||
-r, --random Use wordlist from random alphabet | ||
-w WORDLIST, --wordlist=WORDLIST | ||
Use wordlist from file (recommended) | ||
-l, --log Show log | ||
``` | ||
|
||
## Fitur pada HashID | ||
- Support 16 tipe hash | ||
- Bisa mendeteksi tipe hash | ||
- Support GUI (Masih dikembangkan) | ||
- Cepat | ||
- Bisa menggunakan random wordlist atau wordlist manual | ||
- Mudah digunakan | ||
|
||
## Kenapa pakai HashID? | ||
HashID saya buat Open Source supaya bisa dipelajari dan dikembangkan. | ||
|
||
## Macam-macam tipe hash | ||
1. MD4 | ||
2. MD5 | ||
3. Ripemd160 | ||
4. SHA1 | ||
5. SHA3-224 | ||
6. SHA224 | ||
7. Blake2s256 | ||
8. SHA256 | ||
9. Blake2s | ||
10. MD5-SHA1 | ||
11. SHA384 | ||
12. SHA3-512 | ||
13. Blake2b512 | ||
14. SHA512 | ||
15. Blake2b | ||
16. Whirlpool | ||
|
||
## Tangkapan layar | ||
### Gambar 1 | ||
![Gambar 1](https://github.com/Billal06/hashid/blob/master/images/images-1.png?raw=true) | ||
### Gambar 2 | ||
![Gambar 2](https://github.com/Billal06/hashid/blob/master/images/images-2.png?raw=true) | ||
### Gambar 3 | ||
![Gambar 3](https://github.com/Billal06/hashid/blob/master/images/images-3.png?raw=true) | ||
|
||
## License | ||
[MIT](https://choosealicense.com/licenses/mit/) |
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,267 @@ | ||
#!/usr/bin/python3 | ||
|
||
import hashlib | ||
import sys | ||
import optparse | ||
import random | ||
import time | ||
try: | ||
import keyboard | ||
except ImportError: | ||
print ("[x] Module 'keyboard' not installed, please install now!") | ||
sys.exit() | ||
|
||
class color: | ||
def __init__(self): | ||
super().__init__() | ||
self.plat = sys.platform | ||
|
||
@property | ||
def red(self): | ||
if self.plat == "linux": | ||
return "\033[31;1m" | ||
else: | ||
return "" | ||
|
||
@property | ||
def green(self): | ||
if self.plat == "linux": | ||
return "\033[32;1m" | ||
else: | ||
return "" | ||
|
||
@property | ||
def yellow(self): | ||
if self.plat == "linux": | ||
return "\033[33;1m" | ||
else: | ||
return "" | ||
|
||
@property | ||
def blue(self): | ||
if self.plat == "linux": | ||
return "\033[34;1m" | ||
else: | ||
return "" | ||
|
||
@property | ||
def white(self): | ||
if self.plat == "linux": | ||
return "\033[37;1m" | ||
else: | ||
return "" | ||
|
||
@property | ||
def reset(self): | ||
if self.plat == "linux": | ||
return "\033[0m" | ||
else: | ||
return "" | ||
|
||
class Other: | ||
def __init__(self): | ||
self.file = sys.argv[0] | ||
self.color = color() | ||
|
||
def banner(self): | ||
logo = f"""{self.color.reset} | ||
{self.color.yellow} _ _ {self.color.reset}HashID [{self.color.green}0.6{self.color.reset}] | ||
{self.color.yellow} _| || |_ {self.color.reset} Simple tool to crack hash | ||
{self.color.yellow} |_ __ _| | ||
{self.color.yellow} _| || |_ {self.color.reset} Author : Billal Fauzan | ||
{self.color.yellow} |_ __ _| {self.color.reset} Version: 0.6 | ||
{self.color.yellow} |_||_| {self.color.reset} | ||
""" | ||
print (logo) | ||
|
||
def help(self): | ||
print (""" | ||
Welcome to HashID, HashId is a tool to break into a hash. | ||
Usage: hashid.py [options] | ||
Options: | ||
-h, --help show this help message and exit | ||
-t TARGET, --target=TARGET | ||
Set target (recommended) | ||
-r, --random Use wordlist from random alphabet | ||
-w WORDLIST, --wordlist=WORDLIST | ||
Use wordlist from file (recommended) | ||
-l, --log Show log | ||
""") | ||
|
||
def getTotalWordlist(self, word): | ||
total = len(word) | ||
if total == 0: | ||
# print ("[x] Total wordlist: 0") | ||
sys.exit() | ||
else: | ||
print ("[!] Total wordlist: " + str(total)) | ||
|
||
class App: | ||
def __init__(self): | ||
self.color = color() | ||
self.file = sys.argv[0] | ||
self.other = Other() | ||
self.word = [] | ||
self.log = False | ||
self.other.banner() | ||
self.target = None | ||
self._type = [] | ||
|
||
def scanType(self): | ||
if self.target == None: | ||
print ("[!] WARNING: target required") | ||
i = input("[?] Need help? (Y/n): ") | ||
if i.lower() == "y": | ||
self.other.help() | ||
sys.exit() | ||
else: | ||
length = len(self.target) | ||
if length == 32: | ||
self._type.append("md4") | ||
self._type.append("md5") | ||
elif length == 40: | ||
self._type.append("ripemd160") | ||
self._type.append("sha1") | ||
elif length == 56: | ||
self._type.append("sha3_224") | ||
self._type.append("sha224") | ||
elif length == 64: | ||
self._type.append("blake2s256") | ||
self._type.append("sha256") | ||
self._type.append("blake2s") | ||
elif length == 72: | ||
self._type.append("md5-sha1") | ||
elif length == 96: | ||
self._type.append("sha384") | ||
elif length == 128: | ||
self._type.append("sha3_512") | ||
self._type.append("blake2b512") | ||
self._type.append("SHA512") | ||
self._type.append("blake2b") | ||
self._type.append("whirlpool") | ||
else: | ||
print ("[!] ERROR: hash not supported") | ||
sys.exit() | ||
|
||
def getWodlistFromFile(self, file): | ||
mode = "r" | ||
while True: | ||
try: | ||
o = open(file, mode).read() | ||
for total, value in zip(range(len(o.splitlines())), o.splitlines()): | ||
if self.log == True: | ||
print (f"\r[{total}] Read and Append to list...", end="", flush=True) | ||
self.word.append(value) | ||
if self.log == True: | ||
print () | ||
break | ||
except IOError: | ||
print (f"[x] '{file}': No such file or directory") | ||
sys.exit() | ||
except UnicodeDecodeError: | ||
mode = "rb" | ||
if self.log == True: | ||
print ("[x] ERROR: failed to reading, change mode to 'rb'") | ||
self.other.getTotalWordlist(self.word) | ||
|
||
def randomWordlist(self): | ||
process = True | ||
print ("[!] Generate wordlist, press 'q' to stop") | ||
while process: | ||
try: | ||
if keyboard.is_pressed('q'): | ||
process = False | ||
else: | ||
word = "" | ||
lWord = list("abcdefghijklmnopqrstuvwyz1234567890-=][';/.,`~!@#$%^&*()_+\|") | ||
for _ in range(random.randint(1, 10)): | ||
if random.randint(0, 1) == 0: | ||
word += (random.choice(lWord)).upper() | ||
else: | ||
word += (random.choice(lWord)).lower() | ||
self.word.append(word) | ||
except ImportError: | ||
print ("[x] ERROR: permission denied, please use root user.") | ||
process = False | ||
self.other.getTotalWordlist(self.word) | ||
|
||
def crack(self): | ||
print ("[*] Cracking...") | ||
isFound = False | ||
isTry = False | ||
start = time.time() | ||
for tipe in self._type: | ||
a = 0 | ||
if self.log == True: | ||
if isTry and self.log: | ||
print () | ||
print ("[!] Trying for type: " + tipe) | ||
for word in self.word: | ||
a += 1 | ||
try: | ||
hash = hashlib.new(tipe, word.encode()).hexdigest() | ||
if self.target == hash: | ||
if self.log: | ||
print () | ||
print ("-" * 25 + "Information" + "-" * 25) | ||
print ("[!] Found: " + str(word)) | ||
isTry = False | ||
isFound = True | ||
end = time.time() | ||
totalTime = str(end - start)[0:5] | ||
print ("[!] Time: " + totalTime + "s") | ||
break | ||
if self.log == True: | ||
print (f"\r[*] Cracking {a}/{len(self.word)}", end="", flush=True) | ||
except ValueError: | ||
print ("[!] ERROR: failed hashing, skip") | ||
break | ||
if isFound == True: | ||
break | ||
else: | ||
isTry = True | ||
if isFound != True: | ||
if self.log == True: | ||
print () | ||
print ("[!] Sorry, your hash not cracked.") | ||
|
||
def parseArgument(self): | ||
parser = optparse.OptionParser() | ||
parser.add_option("-t", "--target", help="Set target (recommended)", dest="target", action="store") | ||
parser.add_option("-r", "--random", help="Use wordlist from random alphabet", dest="random", action="store_true") | ||
parser.add_option("-w", "--wordlist", help="Use wordlist from file (recommended)", dest="wordlist", action="store") | ||
parser.add_option("-l", "--log", help="Show log", dest="log", action="store_true") | ||
opt, args = parser.parse_args() | ||
|
||
if opt.wordlist: | ||
self.getWodlistFromFile(opt.wordlist) | ||
self.target = opt.target | ||
self.log = opt.log | ||
#if self.target != None: | ||
self.scanType() | ||
self.crack() | ||
elif opt.random: | ||
self.randomWordlist() | ||
self.target = opt.target | ||
self.log = opt.log | ||
#if self.target != None: | ||
self.scanType() | ||
self.crack() | ||
else: | ||
print ("[!] Please choice wordlist!") | ||
i = input("[?] Need help? (Y/n): ") | ||
if i.lower() == "y": | ||
self.other.help() | ||
|
||
def main(self): | ||
self.parseArgument() | ||
|
||
if __name__ == "__main__": | ||
try: | ||
app = App() | ||
app.main() | ||
except SyntaxError: | ||
print ("[x] Please use min python3.6!") | ||
sys.exit() |
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
Loading
Sorry, something went wrong. Reload?
Sorry, we cannot display this file.
Sorry, this file is invalid so it cannot be displayed.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
Original file line number | Diff line number | Diff line change |
---|---|---|
@@ -0,0 +1,27 @@ | ||
sayang09 | ||
sayang131414 | ||
sayang24252 | ||
doraemon | ||
indonesia | ||
daerah | ||
majalengka | ||
jawa barat | ||
jakarta | ||
indonesian | ||
sunda | ||
sayang | ||
indonesian | ||
jawa tengah | ||
jawa timur | ||
jawa | ||
kalimantan | ||
sumatra | ||
sulawesi | ||
papua | ||
jayapura | ||
diamond | ||
palembang | ||
subang | ||
bandung | ||
banten | ||
|