{"id":20159724,"url":"https://github.com/nowsecure/airspy","last_synced_at":"2026-02-11T11:03:14.510Z","repository":{"id":40342175,"uuid":"201551895","full_name":"nowsecure/airspy","owner":"nowsecure","description":"AirSpy - Frida-based tool for exploring and tracking the evolution of Apple's AirDrop protocol implementation on i/macOS, from the server's perspective. Released during BH USA 2019 Training https://www.nowsecure.com/event/advanced-frida-and-radare-a-hackers-delight/","archived":false,"fork":false,"pushed_at":"2023-01-04T07:43:36.000Z","size":407,"stargazers_count":147,"open_issues_count":11,"forks_count":13,"subscribers_count":13,"default_branch":"master","last_synced_at":"2025-04-09T23:39:21.182Z","etag":null,"topics":["airdrop","dynamic-analysis","frida","ios"],"latest_commit_sha":null,"homepage":"https://nowsecure.com","language":"TypeScript","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/nowsecure.png","metadata":{"files":{"readme":"README.md","changelog":null,"contributing":null,"funding":null,"license":"LICENSE.md","code_of_conduct":null,"threat_model":null,"audit":null,"citation":null,"codeowners":null,"security":null,"support":null}},"created_at":"2019-08-09T23:08:03.000Z","updated_at":"2025-02-19T08:00:18.000Z","dependencies_parsed_at":"2023-02-02T03:46:56.279Z","dependency_job_id":null,"html_url":"https://github.com/nowsecure/airspy","commit_stats":null,"previous_names":[],"tags_count":0,"template":false,"template_full_name":null,"purl":"pkg:github/nowsecure/airspy","repository_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nowsecure%2Fairspy","tags_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nowsecure%2Fairspy/tags","releases_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nowsecure%2Fairspy/releases","manifests_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nowsecure%2Fairspy/manifests","owner_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/owners/nowsecure","download_url":"https://codeload.github.com/nowsecure/airspy/tar.gz/refs/heads/master","sbom_url":"https://repos.ecosyste.ms/api/v1/hosts/GitHub/repositories/nowsecure%2Fairspy/sbom","scorecard":null,"host":{"name":"GitHub","url":"https://github.com","kind":"github","repositories_count":286080680,"owners_count":29332292,"icon_url":"https://github.com/github.png","version":null,"created_at":"2022-05-30T11:31:42.601Z","updated_at":"2026-02-11T06:13:03.264Z","status":"ssl_error","status_checked_at":"2026-02-11T06:12:55.843Z","response_time":97,"last_error":"SSL_read: unexpected eof while reading","robots_txt_status":"success","robots_txt_updated_at":"2025-07-24T06:49:26.215Z","robots_txt_url":"https://github.com/robots.txt","online":false,"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":["airdrop","dynamic-analysis","frida","ios"],"created_at":"2024-11-14T00:09:44.592Z","updated_at":"2026-02-11T11:03:14.490Z","avatar_url":"https://github.com/nowsecure.png","language":"TypeScript","funding_links":[],"categories":[],"sub_categories":[],"readme":"# AirSpy\n\nTool for exploring Apple's AirDrop protocol implementation on i/macOS,\nfrom the server's perspective.\n\nDumps requests and responses along with a linear code coverage trace\nof the code processing each request.\n\n## Building\n\n```sh\n$ git clone https://github.com/nowsecure/airspy.git\n$ cd airspy/\n$ npm install\n```\n\n## Running\n\nTo spy on the implementation:\n\n```sh\n# On a local macOS system:\n$ node dist/bin/airspy.js\n\n# Or on a USB-connected iOS device:\n$ node dist/bin/airspy.js -U\n```\n\nThen pop open the AirDrop UI on a nearby i/macOS device. This should\nresult in data being captured and written to `out/$serial/events.log`,\nwhere `$serial` is a zero-based number incrementing with each run.\nEach request/response also gets written out to separate files for\neasy inspection and diffing.\n\nIt is also possible to replay an `events.log` from a previous run,\nwhich will re-generate the other output files:\n\n```sh\n$ node dist/bin/airspy.js -r out/0/events.log\n```\n\nThis is also useful if you want to tweak the parsing of the requests\nto generate better or additional output artifacts. (PRs welcome!)\n\nSample output directory:\n\n```sh\n$ ls -1 out/0/\n001-post-discover-coverage-modules.log\n001-post-discover-coverage-symbols.log\n001-post-discover-request-body.plist\n001-post-discover-request-head.txt\n001-post-discover-response-body.plist\n001-post-discover-response-head.txt\n002-post-ask-coverage-modules.log\n002-post-ask-coverage-symbols.log\n002-post-ask-request-body.plist\n002-post-ask-request-head.txt\n002-post-ask-response-body.plist\n002-post-ask-response-head.txt\n003-post-upload-request-head.txt\n003-post-upload-response-head.txt\nevents.log\n$\n```\n\nThen you may want to compare the code coverage traces for two requests.\n\nFor example to compare the modules involved, and in which order:\n\n```sh\n$ diff -u 001-post-discover-coverage-modules.log 002-post-ask-coverage-modules.log\n```\n\nAnd to compare the basic blocks involved, and in which order:\n\n```sh\n$ diff -u 001-post-discover-coverage-symbols.log 002-post-ask-coverage-symbols.log\n```\n\nOne example is that by looking at where execution first diverges, you\nimmediately know where the implementation decides what kind of request\nit's dealing with, so you can inspect that code with r2. Or, you might\nwant to use it to guide a fuzzer.\n\n## Development workflow\n\nTo continuously recompile on change, keep this running in a terminal:\n\n```sh\n$ npm run build-app:watch\n```\n\nPlus another terminal with:\n\n```sh\n$ npm run build-agent:watch\n```\n\nAnd use an editor like Visual Studio Code for code completion and instant\ntype-checking feedback.","project_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnowsecure%2Fairspy","html_url":"https://awesome.ecosyste.ms/projects/github.com%2Fnowsecure%2Fairspy","lists_url":"https://awesome.ecosyste.ms/api/v1/projects/github.com%2Fnowsecure%2Fairspy/lists"}