Permalink
Cannot retrieve contributors at this time
This commit does not belong to any branch on this repository, and may belong to a fork outside of the repository.
63 lines (52 sloc)
2.44 KB
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
import requests | |
import re | |
from pathlib import Path | |
from urllib.parse import urlencode, quote_plus | |
class WhidEngine(object): | |
# NOTE: check if the panel is reachable | |
def __init__(self, panel): | |
try: | |
if not "ESPloit" in requests.get(panel, timeout=1).text: | |
print("\033[91mError 404, are you connected on the right AP?") | |
self.update_firmware() | |
except Exception as e: | |
print (e) | |
print("\033[91mError, couldn't reach the Wifi Portal !\033[0m") | |
# NOTE: this update use the last firmware on Github | |
# You may need to build a new one with your keyboard mapping | |
def update_firmware(self): | |
update = "https://github.com/exploitagency/ESPloitV2/releases" | |
update = requests.get(update).text | |
regex = re.compile("exploit.*\.bin") | |
last = "https://github.com/" + regex.findall(update)[0] | |
name = "firmware/"+"-".join(last.split('/')[-2:]) | |
download = Path(name) | |
if not download.exists(): | |
print("Downloading the last release: %s" % last) | |
r = requests.get(last, stream=True) | |
if r.status_code == 200: | |
with open(name, 'wb') as f: | |
for chunk in r: | |
f.write(chunk) | |
# NOTE: send the payload to the /runlivepayload page | |
def send_payload(self, user_converted, panel): | |
payloads = { "livepayload":user_converted, "livepayloadpresent":1} | |
encoded = urlencode( payloads, quote_via=quote_plus) | |
try: | |
print('Sending payload to %s' % panel) | |
if not "200" in str(requests.post(panel, data=encoded)): | |
print("\033[91mError 404, are you connected on the right AP?") | |
except Exception as e: | |
print("\033[91mError, couldn't reach the Wifi Portal !") | |
# NOTE : mapping is use for retro-compatibility | |
def convert_to_keymap(self, user_input, payload, mapping=False): | |
if mapping: | |
# Dirty version, if you don't want to upgrade the firmware | |
fr_mapping = './mazqwAZQW&é"\'(-è_çà)^$Mù,?;:!§1234567890' | |
en_mapping = '<>;qwazQWAZ1234567890-[]:\'mM,./?!@#$%^&*()' | |
user_converted = user_input.translate(str.maketrans(fr_mapping,en_mapping)) | |
else: | |
user_converted = user_input | |
# Merge the payload and the user input | |
user_converted = payload % user_converted | |
return user_converted |