Download app.py from User1342/RUNIC: direct link, hf CLI and curl.
- Browser
- Download file 11.4 kB
-
https://huggingface.co/spaces/User1342/RUNIC/resolve/main/app.py
- Command line
-
hf download hf://spaces/User1342/RUNIC/app.py
-
curl -L -o app.py https://huggingface.co/spaces/User1342/RUNIC/resolve/main/app.py
11.4 kB
| import random | |
| from pprint import pprint | |
| import gradio as gr | |
| import easy_db | |
| def get_db_path(): | |
| return "device_data.db" | |
| def is_verifying_and_good_boot_state(dict_of_device_data_to_save): | |
| if dict_of_device_data_to_save["verify"] == "enforcing" and dict_of_device_data_to_save["boot_state"] == "green": | |
| return True | |
| return False | |
| def is_debug_enabled(dict_of_device_data_to_save): | |
| if dict_of_device_data_to_save["debug_enabled"] == False: | |
| return False | |
| else: | |
| return True | |
| def is_installer_google(dict_of_device_data_to_save): | |
| if dict_of_device_data_to_save["installer"] == True: | |
| return True | |
| else: | |
| return False | |
| def is_in_emulator(dict_of_device_data_to_save): | |
| if dict_of_device_data_to_save["emulator"] == True: | |
| return True | |
| else: | |
| return False | |
| def do_certs_match(previous_entries_for_device,dict_of_device_data_to_save): | |
| for entry in previous_entries_for_device: | |
| if entry["primary_certificate"] != dict_of_device_data_to_save["primary_certificate"]: | |
| return False | |
| return True | |
| def get_num_differences(previous_entries_for_device,dict_of_device_data_to_save): | |
| differences = [] | |
| for previous_entry in previous_entries_for_device: | |
| difference = 0 | |
| for key in list(dict_of_device_data_to_save.keys()): | |
| if dict_of_device_data_to_save[key] != previous_entry[key]: | |
| difference = difference + 1 | |
| differences.append(difference) | |
| if len(differences) != 0: | |
| max_difference = max(differences) | |
| else: | |
| max_difference = 0 | |
| return max_difference | |
| def process_request(id_textbox, installer_textbox,boot_state_textbox,verify_textbox,patch_level_textbox, | |
| oem_textbox,brand_textbox,model_textbox,unlocked_textbox,debug_enabled_textbox, | |
| primary_certificate_textbox,emulator_textbox,fingerprint_status_textbox,storage_encryption_status_textbox, | |
| market_apps_enabled_textbox,adb_enabled_textbox,lock_screen_timeout_textbox, | |
| lock_screen_type_textbox,notification_visibility_textbox, app_permissions_textbox): | |
| results = [] | |
| apps_and_permissions = app_permissions_textbox.split("&&") | |
| permissions_dict = {} | |
| # | |
| for app_and_permissions in apps_and_permissions: | |
| try: | |
| app, permissions = app_and_permissions.split("*******") | |
| permissions = permissions.split(" ") | |
| permissions_dict[app] = permissions | |
| except ValueError as e: | |
| print(e) | |
| pprint(permissions_dict) | |
| ''' is_malware_list = [] | |
| for permission in permissions_dict: | |
| detector = DroidDetective.APK_Analyser() | |
| is_malware = detector.identify(permissions_dict[permission], "DroidDetective/apk_malware.model")[0] | |
| if is_malware == 0: | |
| is_malware = False | |
| else: | |
| is_malware = True | |
| is_malware_list.append(is_malware) | |
| if True in is_malware_list: | |
| results.append(True) | |
| else: | |
| results.append(False)''' | |
| dict_of_device_data_to_save = {"id": id_textbox, | |
| "installer": installer_textbox, | |
| "boot_state": boot_state_textbox, | |
| "verify": verify_textbox, | |
| "patch_level": patch_level_textbox, | |
| "oem": oem_textbox, | |
| "brand": brand_textbox, | |
| "model": model_textbox, | |
| "unlocked": unlocked_textbox, | |
| "debug_enabled": debug_enabled_textbox, | |
| "primary_certificate": primary_certificate_textbox, | |
| "emulator": emulator_textbox, | |
| "fingerprint_status": fingerprint_status_textbox, | |
| "storage_encryption_status": storage_encryption_status_textbox, | |
| "market_apps_enabled": market_apps_enabled_textbox, | |
| "adb_enabled": adb_enabled_textbox, | |
| "lock_screen_timeout": lock_screen_timeout_textbox, | |
| "lock_screen_type": lock_screen_type_textbox, | |
| "notification_visibility": notification_visibility_textbox} | |
| db = easy_db.DataBase('device_data.db') | |
| results.append(not is_debug_enabled(dict_of_device_data_to_save)) | |
| results.append(not is_in_emulator(dict_of_device_data_to_save)) | |
| results.append(is_installer_google(dict_of_device_data_to_save)) | |
| results.append(is_verifying_and_good_boot_state(dict_of_device_data_to_save)) | |
| table_names = db.table_names() | |
| if 'devices' in table_names: | |
| previous_entries_for_device = db.pull_where('devices', 'id = "{}"'.format(id_textbox)) | |
| if previous_entries_for_device: | |
| max_difference = get_num_differences(previous_entries_for_device, dict_of_device_data_to_save) | |
| certs_match = do_certs_match(previous_entries_for_device, dict_of_device_data_to_save) | |
| results.append(certs_match) | |
| pprint(dict_of_device_data_to_save) | |
| db.append('devices', [dict_of_device_data_to_save]) | |
| print(results) | |
| negative_results = results.count(True) | |
| result = negative_results/ len(results) | |
| result = result * 100 | |
| history = [] | |
| history.append(["Integrity Check Complete", str(result)]) | |
| return history | |
| block = gr.Blocks(css=".container { max-width: 800px; margin: auto; } h1 { margin: 0px; padding: 5px 0; line-height: 50px; font-size: 60pt; }.close-heading {margin: 0px; padding: 0px;} .close-heading p { margin: 0px; padding: 0px;}", title="Boudica") | |
| db = easy_db.DataBase('device_data.db') | |
| html_data = ''' | |
| <!DOCTYPE html> | |
| <html> | |
| <head> | |
| <meta charset="UTF-8"> | |
| <meta name="viewport" content="width=device-width, initial-scale=1"> | |
| <link rel="stylesheet" href="https://www.w3schools.com/w3css/4/w3.css"> | |
| <link rel="stylesheet" href="https://fonts.googleapis.com/css?family=Poppins"> | |
| <link rel="stylesheet" href="https://cdnjs.cloudflare.com/ajax/libs/font-awesome/4.7.0/css/font-awesome.min.css"> | |
| <style> | |
| body,h1,h2,h3,h4,h5 {font-family: "Poppins", sans-serif} | |
| body {font-size: 16px;} | |
| img {margin-bottom: -8px;} | |
| .mySlides {display: none;} | |
| </style> | |
| </head> | |
| <body class="w3-content w3-black" style="max-width:1500px;"> | |
| <!-- The App Section --> | |
| <div class="w3-padding-large w3-white"> | |
| <div class="w3-row-padding-large"> | |
| <div class="w3-col"> | |
| <h1 class="w3-jumbo"><b>Runic Integrity 🗿🛡️</b></h1> | |
| <h1 class="w3-xxxlarge w3-text-blue"><b>Identify malicious changes to your device and apps</b></h1> | |
| <p><span class="w3-xlarge">Download the Android App To Use Runic Integrity. ⬇ </span> Runic Integrity is an Android application designed to assess the integrity of a device and report that back to applications on that device for safety checks.</p> | |
| <a href="#"><button class="w3-button w3-light-grey w3-padding-large w3-section " onclick="document.getElementById('download').style.display='block'"> | |
| <i class=""></i> Find Out More! 💬 | |
| </button></a> | |
| <a href="https://ko-fi.com/jamesstevenson"><button class="w3-button w3-light-grey w3-padding-large w3-section " onclick="document.getElementById('download').style.display='block'"> | |
| <i class=""></i> Support The Creator! ❤ | |
| </button></a> | |
| <a href="https://twitter.com/_JamesStevenson"><button class="w3-button w3-light-grey w3-padding-large w3-section " onclick="document.getElementById('download').style.display='block'"> | |
| <i class=""></i> Follow The Creator! 🐦 | |
| </button></a> | |
| </div> | |
| </div> | |
| </div> | |
| <!-- Modal --> | |
| <script> | |
| // Slideshow | |
| var slideIndex = 1; | |
| showDivs(slideIndex); | |
| function plusDivs(n) { | |
| showDivs(slideIndex += n); | |
| } | |
| function showDivs(n) { | |
| var i; | |
| var x = document.getElementsByClassName("mySlides"); | |
| if (n > x.length) {slideIndex = 1} | |
| if (n < 1) {slideIndex = x.length} | |
| for (i = 0; i < x.length; i++) { | |
| x[i].style.display = "none"; | |
| } | |
| x[slideIndex-1].style.display = "block"; | |
| } | |
| </script> | |
| <br> | |
| </body> | |
| </html> | |
| ''' | |
| with block: | |
| gr.HTML(value=html_data) | |
| with gr.Group(): | |
| with gr.Row().style(equal_height=True): | |
| download_db_file = gr.File(value="device_data.db", interactive=False, label="Device Database") | |
| with gr.Accordion("Open for More!", visible=False): | |
| chatbot = gr.Chatbot().style(color_map=("green", "pink")) | |
| # ID | |
| id_textbox = gr.Textbox(label="Android Secure ID") | |
| # Misc | |
| installer_textbox = gr.Textbox(label="Installer") | |
| debug_enabled_textbox = gr.Textbox(label="Debug Enabled") | |
| primary_certificate_textbox = gr.Textbox(label="primary_certificate") | |
| emulator_textbox = gr.Textbox(label="Emulator") | |
| # Device Data | |
| boot_state_textbox = gr.Textbox(label="Verify Boot State") | |
| verify_textbox = gr.Textbox(label="Verify Mode") | |
| patch_level_textbox = gr.Textbox(label="Security Patch Level") | |
| oem_textbox = gr.Textbox(label="OEM Unlock Supported") | |
| brand_textbox = gr.Textbox(label="Product Brand") | |
| model_textbox = gr.Textbox(label="Product Model") | |
| unlocked_textbox = gr.Textbox(label="OEM Unlock Status") | |
| # Settings | |
| fingerprint_status_textbox = gr.Textbox(label="Fingerprint Status") | |
| storage_encryption_status_textbox = gr.Textbox(label="Storage Encryption Status") | |
| market_apps_enabled_textbox = gr.Textbox(label="Market Apps Enabled") | |
| adb_enabled_textbox = gr.Textbox(label="ADB Enabled") | |
| lock_screen_timeout_textbox = gr.Textbox(label="Lock Screen Timeout") | |
| lock_screen_type_textbox = gr.Textbox(label="Lock Screen Type") | |
| notification_visibility_textbox = gr.Textbox(label="Notification Visibility") | |
| app_permissions_textbox = gr.Textbox(label="App Permissions") | |
| btn = gr.Button(label="Submit Data") | |
| btn.click(fn=process_request, inputs=[id_textbox, installer_textbox,boot_state_textbox,verify_textbox,patch_level_textbox, | |
| oem_textbox,brand_textbox,model_textbox,unlocked_textbox,debug_enabled_textbox, | |
| primary_certificate_textbox,emulator_textbox,fingerprint_status_textbox,storage_encryption_status_textbox, | |
| market_apps_enabled_textbox,adb_enabled_textbox,lock_screen_timeout_textbox, | |
| lock_screen_type_textbox,notification_visibility_textbox,app_permissions_textbox], | |
| outputs=[chatbot],api_name="submit") | |
| # Setup callback for when page loads (used to set a new Twitter auth target webspage) | |
| block.__enter__() | |
| block.set_event_trigger( | |
| event_name="load", fn=get_db_path, inputs=None, outputs=[download_db_file], no_target=True | |
| ) | |
| #block.attach_load_events() | |
| # Launcg the page | |
| block.launch(enable_queue = True) |