{"id":13561742,"url":"https://github.com/jfmaes/GG-AESY","last_synced_at":"2025-04-03T17:31:34.028Z","repository":{"id":138014432,"uuid":"282221308","full_name":"jfmaes/GG-AESY","owner":"jfmaes","description":"Hide cool stuff in images :) ","archived":false,"fork":false,"pushed_at":"2020-08-09T14:00:09.000Z","size":43,"stargazers_count":146,"open_issues_count":0,"forks_count":17,"subscribers_count":12,"default_branch":"master","last_synced_at":"2025-04-01T22:10:45.155Z","etag":null,"topics":[],"latest_commit_sha":null,"homepage":"","language":"C#","has_issues":true,"has_wiki":null,"has_pages":null,"mirror_url":null,"source_name":null,"license":"gpl-3.0","status":null,"scm":"git","pull_requests_enabled":true,"icon_url":"https://github.com/jfmaes.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}},"created_at":"2020-07-24T13:02:44.000Z","updated_at":"2025-03-14T23:39:57.000Z","dependencies_parsed_at":null,"dependency_job_id":"46c8e568-2583-449b-a25e-0e15b046fb7c","html_url":"https://github.com/jfmaes/GG-AESY","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/jfmaes%2FGG-AESY","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfmaes%2FGG-AESY/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfmaes%2FGG-AESY/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/jfmaes%2FGG-AESY/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/jfmaes","download_url":"https://codeload.github.com/jfmaes/GG-AESY/tar.gz/refs/heads/master","host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":247046961,"owners_count":20874749,"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-01T13:01:00.594Z","updated_at":"2025-04-03T17:31:29.018Z","avatar_url":"https://github.com/jfmaes.png","language":"C#","funding_links":[],"categories":["C# #","C# (212)"],"sub_categories":[],"readme":"Blogpost: https://redteamer.tips/introducing-gg-aesy-a-stegocryptor/\n\n**WARNING: you might need to restore NuGet packages and restart visual studio before compiling. If anyone knows how I can get rid of this problem, DM me.**\n\n\u003c!-- wp:heading {\"align\":\"center\"} --\u003e\n\u003ch2 class=\"has-text-align-center\"\u003eManual\u003c/h2\u003e\n\u003c!-- /wp:heading --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003eTo start off,\u003c/strong\u003e I highly recommend to always use GG-AESY using verbose mode or very verbose mode, if you are not using this in unmanaged loaders, I also recommend always specifying an outfile.\u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e pay attention with very verbose mode though, especially if you are hiding big payloads. as very verbose mode will print the byte array to console. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003ehaving said that, let's dive into the manual for this baby. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:code --\u003e\n\u003cpre class=\"wp-block-code\"\u003e\u003ccode\u003e  _______   _______                    ___       _______     _______.____    ____\n /  _____| /  _____|                  /   \\     |   ____|   /       |\\   \\  /   /\n|  |  __  |  |  __      ______       /  ^  \\    |  |__     |   (----` \\   \\/   /\n|  | |_ | |  | |_ |    |______|     /  /_\\  \\   |   __|     \\   \\      \\_    _/\n|  |__| | |  |__| |                /  _____  \\  |  |____.----)   |       |  |\n \\______|  \\______|               /__/     \\__\\ |_______|_______/        |__|\n\n\n        V1.0.0 by twitter.com/Jean_Maes_1994\n\n        Encryptor and (optional) stegano\n\n Usage:\n  -h, -?, --help             Show Help\n\n\n  -e, --encrypt-only         Only encrypts given payload\n\n  -d, --decrypt              decryption mode\n\n      --ps, --payload-size=VALUE\n                             only needed if extracting payload from image for\n                               decryption\n\n      --ef, --encrypted-file=VALUE\n                             ENCRYPTION: The outfile for encrypted data\n\n                               DECRYPTION:The inputfile needed to decrypt the\n                               payload.\n\n\n\n\n  -p, --payload=VALUE        The path to the payload you want to encrypt\n\n  -o, --outfile=VALUE        The path to the outfile where all important data\n                               will be written to (key,iv and encrypted\n                               payload)\n\n  -i, --image=VALUE          The image file to hide the key and/or IV in,\n                               currently only supports JPEG (JPG) format!\n\n      --ok, --offset-key=VALUE\n                             The offset to search for the key in image (in\n                               decimal)\n\n      --okh, --offset-key-hex=VALUE\n                             The offset to search for the key in image (in\n                               hex)\n\n      --oIV, --offset-IV=VALUE\n                             The offset to search for the IV in image (in\n                               decimal)\n\n      --oIVh, --offset-IV-hex=VALUE\n                             The offset to search for the IV in image (in\n                               hex)\n\n      --op, --offset-payload=VALUE\n                             The offset to search for the payload in image\n                               (in decimal)\n\n      --oph, --offset-payload-hex=VALUE\n                             The offset to search for the payload in image\n                               (in hex)\n\n  -v, --verbose              write all the good stuff to console,recommended\n                               you actually always use this.\n\n      --vv, --very-verbose   prints encrypted payload array to console\n  -k, --key=VALUE            in case you want to use your own key value!\n\n      --IV, --initialization-vector=VALUE\n                             in case you want to use your own IV\n\n      --rk, --random-key-mode\n                             will hide your key in a random insertion point\n                               in the provided image, without breaking said\n                               image. will print the offset to console\n\n      --ra, --random-all-mode\n                             will hide both Key and IV in a random insertion\n                               point of the image.\n\n      --ak, --append-key-mode\n                             will hide the key at the end of the image file\n\n      --aa, --append-all-mode\n                             will hide the key and the IV at the end of the\n                               image file.\n\n      --ap, --append-payload-mode\n                             will hide the payload at the end of the image\n                               file\n\n      --rp, --random-payload-mode\n                             will hide the payload at a random insertion\n                               point.\n\n      --apu, --append-payload-unencrypted\n                             appends your payload without crypto, useful for\n                               very quick and dirty data exfil.\u003c/code\u003e\u003c/pre\u003e\n\u003c!-- /wp:code --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-e or --encrypt-only\u003c/strong\u003e: Will only encrypt a given payload (-p) will write key/iv to console if using verbose mode,  will write key/iv/payload into an outfile if using the outfile (-o) flag, and finally will write the bytestream to another file if using the encrypted file (-ef) flag.\u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-d or --decrypt\u003c/strong\u003e: Decryption mode, you can specify the decryption parameters using offsets (in case you have hidden key or key and IV in a JPEG). Offsets are passed to the program using either the offset-key (-ok) or offset-key-hex (-okh) flags, you can use \"-\" as separators or just paste in the hex without any separators, both will work fine.  IV's work the same way using -oIV and -oIVh flags.\u003cbr\u003e\u003cbr\u003eAlternatively, you can give the IV and Key directly (in case they are not hidden in a JPEG), using the key (-k) and initialization-vectors  (-IV) flags. As with the offset flags, \"-\" can be used as a separator, GG-AESY accepts both ASCII and byte values. \u003cbr\u003e\u003cbr\u003eIn order to decrypt, you'll also need to specify an encrypted file (-ef).  \u003cbr\u003eShould you have hidden a payload in a JPEG and wish to decrypt it, you'll have to specify the payload size (-ps) so GG-AESY will extract all data correctly without false positives/false negatives :) . \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-u or --unpack\u003c/strong\u003e: Will unpack unencrypted appended payloads (=apu mode) from the JPEG. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:spacer --\u003e\n\u003cdiv style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"\u003e\u003c/div\u003e\n\u003c!-- /wp:spacer --\u003e\n\n\u003c!-- wp:heading --\u003e\n\u003ch2\u003e\u003cstrong\u003eStego modes:\u003c/strong\u003e\u003c/h2\u003e\n\u003c!-- /wp:heading --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003eIf no key/iv is provided, random key/iv's will be used to encrypt your data. All stego modes will require you to pass GG-AESY a JPEG image (-i). If you have specified an outfile (-o) to save your important information about the crypto ( such as key, iv, payload), all stego modes will also add the injection places in this file.\u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-rk or --random-key-mode: \u003c/strong\u003eThis Stego mode will hide your AES-256 key at a random injection point. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-ra or --random-all-mode: \u003c/strong\u003eThis Stego mode will hide both your AES-256 key and IV at a random injection point, both injection points \u003cstrong\u003ecan\u003c/strong\u003e be the same (it's a random selection process), in this case, the key and IV will be injected back to back. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-ak or --append-key-mode\u003c/strong\u003e: This Stego mode will append the AES-256 key at the end of the JPEG. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-aa or --append-all-mode:\u003c/strong\u003e This Stego mode will append both AES-256 key and IV at the end of the JPEG. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-ap or --append-payload-mode: \u003c/strong\u003eThis Stego mode will append the encrypted payload bytestream to the end of the JPEG. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-rp or --random-payload-mode:\u003c/strong\u003e This Stego mode will inject the encrypted payload bytestream at a random injection point. \u003cstrong\u003eCAUTION:\u003c/strong\u003e This only works if your payload does not exceed 65,535 bytes, which is about 65kb, if you try a larger payload, an error will be thrown in your face.  Needless to say, this mode is practically useless :) \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003e-apu or --append-payload-unencrypted\u003c/strong\u003e: This Stego mode will append the payload bytestream as-is to the end of the JPEG. \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n\n\u003c!-- wp:spacer --\u003e\n\u003cdiv style=\"height:100px\" aria-hidden=\"true\" class=\"wp-block-spacer\"\u003e\u003c/div\u003e\n\u003c!-- /wp:spacer --\u003e\n\n\u003c!-- wp:paragraph --\u003e\n\u003cp\u003e\u003cstrong\u003eDISCLAIMER:\u003c/strong\u003e This tool is in \u003cstrong\u003eEARLY BETA\u003c/strong\u003e. It's not been battle tested yet, so please submit improvements through PR's or raise issues in case of bugs. However, due to my current workload, active development on this tool from my end will not be possible at this time. \u003cbr\u003eThis does not mean I'm abandoning this project though :) \u003c/p\u003e\n\u003c!-- /wp:paragraph --\u003e\n","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfmaes%2FGG-AESY","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fjfmaes%2FGG-AESY","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fjfmaes%2FGG-AESY/lists"}