
2026/01/27 2:46
**JuiceSSH – プロ機能を取り戻してください**
RSS: https://news.ycombinator.com/rss
要約▶
日本語訳:
JuiceSSHの有料機能は、2025年12月に2019年購入検証チェックが失敗したため動作しなくなり、再購入後もアプリを再度有効化できませんでした。この記事では、APK をパッチしてプロ機能を復元する方法について説明します。
やるべきこと:
- 正確な APK(v3.2.2)をダウンロード し、ハッシュ
を確認します。d1ee811bcd82f25aea0bdc568896d82017ee174d9c4631c123a9d9173c748232
(java -jar d juicessh.apk
JAR が必要)を使用して デコンパイル します。dex-tools- 三つの smali ファイルをパッチ します:
– メソッドcom/sonelli/juicessh/models/User.smali
を常に true を返すよう変更。H()
–com/sonelli/oi0.smali
をクラス名だけを確認し true を返すよう修正。d(Object)
–com/sonelli/pi0.smali
をスタブに置き換え、ダミー User を作成し将来のセッション期限を設定し、それをグローバル変数j(Context,p)
に割り当て、成功コールバックを呼び出すようにします。b
- ApkTool(
)で 再コンパイル します。apktool_2.12.1.jar juicesshSign - キーストアを作成 (
) し、OpenJDK のkeytool -genkey ...
(jarsigner
)で署名します。署名済み APK をインストールし、セキュリティ警告を無視してプロ機能を再び使用できるようにします。-sigalg SHA1withRSA
このパッチ適用後、認証ロジックが変更されるためクラウド同期とプラグインサポートは失われます。このケースは Android アプリのライセンスシステムに脆弱性があることを示しており、他の開発者が検証メカニズムを再検討するきっかけになる可能性があります。
本文
JuiceSSH は 2025 年 12 月まで、Android で利用できる最高の SSH クライアントでした。
それ以降、2019 年に購入したライセンスが認識されなくなり、価格は $20 上昇しています。一部ユーザーは再購入後もアプリが起動しないと報告しており、サポートが応答せず「エグジット詐欺」に見えるケースがあります。
以下では、アプリの機能を復元する手順を紹介します。
jadx(smali を読むため)、ApkTool、jarsigner(OpenJDK に含まれる)と、Windows なら Chocolatey(
choco install openjdk)が必要です。
また JuiceSSH の APK も用意してください。PureAPK からダウンロードしたものを使用しましたが、デバイスから
adb で自分のファイルを取り出すこともできます。ハッシュは VirusTotal や
sha256sum で確認し、最新版(3.2.2)の SHA‑256 は以下です。
d1ee811bcd82f25aea0bdc568896d82017ee174d9c4631c123a9d9173c748232
下記は PowerShell スタイルのコマンドですが、好きなシェルに合わせて調整してください。
1. APK を逆コンパイル
"C:\Program Files\OpenJDK\jdk-25\bin\java.exe" -jar d juicessh.apk
これで
dex コードが smali ファイルへ展開され、dist/ フォルダーに出力されます。
2. Smali を修正
a) com/sonelli/juicessh/models/User.smali
com/sonelli/juicessh/models/User.smaliメソッド
H() の本体を置き換えます:
# 元のコード .method public H()Z .locals 1 const/4 v0, 0x1 return v0 .end method # パッチ:常に true を返すように変更
b) com/sonelli/oi0.smali
com/sonelli/oi0.smali静的メソッド
d(Object) を置き換えます:
.method public static d(Ljava/lang/Object;)Z .locals 3 invoke-virtual {p0}, Ljava/lang/Object;->getClass()Ljava/lang/Class; move-result-object v0 invoke-virtual {v0}, Ljava/lang/Class;->getName()Ljava/lang/String; move-result-object v0 const-class v1, Lcom/sonelli/juicessh/models/User; invoke-virtual {v1}, Ljava/lang/Class;->getName()Ljava/lang/String; move-result-object v1 invoke-virtual {v0, v1}, Ljava/lang/String;->equals(Ljava/lang/Object;)Z move-result v2 if-nez v2, :cond_true const/4 v0, 0x0 return v0 :cond_true const/4 v0, 0x1 return v0 .end method
c) com/sonelli/pi0.smali
com/sonelli/pi0.smali認証処理を置き換えます:
.method public static j(Landroid/content/Context;Lcom/sonelli/pi0$p;)V .locals 8 new-instance v0, Lcom/sonelli/juicessh/models/User; invoke-direct {v0}, Lcom/sonelli/juicessh/models/User;-><init>()V const-string v1, "myemail@google.com" iput-object v1, v0, Lcom/sonelli/juicessh/models/User;->email:Ljava/lang/String; const-string v1, "hello" iput-object v1, v0, Lcom/sonelli/juicessh/models/User;->name:Ljava/lang/String; iput-object v1, v0, Lcom/sonelli/juicessh/models/User;->given_name:Ljava/lang/String; invoke-static {}, Ljava/lang/System;->currentTimeMillis()J move-result-wide v2 const-wide/32 v4, 0x05265c00 # 86400000 const-wide/16 v6, 0x016d # 365 mul-long/2addr v4, v6 add-long/2addr v2, v4 iput-wide v2, v0, Lcom/sonelli/juicessh/models/User;->sessionExpires:J const-string v1, "" iput-object v1, v0, Lcom/sonelli/juicessh/models/User;->sessionIdentifier:Ljava/lang/String; sput-object v0, Lcom/sonelli/pi0;->b:Lcom/sonelli/juicessh/models/User; invoke-virtual {p1, v0}, Lcom/sonelli/pi0$p;->b(Lcom/sonelli/juicessh/models/User;)V return-void .end method
3. APK を再コンパイル
"C:\Program Files\OpenJDK\jdk-25\bin\java.exe" -jar .\apktool_2.12.1.jar juicesshSign
4. APK に署名(自己署名)
# まだキーストアが無い場合は作成します keytool -genkey -v -keystore k.keystore -alias a -keyalg RSA -keysize 2048 -validity 50000 # 再構築した APK を署名します jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore k.keystore ./juicessh/dist/juicessh.apk a
5. インストールして再利用
署名済みの APK をデバイスにインストールします。
自己署名なのでセキュリティ警告は無視し、JuiceSSH のプロ機能が再び使えるようになります。
備考
- このパッチ後はクラウド同期が動作しない可能性があります。
- プラグインも無効化されます。ライセンスチェックに依存しているためです。