앱 위변조 제품이 바이너리를 서버에 등록하여 바이너리 사이즈와 info.plist 정보를 저장한 뒤 앱 실행 시 해당 정보를 비교하는 방식이었는데, 이런 형식의 존재 여부가 희미해졌다.


실제 바이너리가 디바이스나 OS 버전에 따라서 달라질 수 있다는 점 때문으로 실제 바이너리의 구성이나 파일 사이즈를 확인하지는 못했지만 이런 증상들이 계속된다고 한다.


그럼, 어떻게 iOS에서 이런 일이 발생하게 된 것일까? (안드로이드의 경우도 이런 형태로 단말에 최적화한 리소스와 바이너리를 구성하게 하는 방향으로 가고 있다.)


http://stackoverflow.com/questions/30722606/what-does-enable-bitcode-do-in-xcode-7

http://www.imore.com/app-thinning-ios-9-explained

http://lowlevelbits.org/bitcode-demystified/



관련해서 스택과 웹에서 관련 내용을 좀 찾아보았다.


관련 이슈는 앱의 용량을 줄이는 슬라이싱(App Slicing)이라는 이슈 아래에 몇 가지 형태의 이슈가 보인다.


아이폰의 경우 단말에 확장 메모리를 추가할 수 없고, 최소 사양의 단말은 항상 16기가 정도를 유지하고 있어서 OS의 업데이트 및 앱 다운로드에 이슈가 되어 왔다.


아마도 이런 문제점을 해소하고 용량의 제약을 해결하기 위해서 그리고 단말의 서로 다른 아키텍처 지원 등이 이슈가 되어 왔던 것 같다.



비트코드의 경우 iOS 9 (Xcode 7)부터 등장한 개념으로 다음과 같이 애플의 문서에 기술되어 있다.



  Bitcode is an intermediate representation of a compiled program. Apps you upload to iTunes Connect that contain bitcode will be compiled and linked on the App Store. Including bitcode will allow Apple to re-optimize your app binary in the future without the need to submit a new version of your app to the store. 





예상해보건대 내가 올린 바이너리를 각 디바이스의 아키텍처 맞도록 다시 컴파일해서 해당 디바이스에 맞도록 바이너리를 생성 후 사용자가 다운로드 받게 해주는 것이다.


내용을 좀 보완을 하자면 향후 추가되는 아키텍처가 있더라도 별도의 바이너리 빌드 후 업로드가 추가적으로 내가 빌드해서 올리지 않아도 될 수도 있다는 것이다.


스택의 글을 읽어보니 비트코드가 re-optimize라는 문구로 인해서 용량이 줄도록 해주는 지 혹은 용량과 관련없이 아키텍처에 최적화에만 맞춰져 있는지 유저간 이야기가 오가는 것을 볼 수 있다.


일단 내 생각에도 이 부분은 용량의 감소보다는 플랫폼에 해당하는 아키텍처에 따른 최적화가 아닐까 생각이 든다.


사용자가 아이튠즈(iTunes)를 통해서 앱을 내려받을 때 사용자의 단말에 적합한 아키텍처에 해당하는 바이너리를 내려줄 수 있다는 이야기인데, 여기에도 약간의 의문이 남는다.


사용자가 비트코드가 적용된 바이너리를 다운받고 사용하면서 iCloud 또는 iTunes 앱을 통해서 앱을 백업하고, 이를 이용하다가 단말의 변경(이전 아키텍처 폰으로 간다든지)할 때에도 모든 앱의 바이너리 적합성을 애플 서버에서 체크하는 지의 여부이다. (아마도 그렇게 구현되었을 것이라고 생각한다.)


만약에 애플이 바이너리를 디바이스에 적합하게 다시 바이너리를 내려준다면 앱 위변조가 사용된 앱들은 검증에 통과하지 못할 것이다.



또한 bitcode 설정이 되었다면 새로운 바이너리를 생성할 때 앱 슬라이싱에 대한 부분이 적용된다고 봐야 한다.


따라서 결국은 적합한 아키텍처를 위한 바이너리 생성을 위해서 bitcode도 앱의 파일 사이즈에 영향은 미치게 될 것이다.


아무튼, 앱 위변조 프로그램의 유용성을 생각해보다가 여기까지 왔는데...실제 이제 앱 위변조 프로그램의 역할이란 단순히 jailbreak를 체크하고 앱의 패키지와 빌드 버전 체크 정도가 아닐까 생각이 든다.


iOS에서는 백신도 앱 위변조도 크게 유용성을 갖지 못하는 것 같다.



+ Recent posts