{"id":26920782,"url":"https://github.com/rattleycooper/warble","last_synced_at":"2025-08-31T05:33:43.666Z","repository":{"id":82012303,"uuid":"403559832","full_name":"RattleyCooper/warble","owner":"RattleyCooper","description":"Steganography tool that can embed files into the pixel data of images, or the data chunk of a  wav file.","archived":false,"fork":false,"pushed_at":"2025-03-23T20:03:35.000Z","size":72539,"stargazers_count":6,"open_issues_count":0,"forks_count":0,"subscribers_count":1,"default_branch":"master","last_synced_at":"2025-07-27T00:42:50.935Z","etag":null,"topics":["obfuscation","pentesting","security","steganography"],"latest_commit_sha":null,"homepage":"","language":"Nim","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"mit","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/RattleyCooper.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,"zenodo":null}},"created_at":"2021-09-06T09:20:47.000Z","updated_at":"2025-03-23T20:03:39.000Z","dependencies_parsed_at":null,"dependency_job_id":"412fab06-13e2-4884-800f-600a595986ed","html_url":"https://github.com/RattleyCooper/warble","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/RattleyCooper/warble","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RattleyCooper%2Fwarble","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RattleyCooper%2Fwarble/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RattleyCooper%2Fwarble/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RattleyCooper%2Fwarble/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/RattleyCooper","download_url":"https://codeload.github.com/RattleyCooper/warble/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/RattleyCooper%2Fwarble/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":272940942,"owners_count":25019004,"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","status":"online","status_checked_at":"2025-08-31T02:00:09.071Z","response_time":79,"last_error":null,"robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":true,"can_crawl_api":true,"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":["obfuscation","pentesting","security","steganography"],"created_at":"2025-04-01T22:48:28.512Z","updated_at":"2025-08-31T05:33:43.640Z","avatar_url":"https://github.com/RattleyCooper.png","language":"Nim","funding_links":[],"categories":[],"sub_categories":[],"readme":"\u003cp align=\"center\"\u003e\n  \u003cimg src=\"warble/test-files/warble.png\"\u003e\n\u003c/p\u003e\n\nWarble is a tiny command line steganography tool/nim library that can embed files into the pixel data of images, or into the data chunk of a wav file.\n\nEncoding/decoding functions for images based on the steganography library by treeform:\n\nhttps://github.com/treeform/steganography\n\n## Installation / Compiling\n\nFor use as a nim library, download this repository and run `nimble install` in the repository's directory or run `nimble install https://github.com/RattleyCooper/warble`\n\nYou can run `nimble test`, to run the tests, but this is not required.\n\nIf you wish to use this as an executable, get the nim compiler from https://nim-lang.org/install.html and run the following in the warble directory:\n\n`nim c -d:release -d:danger --opt:speed warble.nim`\n\nIf you are on linux and want to read JPG images, run the following in the warble directory:\n\n`nim c -d:release -d:danger -d:pixieUseStb --opt:speed warble.nim`\n\nNote that warble is limited to the image formats that [`pixie`](https://github.com/treeform/pixie) can work with. Get the latest pixie update to fix the broken JPEG bug.\n\n## Uses\n\nThis was made as a proof of concept data infil/exfil tool, but there are legitimate uses as well. It could be used in game development to embed map data in an image of the map itself. Games like spore are known to use steganography in a similar way for sharing creatures.\n\nhttps://nedbatchelder.com/blog/200806/spore_creature_creator_and_steganography.html\n\n## Examples\n\nProfiling a file to see exactly how many bytes we can fit into it:\n\n```\n./warble --pr: test-files/test0.png\n1457985 available bytes\n```\n\n* `--pr: filepath`    filepath of image you want to profile\n\n## Inject a payload into an image\n\nAll of the following commands work with images or wav files. Warble will detect what type of file and do the correct encoding/decoding\n\nThe following command injects the `warble` binary into one of the test images.\n\n```\n./warble --i: test-files/test2.png --o: test-files/test2-inj.png --p: warble\n```\n\nOutput\n\n```\nInject : \n\n  Input Image:\ttest-files/test2.png\n  Output Image:\ttest-files/test2-inj.png\n  Payload Path:\twarble\n\nOpening payload...\nPayload size: 521624\nReading payload...\nReading image data...\nInjecting payload... 521624\nWriting image payload..\nDone.\n```\n\n* `--i: filepath`    input filepath\n* `--o: filepath`    output filepath\n* `--p: filepath`     filepath to payload\n\nIf the `--i`, `--o` and `--p` arguments are set, the payload will be embedded into the input and saved to the output.\n\n## Extract a payload from a file\n\nThe following command extracts the payload from the input and saves it to `test-files/warble`\n\n```\n./warble --i: test-files/test2-inj.png --p: test-files/warble\n```\n\nOutput\n\n```\nExtract : \n\n  Input Image:\ttest-files/test2-inj.png\n  Payload Path:\ttest-files/warble\n\nReading image data...\nExtracting payload...\nPayload size: 521624\nCreating payload file...\nWriting payload... 521624\nDone.\n```\n\n* `--i: filepath`    input filepath\n* `--p: filepath`     output filepath\n\nWhen the `--i` and `--p` arguments are set the payload will be read from the input and saved as the file specified by `--p`\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frattleycooper%2Fwarble","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Frattleycooper%2Fwarble","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Frattleycooper%2Fwarble/lists"}