네이티브 코드 추가
[앱세이퍼] 콘솔에 앱 등록하기
앱세이퍼는 네이버 클라우드 플랫폼에서 제공하는 모바일 앱 보안 서비스다.앱을 실행할 때 발생할 수 있는 변조, 루팅(탈옥), 스피드핵 등 다양한 보안 위협을 실시간으로 탐지하고 대응한다. (
mangformation.tistory.com
콘솔에 앱 등록을 끝냈다면 이제 각 프로젝트에 SDK와 코드를 추가해야 한다. (앱 등록을 하지 않았다면 위의 글을 참고!)
공식문서를 따라하면 쉽게 적용할 수 있다.
Android
https://guide.ncloud-docs.com/docs/appsafer-android
iOS
https://guide.ncloud-docs.com/docs/appsafer-ios
앱세이퍼가 적용된 앱을 최초 실행하거나 서명이 변경된 경우
앱세이퍼 App Management에서 해당 앱의 등록된 앱 지문 상태를 수집으로 변경해야 한다.

정상적으로 앱세이퍼가 적용이 되었다면
사진처럼 앱 지문이 추가가 된다.
그리고 App Switcher(백그라운드 앱리스트 화면)에 진입했을 때
앱의 화면이 아닌 "보안 정책으로 화면 표시 불가" 화면이 나오면 앱세이퍼가 동작하고 있는 것이다.

탐지 정책에 필터링 된 디바이스들은 Device Management 탭에서 확인할 수 있다.
여기서 차단된 디바이스를 차단 해제 할 수 있다.
당연히 이 목록에 있는 디바이스로 앱을 실행할 경우 탐지 정책에 의해 종료된다.
이제 적용하면서 마주쳤던 에러들을 소개(?)하겠다.
Unauthorized Signature
앱 등록 포스팅에서도 언급했었지만
App Management 화면에서 해당 앱의 앱 지문이 등록되지 않은 경우에 발생한다.
위의 사진에 등록된 앱 지문과 실행한 앱의 지문이 달라서 발생하는 이슈이다.
아니! 분명 전 버전에서는 정상동작 했었는데 왜 안되죠?
안드로이드의 경우에는 서명된 앱을 빌드할 때
이전 버전과 다른 서명을 사용하면 발생할 수 있는데,
이 경우에는 앱세이퍼 말고도 앱 업데이트 시에 패키지 충돌 이슈가 발생할 수 있다.
iOS의 경우에는
개발 인증서가 변경되거나, Signing에 있는 Team을 변경했을 때 지문이 달라질 수 있다.
이러한 인증 관련 변경이 발생했을 경우
마음 편하게 등록된 앱 지문 우측의 상태를 수집으로 변경한 뒤
앱을 실행시키고 다시 미수집으로 변경하자.
여기서 그럼 그냥 수집으로 계속 해놓으면 되는 것 아닌가? 라고 생각할 수 있겠지만
그렇게 되면 자신이 수정하여 배포한 앱이 아닌 앱도 실행될 수 있어서
보안에 취약해진다.
앱 지문을 등록했다면 반드시 상태를 미수집으로 변경하자.
추가적으로 해당 내용과 관련하여 고객센터에 문의한 적이 있는데, 아래와 같은 답변을 받았었다.
현재 AppSafer 적용된 앱 실행 시 iOS의 실행 바이너리를 읽어 시그니처를 생성하고 있습니다. 즉, 내부 코드를 수정하였다면, 기존 시그니처와는 다른 시그니처가 생성되어 탐지 및 차단될 수 있습니다.
소스코드가 수정된 앱 지문을 수집할 수 있도록 '수집'으로 변경하고 프로덕션 환경 배포 시 '미수집'으로 변경하시길 권고 드립니다.
새로운 빌드가 있을 때에는 수집으로 변경하고 실행하자!
앱이 실행 시 종료되는 현상 (혹은 terminated. due.to security issues)
사실 이건 앱세이퍼 문제라기 보다는 앱세이퍼가 정상적으로 탐지를 하여 종료시킨 상황일 가능성이 크다.
다만 가이드 문서(iOS 예시)에
if(result == BLOCK) {
NSLog(@"Device is blocked!");
// add to exit application logic
}
앱 종료 로직을 추가하라는 주석이 있다고
그냥 exit(0)를 추가할 경우 원인도 모르고 앱이 종료될 수 있다.
이미 앱세이퍼가 적용된 프로젝트에서 해당 이슈가 발생했었는데,
알고보니 모든 탐지 로직에 앱을 종료하는 로직이 추가되어 있어서 발생한 것이었다.
앱 종료 로직을 추가하되,
팝업이나 토스트 등을 추가하여 사용자가 원인을 알 수 있도록 하는 것이 좋다.
또 다른 원인들에는
네이티브 코드에 잘못된 앱세이퍼 key값을 입력한 경우와
탐지 정책에 의해 차단된 디바이스로 판단되었을 경우다.
개발자의 경우 테스트를 진행하다가 탐지 정책에 걸려서 앱이 종료되는 경우가 많은데,
이 때에는 위에서 언급했던 Device Management에 들어가서 해당 디바이스를 차단 해제 하도록 하자.
보통 이 경우는 "terminated. due.to security issues" 메시지와 함께 종료된다. (탐지 메시지를 따로 설정하지 않은 경우)
아주 낮은 확률로 앱세이퍼 적용 과정에서 기능끼리 충돌하여 강제로 종료될 수도 있다고 한다.
이 경우에는 고객센터에 문의하도록 하자.
iOS에서 캡쳐가 가능해요
문서를 자세히 읽어보면
사실 안드로이드만 캡쳐 차단이 가능하고, iOS는 캡쳐 감지만 가능하고 차단은 불가능하다고 나와있다. (2025. 09. 02 기준)
따라서 약간의 편법을 써야 하는데,
// 캡쳐를 막기 위한 로직 - 사용 : window.makeSecure()
extension UIWindow {
func makeSecure() {
let field = UITextField()
let view = UIView(frame: CGRect(x: 0, y: 0, width: field.frame.self.width, height: field.frame.self.height))
field.isSecureTextEntry = true
self.addSubview(field)
field.centerYAnchor.constraint(equalTo: self.centerYAnchor).isActive = true
field.centerXAnchor.constraint(equalTo: self.centerXAnchor).isActive = true
self.layer.superlayer?.addSublayer(field.layer)
field.layer.sublayers?.last?.addSublayer(self.layer)
field.leftView = view
field.leftViewMode = .always
}
}
이렇게 UIWindow를 extension하여 makeSecure 메소드를 추가하자.
AppSafer.registerScreenProtectionObserver(window, observer: self, selector: #selector(didDetectCapture))
window?.makeSecure()
이후 캡쳐 감지 옵저버를 등록하는 코드 아래에 위처럼 함수를 호출하면 된다.
(가이드 문서의 코드를 모두 추가했다고 가정한다.)
그리고 기존에 있는 deDetectCapture() 메소드 안에는 캡쳐가 감지되었다는 Alert를 띄우는 로직을 추가하면 깔끔하게 보여진다.
정리하면
앱세이퍼 : 사용자의 캡쳐 이벤트 감지
makeSecure() : 실제 캡쳐를 막는 로직
*잘못된 정보가 있을 경우 피드백 부탁드립니다 ( _ _ )
'앱세이퍼' 카테고리의 다른 글
| [앱세이퍼] 콘솔에 앱 등록하기 (0) | 2025.09.02 |
|---|