JuiceSSH – 내 프로 기능을 돌려줘

1 week ago 5

  • 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를 설치하면 보안 경고를 무시하고 프로 기능을 다시 사용할 수 있음
  • 클라우드 동기화 기능은 작동하지 않으며, 플러그인도 더 이상 지원되지 않음
  • 작성자는 이러한 상황을 개발자에 대한 신뢰 상실로 표현하며, 이를 “농담 같은 일”로 평가함

Read Entire Article