{"id":13642097,"url":"https://github.com/rscloura/Doldrums","last_synced_at":"2025-04-20T15:34:48.270Z","repository":{"id":37718016,"uuid":"317062552","full_name":"rscloura/Doldrums","owner":"rscloura","description":"A Flutter/Dart reverse engineering tool","archived":false,"fork":false,"pushed_at":"2022-05-01T00:02:08.000Z","size":4146,"stargazers_count":778,"open_issues_count":10,"forks_count":117,"subscribers_count":21,"default_branch":"main","last_synced_at":"2024-11-09T13:36:58.755Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":null,"language":"Python","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":null,"status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/rscloura.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":null,"code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2020-11-29T23:20:32.000Z","updated_at":"2024-11-08T13:13:30.000Z","dependencies_parsed_at":"2022-07-08T00:20:33.299Z","dependency_job_id":null,"html_url":"https://github.com/rscloura/Doldrums","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rscloura%2FDoldrums","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rscloura%2FDoldrums/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rscloura%2FDoldrums/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/rscloura%2FDoldrums/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/rscloura","download_url":"https://codeload.github.com/rscloura/Doldrums/tar.gz/refs/heads/main","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":249918718,"owners_count":21345407,"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":[],"created_at":"2024-08-02T01:01:27.385Z","updated_at":"2025-04-20T15:34:46.839Z","avatar_url":"https://github.com/rscloura.png","language":"Python","funding_links":[],"categories":["Python","Reverse Engineering Tools"],"sub_categories":["Metadata Tools"],"readme":"\u003cimg src=\"https://raw.githubusercontent.com/rscloura/Doldrums/master/logo.png\" width=\"518\" height=\"150\"\u003e\n\n*To flutter: to move in quick, irregular motions, to beat rapidly, to be agitated.*  \n*Doldrums: a period of stagnation.*\n\nDoldrums is a reverse engineering tool for Flutter apps targetting Android. Concretely, it is a parser and information extractor for the Flutter/Dart Android binary, conventionally named `libapp.so`, for all Dart version 2.10 releases. When run, it outputs a full dump of all classes present in the isolate snapshot.\n\nThe tool is currently in **beta**, and missing some deserialization routines and class information. If it does not work out-of-the-box, please let me know.\n\n## Dependencies\n\nDoldrums requires [pyelftools](https://github.com/eliben/pyelftools) to parse the ELF format. You can install it with\n```\npip3 install pyelftools\n```\n\n## Usage\n\nTo use, simply run the following command, substituting `libapp.so` for the appropriate binary, and `output` for the desired output file. Note that the verbose option only works for Dart snapshot v2.12.\n```\npython3 src/main.py [-v] libapp.so output\n```\n\nThe expected output is a dump of all classes, in the following format:\n```\nclass MyApp extends StatelessWidget {\n    Widget build(DynamicType, DynamicType) {\n        Code at absolute offset: 0xec85c\n    }\n\n    String myPrint(DynamicType, DynamicType) {\n        Code at absolute offset: 0xeca80\n    }\n}\n```\n\nThe absolute code offset indicates the offset into the `libapp.so` file where the native function may be found.\n\n## Reading material\n\nFor a detailed write-up on the format, please check my [blog post](https://rloura.wordpress.com/2020/12/04/reversing-flutter-for-android-wip/).\n\n## Related works\n\n[darter](https://github.com/mildsunrise/darter) is a fully implemented and fully tested parser for Dart version 2.5 releases.\n\n## Contribute\n\nIf you'd like to help the project, consider making a pull request,  or donating to\n* ADA: DdzFFzCqrhsgHAVMtnep9Uq9iF61oxZ31LWVG3izmT8BH54Jz7C2gUBFcy6VnCkrbVNqrkevQ4wSwK7dfh7YrUfvSd5toKdE9tzZrcaB\n* BTC: 33piC5kfTdqFyQ5ionmuJkTDJXsFYdzGdS\n* ETH: 0x2bF670503C28B551C80191aeE9F7ACC96e101D9B\n\n***\n\nLogo by [Luis Fonseca](https://www.linkedin.com/in/luis-pedro-h-fonseca-4776a024/).","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frscloura%2FDoldrums","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frscloura%2FDoldrums","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frscloura%2FDoldrums/lists"}