Skip to content
Open
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
210 changes: 122 additions & 88 deletions Slack-Parser.py
Original file line number Diff line number Diff line change
@@ -1,98 +1,132 @@
def clean_url(value):
if value[1:].startswith("https"):
return value[1:]
return value


def data(file_name):
with open(file_name, encoding="latin-1") as file:
slack_data = file.read()
string = ""
strings = []
for i in slack_data:
if i.isprintable():
if i != '"':
string += i
else:
strings.append(string)
string = ""
while("" in strings) :
strings.remove("")
data = {}
real_name = ""
for i in range(len(strings)):
if strings[i] == "real_name":
real_name = strings[i+1]
data[real_name]=[]
elif real_name == "" or real_name == strings[i]:
continue
else:
if len(data[real_name]) < 80:
data[real_name].append(strings[i])
return strings, data
with open(file_name, encoding="latin-1") as file:
slack_data = file.read()
string = ""
strings = []
for i in slack_data:
if i.isprintable():
if i != '"':
string += i
else:
strings.append(string)
string = ""
while "" in strings:
strings.remove("")
data = {}
real_name = ""
for i in range(len(strings)):
if strings[i] == "real_name":
real_name = strings[i + 1]
data[real_name] = []
elif real_name == "" or real_name == strings[i]:
continue
else:
if len(data[real_name]) < 80:
data[real_name].append(strings[i])
return strings, data


def users(properties):
users = {}
infos = ["Email", "Profile Picture", "Bot", "Admin", "Owner", "Primary Owner"]
for username in properties:
users[username] = {}
for i in range(len(properties[username])):
if properties[username][i] == "email":
users[username]["Email"] = properties[username][i+1]
elif properties[username][i] == "image_1024":
users[username]["Profile Picture"] = properties[username][i+1][1:-1]
elif properties[username][i] == "is_botT":
users[username]["Bot"] = "True"
elif properties[username][i] == "is_adminT":
users[username]["Admin"] = "True"
elif properties[username][i] == "is_ownerT":
users[username]["Owner"] = "True"
elif properties[username][i] == "is_primary_ownerT":
users[username]["Primary Owner"] = "True"
elif properties[username][i] == "is_botF":
users[username]["Bot"] = "False"
elif properties[username][i] == "is_adminF":
users[username]["Admin"] = "False"
elif properties[username][i] == "is_ownerF":
users[username]["Owner"] = "False"
elif properties[username][i] == "is_primary_ownerF":
users[username]["Primary Owner"] = "False"
for user in users:
for info in infos:
if info not in users[user]:
users[user][info] = "404 Not Found"
print("{:<30} {:<30} {:<30} {:<30} {:<30} {:<30} {:<30}".format('Users', 'Email', "is_bot", "is_admin", "is_owner", "primary_owner", 'Profile Picture'))
for user in users:
print("{:<30} {:<30} {:<30} {:<30} {:<30} {:<30} {:<30}".format(user, users[user]["Email"], users[user]["Bot"], users[user]["Admin"], users[user]["Owner"], users[user]["Primary Owner"] ,users[user]["Profile Picture"]))
return
users = {}
infos = ["Email", "Profile Picture", "Bot", "Admin", "Owner", "Primary Owner"]
for username in properties:
users[username] = {}
for i in range(len(properties[username])):
if properties[username][i] == "email":
users[username]["Email"] = properties[username][i + 1]
elif properties[username][i] == "image_1024":
users[username]["Profile Picture"] = properties[username][i + 1][1:-1]
elif properties[username][i] == "is_botT":
users[username]["Bot"] = "True"
elif properties[username][i] == "is_adminT":
users[username]["Admin"] = "True"
elif properties[username][i] == "is_ownerT":
users[username]["Owner"] = "True"
elif properties[username][i] == "is_primary_ownerT":
users[username]["Primary Owner"] = "True"
elif properties[username][i] == "is_botF":
users[username]["Bot"] = "False"
elif properties[username][i] == "is_adminF":
users[username]["Admin"] = "False"
elif properties[username][i] == "is_ownerF":
users[username]["Owner"] = "False"
elif properties[username][i] == "is_primary_ownerF":
users[username]["Primary Owner"] = "False"
for user in users:
for info in infos:
if info not in users[user]:
users[user][info] = "404 Not Found"
print("{:<30} {:<30} {:<30} {:<30} {:<30} {:<30} {:<30}".format("Users", "Email", "is_bot", "is_admin", "is_owner", "primary_owner", "Profile Picture"))
for user in users:
print("{:<30} {:<30} {:<30} {:<30} {:<30} {:<30} {:<30}".format(user, users[user]["Email"], users[user]["Bot"], users[user]["Admin"], users[user]["Owner"], users[user]["Primary Owner"], users[user]["Profile Picture"]))
return


def messages(data):
for i in range(len(data)):
if data[i] == 'text' and data[i+1] == 'text':
print(str(data[i+2]))
return
for i in range(len(data)):
if data[i] == "text" and data[i + 1] == "text":
print(str(data[i + 2]))
return


def files(data):
files = {}
infos = ["name", "user", "url_private_download", "permalink"]
for i in range(len(data)):
if data[i] == "name" and data[i + 2] == "title" and data[i + 4] == "mimetype":
file_info = {}
for info in infos:
try:
file_info[info] = data[data.index(info, i) + 1]
if info in ["url_private_download", "permalink"]:
file_info[info] = clean_url(file_info[info])
except:
file_info[info] = "Not Found"
files[file_info["name"]] = file_info
print("{:<40} {:<20} {:<60} {:<60}".format("Name", "User", "Download URL", "Permalink"))
for name, file_info in files.items():
print("{:<40} {:<20} {:<60} {:<60}".format(name,file_info["user"],file_info["url_private_download"],file_info["permalink"]))
return


def workspace(data):
infos = {"domain":"", "channels":[]}
for i in range(len(data)):
if data[i] == "name" and data[i+2] == "is_channelT":
infos["channels"].append(data[i+1])
elif data[i] == "domain":
infos["domain"] = data[i+1]
for key, value in infos.items():
print(f"{key}: {value}")
return
if __name__ == '__main__':
print('''
infos = {"domain": "", "channels": []}
for i in range(len(data)):
if data[i] == "name" and data[i + 2] == "is_channelT":
infos["channels"].append(data[i + 1])
elif data[i] == "domain":
infos["domain"] = data[i + 1]
for key, value in infos.items():
print(f"{key}: {value}")
return


if __name__ == "__main__":
print("""
_____ _ _ _____
/ ____| | | | | __ \
| (___ | | __ _ ___| | ________| |__) |_ _ _ __ ___ ___ _ __
\___ \| |/ _` |/ __| |/ /______| ___/ _` | '__/ __|/ _ \ '__|
____) | | (_| | (__| < | | | (_| | | \__ \ __/ |
|_____/|_|\__,_|\___|_|\_\ |_| \__,_|_| |___/\___|_|
By: 0xMohammed''')
try:
indexeddb = input("Insert Slack Database Path (%appdata%\\Slack\\IndexedDB\\https_app.slack.com_0.indexeddb.blob\\*): ")
strings, data = data(indexeddb)
except:
print("Please Enter a valid Slack Database")
exit()
while 1:
function_name = input("Insert the data you want (users, messages, workspace): ")
if function_name == "users":
eval(function_name + "(data)")
elif function_name in ["users", "messages","workspace","exit"]:
eval(function_name + "(strings)")
else:
print("Error occurred Try-Again")
By: 0xMohammed""")
try:
indexeddb = input("Insert Slack Database Path (%appdata%\\Slack\\IndexedDB\\https_app.slack.com_0.indexeddb.blob\\*): ")
strings, data = data(indexeddb)
except:
print("Please Enter a valid Slack Database")
exit()
while 1:
function_name = input("Insert the data you want (users, messages, files, workspace): ")
if function_name == "users":
eval(function_name + "(data)")
elif function_name in ["users", "messages", "workspace", "files", "exit"]:
eval(function_name + "(strings)")
else:
print("Error occurred Try-Again")