일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | ||||||
2 | 3 | 4 | 5 | 6 | 7 | 8 |
9 | 10 | 11 | 12 | 13 | 14 | 15 |
16 | 17 | 18 | 19 | 20 | 21 | 22 |
23 | 24 | 25 | 26 | 27 | 28 |
- Android 13
- Koin
- 테스트 자동화
- 인앱결제
- MediaPlayer
- RxKotlin
- SWIFTUI
- databinding
- Android
- Reactive
- list
- SwiftUI Tutorial
- mvvm
- node
- rx
- MediaSession
- junit
- 동영상
- Kotlin
- Animation
- php
- Observable
- mysql
- google play
- paging
- MotionLayout
- PagingLib
- GCP
- android13
- node.js
- Today
- Total
목록전체 글 (145)
봄날은 갔다. 이제 그 정신으로 공부하자
개요 앱이 위변조 되는 상황은 두 가지로 볼 수 있습니다. 첫째는 크래커가 내 앱을 디컴파일 후 변조 후 재빌드해서 사용하는 상황이고 둘째는 내 앱을 다운로드 받아 중국의 샤오미 마켓과 같은 다른 마켓에 앱을 등록하는 상황으로 나눌 수 있습니다. 이 번 글에서는 두가지 상황을 방지하는 방법에 대해 설명 하도록 하겠습니다. 첫번째 “크래커가 내 앱을 디컴파일 후 변조 후 재빌드해서 사용하는 상황” 이것을 방지하기 위해 사용되는 것이 앱 서명 키의 Hash key를 사용하는 것 입니다. 앱 서명 키란? 앱을 마켓에 배포하기 위해 배포 빌드를 할 때 앱 서명에 사용되는 키로 크래커가 디컴파일해서 앱을 재빌드 할 경우, 크래커는 내앱의 서명키를 알수 없어, 크래커가 만든 앱은 내가 배포한 앱과는 다른 서명키로 ..
개요 지난번 글에 이어 이번에는 앱이 배포된 뒤 크래커에 의해 디버깅 되는 것을 막는 방법에 대해 설명하도록 하겠습니다. 개발자가 엄청난 노력을 기울여 시큐어 코딩을 하고 코드를 난독화해도 디버깅 툴 연결을 허용한다면 크래커는 적은 노력으로 많은 정보를 획득할 수 있으므로 가능한 디버깅을 막아야 합니다. 크래커가 앱을 크랙킹하기 위해 어떤 것들을 할까요? 앱을 다운로드 받아 디컴파일하고 디버깅툴에 연결해 실행하거나 실행된 앱이 생성한 파일을 추출해 분석할 것 입니다. 그러므로 우리는 이러한 것들을 막을 필요가 있고 막아야 하는 것은 아래 4가지 입니다. 처음 두개는 반드시 막아야하고 뒤에 두가지는 앱에 따라 막는 것을 선택하면 됩니다. - 루팅된 OS 감지 - 디버깅툴 연결 감지 - 개발자 모드 감지 (..
개요 Android 앱은 APK 즉, Application Package로 구성됩니다. 개발자가 play store에 aab(App Bundle)로 앱을 등록해도 실제 사용자가 다운로드 받는 앱은 apk 형식의 파일 입니다. apk 파일은 디컴파일을 통해 소스 형태로 되돌릴 수 있습니다. 즉, 그렇다는 이야기는 악의적인 사용자가 내가 만든 앱을 다운로드 받아 디컴파일을 통해 앱을 빌드 가능한 상태의 소스로 되돌린 후, 수정해 악의적으로 사용하는 것이 가능합니다. 안전한 앱을 만드는 방법 이러한 문제점을 해결하기 위해 앱을 만들고 배포할 때 지켜야하는 몇가지 룰이 있으며 해당 룰만 지킨다면 크랙킹으로부터 안전한 앱을 만들 수 있습니다. 첫번째는 크랙커가 디컴파일을 통해 얻은 소스코드에서 유효한 정보를 얻기..
지금까지 여러 타입의 연산자에 대해 알아보았습니다. 이번 글은 연산자 타입의 마지막으로 유틸리티 작업을 수행하는데 도움을 주는 유틸리티 연산자에 대해 설명하도록 하겠습니다. 유틸리티 작업을 수행하는데 도움을 주는 연산자들 입니다. 이번 글에서 설명할 유틸리티 연산자의 종류는 다음과 같습니다. - reduce() - count() - any() - all() - contains() - doOnXXX() - serialize - cache() reduce reduce() 연산자는 누적 연산자로 프로듀서의 모든 방출들을 누적해서 onComplete 이벤트 호출 시 누적한 값을 내보냅니다. reduce 연산자는 앞서 설명한 scan 연산자(변환 연산자)와 유사한데 scan 연산자가 아이템 방출시마다 누적했다가 ..
이번 글에서는 오류 처리 연산자에 대해 설명하도록 하겠습니다. 엡 개발 과정에서 오류는 언제든 발생할 수 있지만 개발자는 사용자가 이를 인지하지 못하고 자연스럽게 동작할 수 있도록 오류를 적절히 관리해야 할 필요가 있습니다. 오류 처리 연산자는 Observable이 발생 시킨 오류를 복구할 수 있도록 도와주는 연산자입니다. 오류 처리 연산자는 오류 발생 시 이벤트를 캐치해서 이후 처리 방안을 지정해주는 “onErrorXXX 계열 연산자”와 오류 발생 시 원천 Observable의 재시도를 지정하는 “retryXXX 계열 연산자”로 구분할 수 있습니다. - onErrorXXX 계열 연산자 - retryXXX 계열 연산자 onErrorReturn onErrorReturn 연산자는 Observable에서 아이..
이번 글에서는 조건 연산자에 대해 설명하도록 하겠습니다. 조건 연산자는 Observeble의 흐름을 제어하는 역할을 합니다. 필터 연산자가 발행된 값을 “채택” or “무시” 여부에 초점을 맞춘다면, 조건 연산자는 지금까지의 흐름을 어떻게 제어할 것인지에 초점을 맞춤니다. Reactive에서 지원하는 조건 연산자의 종류는 다음과 같습니다. - ambXXX 계열 연산자 - takeXXX 계열 연산자 - skipXXX 계열 연산자 - all 연산자 amb amb() 연산자는 인스턴스 없이 사용 가능한 연산자로 연산자의 매개변수로 들어온 Observable 중 먼저 아이템을 방출하는 Observable을 사용하고 나머지 Observable의 방출은 무시하는 연산자 입니다. 사용 방법은 아래와 같습니다. fun..
이번 글에서는 겹합 연산자에 대해 설명하도록 하겠습니다. 결합연산자는 다수의 Observable을 하나로 합하는 방법을 제공하는 연산자 입니다. 결합과 관련된 연산자로는 변환 연산자에서 설명한 flatMap() or groupBy() 연산자들이 있지만 이 연산자들은 1개의 Observable을 확장해주는 연산자인 반면 결합 연산자는 여러 개의 Observable을 개발자가 원하는 Observable로 결합해 준다는 점에서 서로 다르다고 할 수 있습니다. Reactive에서 지원하는 결합 연산자의 종류는 다음과 같습니다. - startWith - merge - mergeArray - mergeWith - mergeDelayError - concat - zip - zipWith - combineLatest ..
이번글에서는 업스트림이 방출한 아이템을 “채택” or “무시” 에 초점을 맞춘 필터 연산자에 대해 설명하도록 하겠습니다. 필터 연산자의 종류는 아래와 같습니다. - debounce - distinct - distinctUntilChanged - elementAt - Filter - first - last - ignoreElements - skipXXX - taskXXX debounce debounce() 연산자는 아이템 방출량이 급격히 증가하는 상황에서 충분히 시간이 지난 뒤에 마지막 항목을 가져오기를 원할 때 사용하는 연산자로 사용자가 실제로 원하는 키워드와 일치하는 쿼리를 얻을 수 있을 때까지 입력을 중단하기를 잠시 기다렸다가 다운스트림 연산자에게 전달하는 역할을 수행합니다. fun funExam()..