This relatively new app currently has more than 1000 downloads, a 4.2 stars rating from 100 users and the latest APK (version 0.11.0) was from 26th December 2019.
Our analysis was done on 31st January 2020 based on data found in their Playstore description and their website and their source repository. We discuss the issue with verification with the provider here.
We found these ways of contacting the developers:
- Review of version 0.11.0 on 29th January 2020 (verdict: nonverifiable)
The following Analysis is not a full code review! We plan to make code reviews available in the future but even then it will never be a stamp of approval but rather a list of incidents and bad coding practice. We cannot find and tell you all the dark secrets the wallet providers might have.
Do your own research!
Try out searching for "lost bitcoins", "stole my money" or "scammers" together with the wallet's name, even if you think the wallet is generally trustworthy. For all the bigger wallets you will find accusations. Make sure you understand why they were made and if you are comfortable with the provider's reaction.
Our requests for change were heard quickly and we were promised the repository would now provide version matching the app from Google Play from before:
$ git clone https://github.com/horizontalsystems/unstoppable-wallet-android.git $ cd unstoppable-wallet-android.git $ git tag 0.1.0 0.1.1 0.10 0.11 0.2.0 0.3.0 0.4.0 0.5.0 0.6.1 0.6.2 0.6.3 0.7 0.7.0 0.8 0.9 0.9.1 1.0.0
0.11 is the best match still, with no
0.11.0 as the app from Google Play.
Moreover the provider told us that issues were resolved, so we have to assume
the correct revision is the next and last one:
$ git checkout master $ docker run -it --rm --volume $(pwd):/project --workdir /project mycelium-wallet root@2d27fa0de9fb:/project# ./gradlew clean :app:assembleProductionMainnetRelease ... BUILD SUCCESSFUL in 6m 53s 29 actionable tasks: 29 executed root@2d27fa0de9fb:/project# exit $ apktool d -o fromPlay Unstoppable\ 0.11.0\ \(io.horizontalsystems.bankwallet\).apk $ apktool d -o fromBuild app/build/outputs/apk/productionMainnet/release/app-productionMainnet-release-unsigned.apk $ diff --brief --recursive from* Files fromBuild/apktool.yml and fromPlay/apktool.yml differ Only in fromPlay/original/META-INF: CERT.RSA Only in fromPlay/original/META-INF: CERT.SF Files fromBuild/original/META-INF/MANIFEST.MF and fromPlay/original/META-INF/MANIFEST.MF differ
This looks exactly like we want it to look. Only files differing are signature and the analysis tool itself. This wallet is verifiable.
Verifiable: The provided Open Source Code matches the app released on Google Play
The app can be independently verified. If the provider puts your funds at risk on purpose or by accident, security researchers can see this if they care to look. It also means that inside the company engineers can verify that the release manager is releasing the app based on code known to all engineers on the team. A scammer would have to work under the potential eyes of security researchers. He would have to take more effort in hiding any exploit.
"Verifiable" does not mean "verified". There is good reason to believe that security researchers as of today would not detect very blatant backdoors in the open source code before it gets exploited, much less if the attacker takes moderate efforts to hide it.