import gradio as gr import tempfile import os from androguard.misc import AnalyzeAPK def extract_apk_info(apk_file): if apk_file is None: return "No file uploaded. Please upload an APK file." temp_apk_path = None try: # Create a temporary file with tempfile.NamedTemporaryFile(delete=False, suffix=".apk") as temp_apk: # Write the content directly as binary data temp_apk.write(apk_file) # Write the uploaded file content as bytes temp_apk_path = temp_apk.name a, d, dx = AnalyzeAPK(temp_apk_path) output = [] output.append(f"Package: {a.get_package()}") output.append(f"Version: {a.get_androidversion_name()}") output.append(f"Main Activity: {a.get_main_activity()}") output.append("\nPermissions:") for permission in a.get_permissions(): output.append(f"- {permission}") output.append("\nActivities:") for activity in a.get_activities(): output.append(f"- {activity}") output.append("\nServices:") for service in a.get_services(): output.append(f"- {service}") output.append("\nReceivers:") for receiver in a.get_receivers(): output.append(f"- {receiver}") output.append("\nProviders:") for provider in a.get_providers(): output.append(f"- {provider}") return "\n".join(output) except Exception as e: return f"Error analyzing APK: {str(e)}" finally: # Clean up the temporary file if temp_apk_path and os.path.exists(temp_apk_path): os.unlink(temp_apk_path) # Create Gradio interface iface = gr.Interface( fn=extract_apk_info, inputs=gr.File(label="Upload APK File", file_types=['.apk']), outputs=gr.Textbox(label="Extracted APK Information", lines=25), title="APK Extractor", description="Upload an APK file to extract and view its components." ) # Launch the interface iface.launch()