11/16/2018

iOS MinimumOSVersion 우회 삽질기(Test case for bypass ios min sdk version)

최근에 iOS 앱 중 최소 설치버전 제한 떄문에 약간 삽질했던 내용 아까워서 기록합니다.
결론부터 말씀드리면 해당 앱 기준으론 성공하지 못했습니다...

https://vignette.wikia.nocookie.net/disney/images/2/25/Vader-nooooo.jpg


iOS도 Android 처럼 minSdkVersion을 가지고 있으며 Info.plist에 MinimumOSVersion로 지정해서 사용하게 되어있습니다.

우선 찾아보니 2가지 정도로 MinimumOSVersion 우회를 넘어갈 수 있는 방법들이 있더군요.
(잠깐 찾아보고 테스트 해봤던거라 가능한건데 해결 못한걸수도 있습니다)

우선은 iOS 디바이스 내 SystemVersion 파일을 수정하는 방법입니다. /System/Library/CoreServices 경로에 SystemVersion.plist 파일이 있고 이 파일에는 버전에 대한 정보가 기입되어 있습니다.

iosios:/System/Library/CoreServices root# cat SystemVersion.plist
<?xml version="1.0" encoding="UTF-8"?>
<!DOCTYPE plist PUBLIC "-//Apple//DTD PLIST 1.0//EN" "http://www.apple.com/DTDs/PropertyList-1.0.dtd">
<plist version="1.0">
<dict>
    <key>ProductBuildVersion</key>
    <string>14G60</string>
    <key>ProductCopyright</key>
    <string>1983-2016 Apple Inc.</string>
    <key>ProductName</key>
    <string>iPhone OS</string>
    <key>ProductVersion</key>
    <string>10.3.3</string>
</dict>
</plist>

여기서 ProductionVersion의 값을 바꿔주면 된다곤 하는데, 혹시몰라 ProductBuildVersion 도 바꿔주었습니다.
ProductionBuildVersion은 아래 iOS History 문서보면 버전별로 빌드 네임이 있습니다. 그 부분입니다.

(https://en.wikipedia.org/wiki/IOS_version_history)

    <key>ProductBuildVersion</key>
    <string>13F69</string>
    <key>ProductVersion</key>
    <string>9.3.2</string>

그리고.. 2번째는 앱 내부에 Info.plist에서 직접 바꿔주는겁니다. 사실 소스코드가 있다면 Xcode에서 바꿔주면 확실하지만 압축 해제 후 Info.plist에서 버전정보 수정 후 재 서명 후 넣어주면 어느정도 가능하다고 봅니다.
(이런 형태의 방법은 안드로이드에서도 많이 사용하죠)

#> unzip test.ipa
#> cd test/test.app/

app directory까지 진입하면 앱의 정보를 가지고 있는 Info.plist 파일이 있습니다(분석떄도 이 파일 많이 참조하죠..iOS의 Manifest라고 생각하심될듯)
잘 찾다보면 MinimumOSVersion key와 value값이 확인됩니다. 원하는 버전으로 바꿔줍시다

#> vim Info.plist
    <key>MinimumOSVersion</key>
    <string>10.0</string>

그리고 다시 압축해서 ipa 파일로 만들어주면 우선 앱 파일은 다시 만들어진 상태입니다.

#> zip -r hwul.zip ./*
#> mv hwul.zip hwul.ipa

여기서 개별 앱에 대한 무결성 검증차 서명이 필요한데, 개인의 Xcode 인증서나 Cydia Impactor로 서명해서 설치해주시면 됩니다.
Cydia Impactor로 넣어주면 인증서 문제도 해결됩니당 (Cydia Impactor는 사용자의 iTunes 계정으로 서명하기 떄문에 서명 우회를 할 필요가 없음)

보통은 이런 방법들로 재서명하니 참고하시길..
https://www.ketzler.de/2011/01/resign-an-iphone-app-insert-new-bundle-id-and-send-to-xcode-organizer-for-upload/

제 환경이 문제인지 앱이 문제인지 이런 방법들이 잘못된건지 정확하겐 모르겠지만, 비슷한 문제를 해결하는데 있어 조금이라도 도움되셨길 바랍니다 :)




HAHWUL

Security engineer, Gopher and H4cker!

Share: | Coffee Me:

5 comments:

  1. 정보감사합니다. 근데 잘 안되네요.ㅠ.ㅠ

    ReplyDelete
    Replies
    1. 그러게요.. 저도 케바케로 되다보니, 환경적인 요소나 버전 등 도 작용하는 느낌이긴합니다.

      Delete
  2. 아 그리고 추가로 내용 붙이자면, SystemVersion.plist 수정하는 부분은 기기에 따라서 문제 발생시킬 수 있으니 신중하게 고민해보시는게 좋습니다.

    ReplyDelete
  3. 감사합니다. iOS진단업무에서 iOS9 환경 디바이스 에서는 여러가지 진단툴로 취약점 진단이 가능했었는데 MinimumOSVersion 이 10.0으로 되어 있어 iOS9디바이스에 ipa를 인스톨이 안되네요...
    인스톨이 안되니... 할만한게 참 별루 없네요..ㅠ.ㅠ

    ReplyDelete
    Replies
    1. 그렇죠.. 최근 앱들은 거의다 10~11 이상을 기본으로 깔고가다보니 테스트 장비 세팅하는게 영 불편하긴합니다.
      그나마 프리다가 순정에서 쓸 수 있다는게 참 다행인네요 ㅜㅜ

      Delete