2P by GN⁺ 7일전 | ★ favorite | 댓글 1개
  • Android용 SSH 클라이언트 JuiceSSH가 2025년 12월 이후 기존 구매자들의 결제를 인식하지 못하게 됨
  • 2019년에 구매한 사용자의 라이선스가 무효화되고, 가격이 20달러 인상되었으며, 일부 사용자는 재구매 후에도 활성화되지 않는 문제를 겪음
  • 지원팀이 응답하지 않아 사용자들은 이를 사실상 ‘exit scam’ 으로 인식
  • 글에서는 ApkTool, jadx, jarsigner 등을 이용해 앱을 디컴파일하고 smali 코드를 수정하여 프로 기능을 복원하는 방법을 단계별로 제시
  • 클라우드 동기화와 플러그인은 더 이상 작동하지 않지만, 프로 기능을 다시 사용할 수 있는 방법으로 소개됨

JuiceSSH의 문제 상황

  • JuiceSSH는 Android에서 사용 가능한 SSH 클라이언트로, 작성자는 2025년 12월까지 이를 최고의 앱으로 평가함
  • 2019년에 구매한 Pro 버전 라이선스가 더 이상 인식되지 않음, 가격은 20달러 상승
  • 일부 사용자는 재구매 후에도 앱이 활성화되지 않는다고 리뷰에 남김
  • Google Play에서 앱이 리스트에서 제거되었으며, 지원팀은 응답하지 않음
  • 이러한 상황을 작성자는 exit scam으로 표현

앱 복원 준비

  • 앱을 다시 작동시키기 위해 jadx, ApkTool, jarsigner(OpenJDK 포함) 등의 도구가 필요함
    • Windows에서는 choco install openjdk로 설치 가능
  • JuiceSSH APK는 PureAPK에서 다운로드하거나, adb를 이용해 직접 추출 가능
  • 다운로드 시 SHA256 해시 검증 필요
    • 마지막 버전(3.2.2)의 해시는 d1ee811bcd82f25aea0bdc568896d82017ee174d9c4631c123a9d9173c748232

디컴파일 단계

  • ApkTool을 이용해 APK의 DEX 코드를 디컴파일
    & "C:\Program Files\OpenJDK\jdk-25\bin\java.exe" -jar ./apktool_2.12.1.jar d juicessh.apk
    

smali 코드 수정

  • 세 개의 smali 파일을 수정해야 함

1. smali/com/sonelli/juicessh/models/User.smali

  • public boolean H() 함수는 구매 및 서명 검증을 수행
  • 원래의 검증 로직을 제거하고 항상 true를 반환하도록 변경
    public boolean H() {
        return true;
    }
    

2. smali/com/sonelli/oi0.smali

  • public static boolean d(Object obj) 함수는 위의 H()를 호출해 구매 유효성을 확인
  • 이를 항상 true를 반환하도록 수정
    public static boolean d(Object obj) {
        return obj.getClass().getName().equals(User.class.getName());
    }
    

3. smali/com/sonelli/pi0.smali

  • public static void j(Context context, p pVar) 함수는 프로 기능 인증의 핵심 부분
  • 원래는 사용자 세션을 검증하고 만료 시 재인증을 수행
  • 수정된 버전에서는 가짜 사용자 객체를 생성하고, 세션 만료를 1년 뒤로 설정한 뒤 항상 성공 콜백을 호출
    public static void j(Context context, p pVar) {
        User user = new User();
        user.email = "myemail@google.com";
        user.name = "hello";
        user.given_name = "hello";
        user.sessionExpires = System.currentTimeMillis() + (86400000 * 365);
        user.sessionIdentifier = "";
        b = user;
        pVar.b(user);
    }
    

재컴파일 및 서명

  • 수정 후 APK를 다시 빌드
    & "C:\Program Files\OpenJDK\jdk-25\bin\java.exe" -jar .\apktool_2.12.1.jar b juicessh
    
  • 생성된 파일은 juicessh\dist\juicessh.apk에 위치
  • 자체 서명용 keystore 생성 및 APK 서명
    keytool -genkey -v -keystore k.keystore -alias a -keyalg RSA -keysize 2048 -validity 50000
    jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore k.keystore ./juicessh/dist/juicessh.apk a
    

결과 및 한계

  • 서명된 APK를 설치하면 보안 경고를 무시하고 프로 기능을 다시 사용할 수 있음
  • 클라우드 동기화 기능은 작동하지 않으며, 플러그인도 더 이상 지원되지 않음
  • 작성자는 이러한 상황을 개발자에 대한 신뢰 상실로 표현하며, 이를 “농담 같은 일”로 평가함
Hacker News 의견들
  • 지원팀이 완전히 잠잠해서 사실상 exit scam처럼 보임
    많은 사용자가 돈을 잃은 상태에서 이제야 이슈가 주목받기 시작했음
    두 개발자는 현재 각각 Microsoft와 AWS의 관리직에 있으면서 이메일을 무시하고 있음
    JuiceSSH는 방치된 채로 환불이나 소스 공개, 마지막 업데이트조차 없이 끝나버림
    Google Play 지원팀에 문의했지만, 결제 후 120일이 지나면 환불이 불가능하다는 답변만 받았음
    관련 링크: JuiceSSH 소개, Sonelli 소개, Paul Maddox, Tom Maddox

    • 위 링크 중 일부는 CloudFront 오류가 나지만 sonelli.com은 여전히 접속 가능함
      몇 달 전 앱 내 기능으로 라이선스를 재활성화했는데, 정확히 언제였는지는 기억이 안 남
  • 몇 년째 이 앱을 써왔는데, 최근 포워딩 기능(프로 기능)을 쓰려다 다시 결제하라는 메시지를 받았음
    이미 2014년에 5유로로 구매했는데 이번엔 30유로를 또 냈고, 그 즉시 앱 전체가 잠겨버림
    이메일을 여러 번 보냈지만 아무 답도 없음

    • 아직이라면 Google에 환불 요청을 해보길 권함
      Google Play 환불 정책에 따르면 48시간 이내만 가능하지만, “구매가 전혀 작동하지 않음”은 예외일 수 있음
    • 왜 그런 기능에 돈을 내는지 모르겠음
      Termux는 포켓 속의 작은 Linux라서 SSH 관련 기능은 다 있음
  • “JuiceSSH가 Android에서 최고”라는 말은 인정하지 않지만, 나는 Termux + Unexpected Keyboard 조합만 써왔음
    다른 앱이 이 경험을 개선할 수 있을지 상상이 안 감
    JuiceSSH가 그렇게 좋은 이유가 뭔지 궁금함

    • 지금 논의는 JuiceSSH가 더 이상 작동하지 않고 지원이 끊긴 상황에 대한 것임. 그게 답이 될 것 같음
    • 예전에 JuiceSSH Pro를 잠깐 무료로 썼지만, 지금은 Termux가 훨씬 낫다고 느낌
      SSH 키와 alias 설정, 멀티홉 연결 모두 가능하고, AnySoftKeyboard의 단축키 지원이 좋아서 효율적임
      F-Droid에서 전부 설치 가능함
    • JuiceSSH나 Termux 둘 다 안 써봤지만, ConnectBot으로 SSH와 포트 포워딩을 잘 써왔음
      VNC 세션 연결에도 문제없었음
    • 아무도 ServerBox를 언급하지 않아서 놀람
      ServerBox (F-Droid)도 괜찮은 대안임
    • JuiceSSH Pro를 오래전 구매해 지금도 매일 씀
      서버 몇 개를 원클릭으로 접속할 수 있고, 기기 간 동기화도 편했음
      최근 Termux를 써보니 대체 가능해 보이지만, 복사·붙여넣기나 앱 전환 시 연결 유지력은 JuiceSSH가 더 좋음
  • Pro 버전을 오래 안 썼지만, 지금이라면 Android 15부터 제공되는 Terminal 앱을 쓸 것 같음
    완전한 Debian VM 환경임

    • 다만 Snapdragon 칩은 필요한 기능을 지원하지 않아 Pixel이나 MediaTek 기기에서만 가능함
    • Termux는 VM을 쓰지 않기 때문에 더 가볍게 쓸 수 있음
    • 혹시 Termux를 말하는 건지? 비슷한 이름의 다른 Terminal 앱은 못 찾겠음
  • 이번 사태는 MorphieReVanced 같은 패치 자동화 도구를 소개하기 좋은 계기일 수도 있음

    • ReVanced는 잘 알고 있지만 Morphie는 처음 들어봄
      찾아보니 morphe.software에서 확인 가능함
      현재는 YouTube만 지원하는 ReVanced의 파생 프로젝트 같음
      참고로 ReVanced 공식 사이트는 원래 광고 없는 YouTube 앱(Vanced)에서 출발해, 지금은 여러 앱을 패치할 수 있는 툴로 발전했음
  • 프로 기능 플러그인들이 전부 Play Store에서 삭제된 걸 방금 발견함
    예전엔 Android에서 최고의 SSH 클라이언트라고 생각했는데 정말 아쉬움

  • 이번 일로 클라우드 키 저장의 위험성을 다시 깨달음
    .ssh 키를 전부 지우고 ed25519 기반으로 새로 구성할 예정임

    • 나도 JuiceSSH에 SSH 키를 백업해둔 줄 알고 있었는데, 지금 보니 위험할 수도 있겠음
      키를 빨리 교체하지 않으면 보안 악몽이 될 수도 있음
  • 이런 글이 올라오는 이유는 이해하지만, 너무 성급한 결론일 수도 있다고 생각함
    개발자나 지원팀이 과부하로 대응이 늦을 수도 있고, 앱이 버그로 망가질 수도 있음
    차라리 버그 리포트, 환불 요청, 대체 앱 사용이 더 나은 대응 같음
    사이드로딩에 대한 부정적 인식으로 번지는 건 더 우려됨

    • 하지만 앱이 수년간 거의 변경 없이 잘 작동하다가 갑자기 가격이 오르고 프로 기능이 멈췄음
      완전한 침묵 속에서 돈만 받는 건 납득하기 어려움
      최소한 “소스 코드 접근을 잃었다”는 한마디라도 남겼어야 함
  • 2년 전 JuiceSSH를 ConnectBot으로 완전히 대체했음
    무료이면서 문제없이 잘 작동함
    Play Store 링크

    • F-Droid 버전GitHub 저장소도 있음
    • JuiceSSH나 Termux는 안 써봤지만, ConnectBot은 안정적이고 신뢰할 만한 SSH 클라이언트