Skip to content

Roadmap #16

Description

@zlataovce

General:

  • Localization
  • Remote instrumentation
  • Concolic execution for obfuscated code
  • Workspace summarization
    • describes the workspace with generic traits; i.e.:
      • main class/other entry points
      • level of obfuscation
      • usages of certain classes (URLClassLoader, Cipher, ... - ones that may indicate malicious intent)
  • Find usages/implementations within a workspace
    • implementations: can be built on top of the inheritance graph
    • usages: probably using the search functionality, but the performance could be improved with indexing rather than linear search
  • Harden the ZIP parser
    • currently, an end-of-central-directory record (EOCDR) is needed to parse the file, however OpenJDK can also read ZIPs with only local file records
  • Rework the code/hex tab system to allow for more ways of interpretation + make it easily switchable
    • e.g. Android binary XML, which needs an intermediate translation step to make it back into text

Disassembly:

  • Remapping
    • If you're reading this and want to use remapping right now, the support for it is not finished and your mileage may vary. There will be weird bugs.
    • preliminary support in @katana-project/asm/analysis/remap, does not support annotations and modules
    • should be implemented as a transformer -> refactor transformers to be pre- and post-analysis instead of just post-analysis
    • change Project pane "Classes and packages" mode to work with class names instead of just file names -> viewing remapped names
    • search does not take remapping into account
    • propagate mapping of superclass methods to all subclass overrides
    • verify bridge method mapping
    • method parameters, local variables
    • Tiny v2 name un/escaping
    • source namespace choice
    • automatic generation of uniform mappings for the entire workspace
  • Improve decompilation output
    • decreased output quality - currently, decompilers do not have access to the Java standard library, like they would in a real JVM
    • sometimes decompilers fail entirely when they shouldn't (example: the Ethanol Minecraft plugin RAT), perhaps due to a TeaVM quirk?
    • patch more decompiler/ASM crashing cases in the verification transformer, reference: Recaf's cafedude
  • Port decompilers/disassemblers to WASM (through TeaVM WASM GC backend)
    • JASM
    • Vineflower
    • Procyon
    • CFR
    • slicer (pseudocode disassembler) - N/A, it's plenty fast and I don't want to delve into AssemblyScript right now
  • Terminate disassembler workers without any tab to receive the result
    • mainly so you don't have disassembly tasks taking too long and lingering around when you change the disassembler

UI/UX:

  • Improve the context menu
    • the default browser context menu is disabled app-wide, so maybe replace it with a custom one with basic things like Copy+Paste?
    • add file context menus to tab headers
    • and search results
  • Collapse long paths with single-child directories
  • Add a centralized configuration place of some sort
    • many checkboxes/radio buttons throughout the app are persisted, but maybe move them into a more centralized tab/dialog?
  • Expose disassembler configuration in UI
    • right now, you can only use the scripting API to make (temporary) changes to the disassembler's configuration
  • Improve search UX
    • files: the command field on double-shift is not immediately obvious
    • classes: add presets to allow you to search strings/references/declarations/...
      • you can already do this with the Constant pool mode pretty much, but it's not obvious to newbies + you need to know the disassembled syntax from the docs
  • Replace the default CodeMirror Ctrl+F menu with something that can be localized
  • Fix the mode switching bug
  • Replace the Touhou art in the About dialog with something else (for the 100 stars milestone)
  • Improve the design consistency in the structure pane
    • the subsection titles in the summary and class structure (Entry points vs. Fields, Constructors, ...) look very different, but they're still in the same pane

Metadata

Metadata

Assignees

No one assigned

    Labels

    Type

    Projects

    No projects

    Milestone

    No milestone

    Relationships

    None yet

    Development

    No branches or pull requests

    Issue actions