{"id":17676945,"url":"https://github.com/alluseri/luna","last_synced_at":"2026-02-13T13:05:12.521Z","repository":{"id":255209886,"uuid":"848299417","full_name":"Alluseri/Luna","owner":"Alluseri","description":"An experimental JVM class file \u0026 bytecode processing library for .NET.","archived":false,"fork":false,"pushed_at":"2024-12-19T10:47:37.000Z","size":281,"stargazers_count":1,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-04-30T15:42:09.000Z","etag":null,"topics":["bytecode-manipulation","class-file","csharp","csharp-lib","csharp-library","dotnet","dotnet-lib","dotnet-library","java-classfiles","jvm","jvm-bytecode"],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"bsd-3-clause","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/Alluseri.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null,"governance":null,"roadmap":null,"authors":null,"dei":null,"publiccode":null,"codemeta":null}},"created_at":"2024-08-27T14:05:23.000Z","updated_at":"2024-12-19T10:47:41.000Z","dependencies_parsed_at":"2024-08-28T16:42:39.378Z","dependency_job_id":"dc3e5fcd-5bfa-47b2-8353-a83b1622ad0a","html_url":"https://github.com/Alluseri/Luna","commit_stats":null,"previous_names":["alluseri/luna"],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alluseri%2FLuna","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alluseri%2FLuna/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alluseri%2FLuna/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/Alluseri%2FLuna/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/Alluseri","download_url":"https://codeload.github.com/Alluseri/Luna/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":251733713,"owners_count":21635007,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2022-07-04T15:15:14.044Z","host_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub","repositories_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories","repository_names_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repository_names","owners_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners"}},"keywords":["bytecode-manipulation","class-file","csharp","csharp-lib","csharp-library","dotnet","dotnet-lib","dotnet-library","java-classfiles","jvm","jvm-bytecode"],"created_at":"2024-10-24T07:27:13.379Z","updated_at":"2026-02-13T13:05:07.480Z","avatar_url":"https://github.com/Alluseri.png","language":"C#","readme":"# Luna\nAn experimental JVM class file reverse engineering library for parsing, editing and writing class files as well as bytecode.\n\nMassive thanks to [@jumanji144](https://github.com/jumanji144) for providing his knowledge about the JVM internals and bearing my rants about the JVM spec in his DMs. It's unlikely this library would be possible without his help.\n\n## This thing is unfinished, pls dont use\nLike actually even if you're thinking about it please don't.\n\nJust lookup all the `// DESIGN:` comments and you'll quickly figure out how much stuff is subject to change sooner or later.\n\nThat being said, the `Internals` namespace is fully done and production-ready, so you may use that. I don't guarantee **that** won't change either, though. It's just way less likely.\n\nYou have to build this project from source so like just dont pls ok?\n\nAlso the API is currently HEAVILY inconsistent because I'm doing major refactors mid writing which is really REALLY stupid and I really do hate myself for this but yeah.\n\n**Despite the level of abstractness, this is not entry-level! E.g. no identifier filtering is done.**\n\n## Important notice\nPlease don't hesitate to open issues regarding functionality of the library. Instead of wondering to yourself \"why tf is this method/field marked as internal when I clearly need it right now?\", \"why does this method throw NotImplementedException?\", \"why is this piece of metadata is not preserved?\" or \"why do I have to do this when I could have an easier way of doing this?\", you should ask that question in a GitHub Issue and get it resolved directly.\n\n## TODO\ntodo readme lol idk\n\n## Unsupported obfuscation techniques\n- Merged jar files: Luna doesn't implement a custom .zip reader like [LL-Java-Zip](https://github.com/Col-E/LL-Java-Zip).\n- Invalid descriptors: An exception is thrown if a descriptor cannot be parsed or is invalid. Annotations with invalid descriptors may be discarded without notice during the I-\u003eA transfer process.\n\n## Why you may want to use Luna\nIt's obfuscation-resilient and it's fast. I'm actually kinda optimizing this thing, I even benchmarked some stuff.\n\n## Why you may not want to use Luna\nThis is a personal project. The abstractions in this library are unconventional, for example `LDC` is split into `InsnPushDouble`, `InsnPushFloat`, `InsnPushInteger`, `InsnPushLong` and `InsnPushString`. The ToString() representations don't match any existing JVM bytecode schemes, leaning towards MSIL instead: `IRETURN` -\u003e `return.i`, `FSTORE` -\u003e `store.f`, `LDC` -\u003e `push`.","funding_links":[],"categories":[],"sub_categories":[],"project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falluseri%2Fluna","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Falluseri%2Fluna","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Falluseri%2Fluna/lists"}