End-to-end encrypted file transfer for Android. An Android Magic Wormhole client.

wormhole-william-mobile

This is a Magic Wormhole client for Android. (Perhaps someday this will also support iOS).

Some current limitations:

  • Receiving directories are kept in zip form.
  • Send only supports sending a single file.

Installing the APK

Available from the Play store: https://play.google.com/store/apps/details?id=io.sanford.wormhole_william

Prebuilt APKs are provided with each release. You can install this to an android device that has developer mode enabled by running:

apk install wormhole-william.release.apk

Building

In order to build this you will need a local install of the android SDK. Set the environment variable ANDROID_SDK_ROOT AND ANDROID_ROOT to the path of the android SDK. Currently this project is hard coded to use platform android-30 (in the make file), so you will need to have that installed (or edit the make file for whatever you have). You will also need a modern version of Go. Probably >= 1.16.

Run make and see what happens!

This project uses https://gioui.org/ for its UI. It uses https://github.com/psanford/wormhole-william for the underlying wormhole implementation.

Screenshots

Receive 1

Receive 2

Send Text 1

Send Text 2

Send File

Comments
  • Receive location?

    Receive location?

    Where was my received file saved to? It wasn't in downloads, and browsing around I couldn't find it. If you're not going to put it in Downloads, it would be great if a configuration option was available to specify the download location. Otherwise, great app!

  • Version 1.0.7 crashes on startup on Android

    Version 1.0.7 crashes on startup on Android

    I've reported this issue also using "send feedback" on my Android phone. It's a Sony Xperia F5321 phone with Android 8.0.0. Version 1.0.6 works, but 1.0.7 crashes as soon as you launch it. I will try to send the "adb logcat" output once I figure out how to do that.

  • Corrupt sends with v1.0.4

    Corrupt sends with v1.0.4

    I was trying to use this Android tool to send a file to my Linux laptop and I'm pretty sure it's corrupting the transfer.

    I have a 2,693,769 byte binary file (tgz file) that on the other side of the wormhole ends up with an extra 375 bytes of seeming garbage at the end. I tried slicing that suffix off and passing it to the Linux "file" command and it doesn't have a detected structure.

    I'm wondering if there's a uninitialized buffer read or incorrectly sized buffer involved?

  • App is not accessible for screen readers

    App is not accessible for screen readers

    Currently the application is inaccessible to screen readers like TalkBack.

    I believe this is a current limitation with Gio. I'll check with them on where accessibility features fall on their roadmap.

  • Can't write files after receiving

    Can't write files after receiving

    Every time I receive a transferred file the app crashes and I see the following error in the logs:

    java.lang.SecurityException: Unsupported path /storage/emulated/0/Download/<redacted filename>
    

    Environment: v1.0.3 from the GitHub release on LineageOS 17.1 (Android 10) on a Sony Xperia XZ1C

    I've also seen the app crash in the same way on a Pixel 2 running stock Android 10 but can't check the logs to verify it's the same crash (but it looks like it).

    On both devices the app didn't ask for any permissions. Newer Android versions have locked down writing to the SD card more tightly so the app might need to request the storage permission in order to work. See https://developer.android.com/training/data-storage

  • use regular text box for receive code and allow spaces instead of dashes

    use regular text box for receive code and allow spaces instead of dashes

    I think two small changes would greatly improve usability of receiving files:

    1. Make the code field a regular text box to allow swipe-typing and autocomplete. The words are all dictionary words, so this would greatly speed up entry. Even if making the change would get rid of the number bar, I think it would still be a net improvement since there's only one digit but two full words to type in the default codes.
    2. Allow typing spaces instead of dashes, and just replace spaces by dashes before using the code. Typing a space is much easier than a dash on the android keyboard (in fact with swipe-typing you don't even need to explicitly type a space), and there's no reason to strictly require dashes.
  • Support QR Code Scanning of a transfer code

    Support QR Code Scanning of a transfer code

    https://github.com/psanford/wormhole-william/pull/37 adds support to generate QR Codes when sending a file. Add support for scanning a QR Code in the mobile app.

    The format for the encoded string in that branch is wormhole:${RendezvousURL}?code=${code}

  • Add app as a share target

    Add app as a share target

    Thank you for making the app, very cool!

    It would be lovely to have the app as a share target. So, you can for example share an image from a reddit app or the files app straight into this to send to another device without having to open it and browse to the file manually.

  • Fix download access for android 10

    Fix download access for android 10

    For android 10 we need requestLegacyExternalStorage and we need WRITE_EXTERNAL_STORAGE.

    We now will prompt for WRITE_EXTERNAL_STORAGE after you click accept (if we don't already have it).

    I'm not really sure why this works on android 11 but fails on android 10.

  • Support scanning QR Code for receiving files

    Support scanning QR Code for receiving files

    QR Codes can be generated from the wormwhole-william cli tool via the --qr flag.

    The code embeds the relay url, but currently we are ignoring that and just using the relay set in the config.

  • Support android share intent

    Support android share intent

    This adds initial support for android the share intent. Instead of opening the app and choosing a file, you can share the file from a different app.

    The implementation is a little awkward. Normally you would receive this intent in the main application activity. Gio owns that so we can't do that in this case. So instead we make a new activity that receives the event and then switches to the main activity.

    Currently nothing prevents you from sharing from the UI and from a share intent concurrently. The UI doesn't support this at all so the first action will just disappear (although the messages will probably get messed up).

    We should add proper state management for this.

    Fixes: #2

  • Use official uri-scheme in qr code

    Use official uri-scheme in qr code

    If i see it correctly, you use another uri-scheme than and you asked for the uri-scheme to be standardized https://github.com/magic-wormhole/magic-wormhole-protocols/issues/3. And it got standardized in https://github.com/magic-wormhole/magic-wormhole-protocols/pull/21.

    Is there a specific reason, that your uri is different than the standard?

  • Adds QR code generation for sends

    Adds QR code generation for sends

    This implements #28. I've done no testing on mobile, but:

    1. It uses a QR library from rsc, which has no C dependencies
    2. It works running the patched app on my laptop, generating QR codes, and receiving (by scannang the codes) from the wormhole-william-mobile app on my phone
    3. I have no reason to expect -- given the simplicity of my changes, and of rsc's QR library -- that it won't work once it's on a mobile device

    The QR codes are small, but they scan, and it works as-is. I don't have the Android SDK currently installed on my laptop because it's enormous.

    Anyhoo, you said you'd be happy to have a patch for #28, so here it is.

  • Crashes on receipt of files with

    Crashes on receipt of files with "invalid" characters

    Firstly: wonderful tool—thank you!

    I ran into an issue wherein the Android (Pixel 2 XL, Android 11) app. will crash when receiving a file with a : in the filename.

    • using magic-wormhole==0.12.0 on a Linux machine.
    • run wormhole send <filename_with_colon> and copy the code.
    • enter code into the Android app. and acknowledge receipt.
    • download progresses for the full duration but the app. crashes (no errors, just closes) on completion.

    My assumption is that it's something to do with the restricted range of characters on the Android end.

    Removing the : from the filename and retrying fixes the issue and it can be received without issue.

  • REQ: Render QR code for sharing

    REQ: Render QR code for sharing

    Wormhole William mobile can scan a QR code to receive a file; the complimentary function is to render a QR code for a share that another instance of Wormhole William can scan to receive.

  • Unable to type in receive codes

    Unable to type in receive codes

    All of the text input fields in the app seem to break when I try to input a string matching [0-9]+-[a-z]+. For instance, if i start typing 1-a, the a never appears in the text box, all I can type is 1-. This is obviously especially problematic for the recv code field, but the send text field has the same issue.

    I'm using version 1.0.8 on a Pixel 3a running LineageOS 18.1.

  • add keyboard suggestion support

    add keyboard suggestion support

    IME support has been added to gio for android: https://lists.sr.ht/~eliasnaur/gio/%3CCAFcc3FSWbqzHkWpzsOBLD9J3GmDgD5S6wO6ZqVoRKLq41GkObQ%40mail.gmail.com%3E

    We should be able to use this to auto-complete words from the standard wormhole dictionary.

Dec 28, 2022
erchive is a go program that compresses and encrypts files and entire directories into .zep files (encrypted zip files).

erchive/zep erchive is a go program that compresses and encrypts files and entire directories into .zep files (encrypted zip files). it compresses usi

May 16, 2022
Secretsmanager - Secrets management that allows you to store your secrets encrypted in git

I created secretsmanager to store some secrets within a repository. The secrets are encrypted at rest, with readable keys and editable JSON, so you can rename a key or delete it by hand. The cli tool handles the bare minumum of requirements.

May 6, 2022
A simple Go script to brute force or parse a password-protected PKCS#12 (PFX/P12) file.
A simple Go script to brute force or parse a password-protected PKCS#12 (PFX/P12) file.

A simple Go script to brute force or parse a password-protected PKCS#12 (PFX/P12) file.

Oct 14, 2022
Find secrets and passwords in container images and file systems
Find secrets and passwords in container images and file systems

Find secrets and passwords in container images and file systems

Jan 1, 2023
Take a list of domains and scan for endpoints, secrets, api keys, file extensions, tokens and more...
Take a list of domains and scan for endpoints, secrets, api keys, file extensions, tokens and more...

Take a list of domains and scan for endpoints, secrets, api keys, file extensions, tokens and more... Coded with ?? by edoardottt. Share on Twitter! P

Dec 25, 2022
Curl & exec binary file in one step. Also a kind of stealth dropper.
Curl & exec binary file in one step. Also a kind of stealth dropper.

curlNexec ?? Certainly useful , mainly for fun, rougly inspired by 0x00 article Short story curlNexec enable us to execute a remote binary on a local

Jan 2, 2023
Analyse the content of ipa file.

HelloIPA 对苹果 ipa 包内容进行分析 IsPayloadAppInfoPlist 是 Payload 目录下 app 包中的 Info.plist 文件 GetInfoPlistFileContent 获取 Info.plist 文件内容 GetBuildNumberFromIPA 从

Jul 20, 2022
sign Apple’s mobileconfig file to solve the ‘unsigned’ problem
sign Apple’s mobileconfig file to solve the ‘unsigned’ problem

amcs(apple mobile config signature) sign Apple’s mobileconfig file to solve the ‘unsigned’ problem the project rely openssl https://github.com/openssl

Nov 25, 2022
ZipExec is a Proof-of-Concept (POC) tool to wrap binary-based tools into a password-protected zip file.
ZipExec is a Proof-of-Concept (POC) tool to wrap binary-based tools into a password-protected zip file.

ZipExec ZipExec is a Proof-of-Concept (POC) tool to wrap binary-based tools into a password-protected zip file. This zip file is then base64 encoded i

Dec 31, 2022
Allows you to replace a secret in a file using secrets manager

secrets inserter Allows you to replace a secret in a file using secrets manager. ::SECRET:secret-name:SECRET:: will be replaced with your secret-name

Dec 12, 2021
Incident Response - Fast suspicious file finder

FastFinder - Incident Response - Fast suspicious file finder What is this project designed for? FastFinder is a lightweight tool made for threat hunti

Dec 28, 2022
Grafana Arbitrary File Reading Vulnerability

GrafanaArbitraryFileRead Usage 1. show info ❯ go run main.go -s [INF] VulnInfo: { "Name": "Grafana Ar

Sep 27, 2022
Let's Encrypt client and ACME library written in Go
Let's Encrypt client and ACME library written in Go

Let's Encrypt client and ACME library written in Go. Features ACME v2 RFC 8555 Register with CA Obtain certificates, both from scratch or with an exis

Dec 27, 2022
Let's Encrypt client and ACME library written in Go
Let's Encrypt client and ACME library written in Go

Let's Encrypt client and ACME library written in Go. Features ACME v2 RFC 8555 Register with CA Obtain certificates, both from scratch or with an exis

Dec 30, 2022
coyim - a safe and secure chat client
coyim - a safe and secure chat client

CoyIM - a safe and secure chat client CoyIM is a new client for the XMPP protocol. It is built upon https://github.com/agl/xmpp-client and https://git

Dec 7, 2022
Generate client secret for Apple get token call

Generate client secret for Apple get token call A util to generate client secret used in Apple get token call. Create a config.json file with the foll

Jan 6, 2022
Stobox Securities Chain client based on the bsc fork

Stobox Securities Chain The goal of Stobox Securities Chain is to bring programmability and interoperability to Binance Chain. In order to embrace the

Dec 24, 2021