최근에 게임 애플리케이션을 분석하다 보니 게임 광고가 엄청나게 뜬다.

 

그중에서 또 하나 분석을 안 해본 게임 애플리케이션이 있어서 분석해보았다.

 

우르르 용병단이라는 게임인데, 해당 게임은 LIAPP으로 보호되어 있다.

 

LIAPP은 앞에서 많이 분석을 했었다.

 

당근, 블라인드 등 여러 번 LIAPP이 적용된 애플리케이션을 분석을 해보았지만

 

게임에 적용되어 있는 경우는 처음이라 분석을 진행해 보았다.

 

 

 

역시나 LIAPP 알림 창이 뜬다.

 

any-hacking-tools라는 알림이 발생하였다.

 

이것은 앞 서 분석한 내용(당근, 블라인드 애플리케이션)을 토대로 우회하면 다음과 같은 알림 창을 볼 수 있다.

 

 

 

LIAPP을 분석하면서 처음 보는 알림이었다.

 

Android Republic이란 조금만 검색해 보면 알겠지만 모드(MOD) 애플리케이션을 판매 및 공유하는 사이트이다.

 

 

Android Republic - The Best Free Exclusive Android Mods

Android Republic - Team AR provides the best free exclusive Android mods you can find anywhere on the web. All of your Android modding needs in one place.

androidrepublic.org

 

모딩된 애플리케이션을 다운로드하지도 않았는데도, 저런 알림이 발생한다.

 

따라서, 게임에 적용된 LIAPP의 so 파일이 뭔지 살펴본 결과,

 

libxxwfvxwt.so이라는 so 파일이라는 것을 발견하였다.

 

그래서 바로, RainDropELF로 아래와 같이 덤프 하여 IDA로 디컴파일 한 결과, 에러 없이 잘 덤프가 되었다.

 

 

그 후 이제는 게임 애플리케이션에서는 dump.cs가 중요하다.

 

이전에는 libil2cpp.soglobal-metadata.dat를 덤프를 해야 했는데 이렇게 하기 너무 귀찮았다.


따라서, RainDropELF를 업데이트하여 그냥 바로 아래와 같이 dump.cs가 추출되게 만들었다.

 

덤프한 dump.cs를 열어보면 덤프가 잘되었다.

 

 

해당 dump.cs를 분석한 후 캐릭터의 속도를 아래와 같이 후킹 해보았다.

 

아래는 정상적으로 캐릭터가 정상적으로 움직였을 때의 속도이다.

 

 

하지만 아래는 속도를 모딩 했을 때의 모습이다.

 

 

분석용으로 진행한것이라 튜토리얼에서만 진행을 하였고 더 이상은 진행하지 않았다.

반응형

 

운빨존많겜 게임을 분석한 이유에 또 게임 몇 번 검색했다고 알고리즘에 여러 게임이 뜬다.

 

그 중 드래곤 슬레이어 키우기이라는 게임 애플리케이션도 광고로 나오길래 이것도 분석을 진행해 보았다.

 

이것도 역시 게임을 실행하면 아래와 같이 탐지 로직에 의해 알림이 발생한다.

 

 

해당 문구는 DoveRunner에서 만든 모바일 보안 솔루션에 의해 탐지된 로직이다.

 

DoveRunner는 이전의 잉카엔트웍스라는 회사의 AppSealing이라는 브랜드이다.

 

당시 이 솔루션은 매우 친숙한(?) 존재였는데,

 

그 이유는 보안 모듈의 이름이 항상 일정했기 때문이다.

 

libcovault-appsec.so

 

기존의 AppSealing은 위와 같이 고정된 파일명을 사용해 왔다. 

 

이에 잉카엔트웍스는 새로운 세대의 보안 엔진인 DoveRunner를 런칭하며 전략을 수정했다. 

 

일단 RainDropELF로 libil2cpp.so와 global-metadata.dat를 덤프 한다.

 

그런 다음 dump.cs를 추출한다.

 

이 작업은 이전의 38.운빨존많겜 게임분석을 참고하면 된다.

 

똑같이 작업을 했다.

 

dump.cs는 아래와 같이 잘 나온다.

 

 

그렇게 dump.cs를 분석하다 보면 몬스터를 잡고 난 후 획득 하는 골드를 원하는 만큼 증가시킬 수 있다.

 

일단 정상적인 플레이를 할 때를 보면 다음과 같다.

 

이렇게 랜덤 하게 83, 85, 91 ... 이런 식으로 몬스터를 잡을 때마다 획득하는 골드량이 다르다.

 

하지만 dump.cs를 분석한 결과 이 획득한 골드량을 원하는 만큼 아래와 같이 증가시킬 수 있다.

 

 

이렇게 83원이 아니라 7,660,093원씩 획득할 수 있다.

 

공격력 레벨도 110으로 되어있지만 계속해서 거의 무한대로 증가시킬 수 있다.

 

 

뭐 이 게임을 안 할 거라서 더 이상은 진행하지는 않았다.

 

반응형

오랜만에 뭔가에 푹 빠져서 분석하고 싶은 마음이 들었다.

 

"뭐를 한번 해볼까" 하고 생각해봤다.

그러다 떠오른 게, 예전에 했을 땐 제일 힘들었는데 시간이 지나서 돌아보니 제일 재미있고 흥미로웠던 일

 

게임 모드앱을 분석하는 일이었다.

 

그래서 이번엔 오랜만에 게임 앱을 한번 분석해보기로 했다.

대상은 운빨존많겜

 

하도 광고가 많이 나와서 골랐다.

 

다른 이유는 없다.

 

먼저 스토어에서 게임을 다운로드 받았다. 

 

받았을 때 앱 버전은 2.0.2였다.


분석을 하려면 먼저 APK 파일을 추출해야 한다.

 

방법은 두 가지인데, 아래와 같이 검색해서 APK 자체를 받거나

 

스토어에서 설치한 앱을 아래와 같이 PC로 직접 추출하면 된다.

 

나는 후자로 했다.

 

해당 게임은 APKS(split APK) 형태라서, 추출하면 아래처럼 여러 개로 쪼개진 APK가 나온다.

 

본격적인 분석에 앞서, 이 게임이 어떻게 만들어졌는지부터 봐야 한다. 

 

그러려면 라이브러리를 살펴보면 된다.

split_config.arm64_v8a.apk의 lib 폴더를 열어보면 libil2cpp.so 파일이 보인다.

 

이게 보이면 C#으로 만든 Unity 게임이라는 뜻이다.

 

Unity는 C#으로 게임 로직을 짜는데, 크게 두 갈래다.


Mono 방식

C# 코드를 .NET IL(중간 언어)로 컴파일한 뒤 런타임에서 해석/JIT 실행한다.

 

이 경우 게임 로직이 Assembly-CSharp.dll 같은 DLL에 들어가서

 

거의 원본 수준의 C# 코드를 복원할 수 있다.

 

즉 분석·변조 난이도가 꽤 낮다.

 

IL2CPP(IL To C++) 방식

C# → IL → C++로 변환 → 네이티브 머신코드로 AOT 컴파일한다.

 

모든 게임 로직이 네이티브 바이너리로 들어가는데, 안드로이드에선 그게 바로 libil2cpp.so다.

 

iOS에선 실행 바이너리 자체에  통합된다.

IL2CPP의 핵심은 메타데이터가 따로 분리된다는 점이다.

 

메서드 이름·클래스 구조 같은 정보가 global-metadata.dat에 담긴다.

 

보통 assets/bin/Data/Managed/Metadata/에 위치한다.

 

그래서 IL2CPP 게임은 libil2cpp.so +  global-metadata.dat 둘을 같이 봐야 의미 있는 분석이 된다.

요즘 상용 모바일 게임은 대부분 이쪽이고, 가끔 Unreal으로 작성된 게임이 존재한다.

 

그리고 역시나 분석을 막으려고 보안 솔루션(난독화·메타데이터 암호화)까지 되어있는 경우가 많다.

 

그리고 이 게임이 딱 그랬다.

 

먼저 APK 안에 있는 libil2cpp.soglobal-metadata.dat를 그대로 꺼내서

 

Il2CppDumper dump.cs를 뽑아보기로 했다.

 

 

GitHub - Perfare/Il2CppDumper: Unity il2cpp reverse engineer

Unity il2cpp reverse engineer. Contribute to Perfare/Il2CppDumper development by creating an account on GitHub.

github.com

 

libil2cpp.so를 고르고, 이어서 global-metadata.dat를 선택해주니 다음과 같이

 

This file may be protected. 라는 에러가 떴다. 


즉 이 앱엔 모바일 보안 솔루션이 적용돼서 이 데이터들을 보호하고 있다는 뜻이다.

 

그러니 원본의 libil2cpp.so와 global-metadata.dat를 구해야만 게임 로직을 볼 수 있다.

이때 필요한 게 Frida다.

 

모바일 분석은 대부분 Frida로 한다.

 

그런데 두 파일을 동적으로 뽑으려고 Frida를 실행하면 바로 종료된다. 


전형적인 Frida 탐지다.

 

이걸 우회하려면, 먼저 이 앱이 어떤 보안 솔루션을 쓰는지부터 알아야 한다.

 

그래서 습관적으로 패킷을 봤다.


제일 먼저 발생하는 패킷이 http://adam.cdn.toastoven.net 이건 예전에도 분석했던 

 

NHN Cloud의 AppGuard라는 모바일 보안 솔루션이다.


예전에 한 번 다뤄봤던 덕분에, libloader.so가 AppGuard의 핵심 so 파일이라는 걸 바로 알 수 있었다.

 

그래서 libil2cpp.so가 어떻게 보호되는지 보려고 libloader.so를 IDA로 디컴파일했더니 역시 에러가 났다. 

 


libloader.so도 보호(패킹)돼 있다는 뜻이다

 

제대로 보려면 libloader.so도 원본을 구해야 한다. 

 

그래서 RainDropELF로 메모리에서 덤프했다.


덤프한 파일을 APK에 있던 원본 so와 비교해보면, 심볼 개수가 거의 6배 이상 차이가 난다.

 

RainDropELF로 덤프한 libloader.so를 분석한 결과, Frida 탐지 로직을 파악할 수 있었다.

 

그리고 이걸 우회해서, 아래처럼 open 함수를 후킹하는 간단한 Frida 스크립트를 무사히 실행할 수 있었다. 


사실 Frida 탐지·우회 기법에 대해선 따로 자세히 분석한 글을 올리고 싶은데,

 

여러 가지 이유로 자세한 분석 내용은 생략한다.

 

이제 원래 목적인 게임을 분석하려면 원본 libil2cpp.so와 global-metadata.dat가 필요하다.

 

이것도 똑같이 RainDropELF로  덤프했다


그러면 위의 그림처럼 덤프 파일 2개가 나온다.

 

이걸 다시 Il2CppDumper에 넣어주면

 

이번엔 통과해서 dump.cs가 나온다. 


dump.cs가 뭐냐면,

 

Il2CppDumper가 libil2cpp.so + global-metadata.dat를 교차 파싱해서,

 

게임 전체 코드 구조를 C# 의사코드(pseudo-code) 형태로 복원한 텍스트 파일이라고 보면 된다.

 

메서드 이름·클래스·필드 같은 메타데이터는 global-metadata.dat에

 

실제 실행 코드는 libil2cpp.so에 들어있는데

 

이 둘을 합쳐 "원래 C# 코드가 어떤 구조였는지"를 재구성해준다.

그래서 C#으로 개발된 게임 애플리케이션을 분석하기 위해서는 dump.cs 파일 확보가 필수이다.

 

이제, dump.cs가 나왔다는 건, 이제 게임 함수들의 이름과 오프셋이 손에 들어왔다는 뜻이다.

여기서부터는 dump.cs를 보고 원하는 함수를 골라 Frida로 후킹하면,

 

공격자 입장에서 게임 안에서 하고 싶은 걸 거의 마음대로 할 수 있게 된다.

예를 들어 인게임 재화 같은 값을 다루는 함수를 찾아 후킹해주면,

 

원래대로라면 찔끔찔끔 모아야 할 값을 한순간에 바꿔버릴 수 있다.

 

아래를 보자.

 

이건 그냥 게임을 실행했을 때의 모습이고, 


이건 dump.cs로 분석한 내용을 Frida로 후킹했을 때의 모습이다.

 

이렇게 공격자 입장에서 게임 안에서 하고 싶은 걸 거의 마음대로 할 수 있게 된다.


정리하면 이번 분석의 흐름은 이랬다.

 

APK 추출 → IL2CPP 확인 → 그냥 덤프했더니 "protected" → Frida도 탐지돼서 즉시 종료 → 

 

패킷으로 AppGuard 식별 → libloader.so까지 보호돼 있어서 RainDropELF로 원본 덤프 → Frida 탐지 우회 → 

 

원본 libil2cpp.so + global-metadata.dat 덤프 → dump.cs → 후킹으로 게임 값 변조.

 

뭐 분석에는 순서는 없지만, 앞으로 게임 애플리케이션을 분석하시는분이 계시다면 참고하면 좋을것 같아.

 

분석 흐름을 위와 같이 정리해봤다.

반응형

웹 모의해킹을 진행하다 보면 웹 페이지와 클라이언트 간에 오가는 웹 패킷을 캡처하고 분석하는 과정이 필수적이다.
 
취약점을 찾아내기 위해서는 이 패킷들을 가로채어 파라미터를 변조하거나 로직을 우회해 봐야 한다.
 
이를 위해 Fiddler(피들러)Burp Suite(버프 스위트)와 같은 프록시(Proxy) 도구를 자연스럽게 사용한다.
 
따라서 FiddlerBurp Suite를 켜고 프록시 세팅을 마친 뒤 점검할 웹 페이지에 접속하는 순간,
 
모니터 우측 하단에 익숙하고도 불길한 아이콘이 나타난다.

 
국내 금융 및 공공기관 서비스를 이용하기 위해 필수적으로 설치해야 하는 보안 프로그램,
 
바로 AhnLab Safe Transaction(AST)이다.
 
대표적으로 아래와 같이 한국투자증권KB국민은행 홈페이지에 접속하면
 
아래와 같이 AST가 실행되는것을 볼 수 있다.
 

 
이 녀석이 보이면 일단 하던 행동을 멈추고 BurpFiddler가 종료가 되는지 계속 본다.
 
그러다가 아래의 알림창과 종료가 된다면?

 
깊은 한숨과 함께 다른 방법이 있는지 우회하는 방법이 있는지 찾아 본다.
 
일반 사용자들 사이에서도 AST는 원성이 자자하다.
 
은행 업무를 보려고 잠깐 설치했을 뿐인데,
 
웹 브라우저를 닫아도 백그라운드에 좀비처럼 살아남아 PC 리소스를 야금야금 갉아먹는다.
 
퇴근 후 고사양 게임이나 무거운 툴을 돌릴 때 컴퓨터가 알 수 없는 이유로 버벅거려 작업 관리자를 열어보면,
 
어김없이 AST 관련 프로세스가 CPU와 램을 점유하고 있다.
 
오죽하면 인터넷에 'AST 강제 종료', 'Ahnlab Safe Transaction 삭제 방법'
 
같은 글들이 항상 검색어 상단에 있을까.
 
그런데 일반 사용자들만 불편한 게 아니다.
 
모의해커나 보안 분석가 입장에서는 분석의 시작조차 막아버리는 벽이다.
 
앞서 말한 프록시(Proxy) 툴을 이용한 패킷 조작은 물론이고,
 
디버거(Debugger) 부착, 메모리 접근 같은 동적 분석 과정은 보안 점검에 있어 필수 요소다.
 
하지만 AST안티 디버깅(Anti-Debugging), 프로세스 보호, 후킹 차단(Anti-Hooking)
 
다양한 보안 기법이 PC 최하단(커널 및 드라이버 레벨)에서 아주 치밀하게 적용되어 있다.
 
분석을 위해 x64dbg 같은 디버거를 붙이려 하거나,
 
분석 도구를 실행하는 순간 냅다 "보안 위협이 감지되었습니다"를 띄우며 프로세스를 가차 없이 죽여버린다.
 
그래서 이번 글에서는 업무나 개인 연구 목적으로  AST를 분석해 보고 이를 어떻게 우회할 수 있는지 해봤다.
 

자세한 내용은 공개하기가 어렵지만, 아래의 Python 코드를 이용해서 AST를 무력화 및 우회를 하였다.

 

 
그 후 다시 AST를 실행하는 웹 사이트에 접속한 후 Burp를 실행하면 잘 실행된다.
 

반응형

명절이나 주말마다 KTX, SRT 표 구하는 건 그야말로 전쟁이다.

 

컴퓨터 앞에 앉아 시계를 보며  '새로고침'을 누르는 동안,

 

황금 시간대 표 1초 만에 매진된다.

 

이유는 간단하다.

 

수십, 수백 번의 클릭을 0.1초 만에 대신해 주는 '매크로(Macro)' 프로그램 때문이다.

 

최근 이 매크로는 단순한 '개인의 꼼수'를 넘어 심각한 사회적 범죄이자 문제로 대두되고 있다.


매크로 암표, 단순 새치기가 아닌 '범죄'다


 

과거에는 매크로로 표를 구해서 중고나라나 당근마켓에 웃돈(프리미엄)을 얹어 파는 행위가

 

단순 경범죄(20만 원 이하 벌금) 정도로 취급받았다.

 

하지만 상황이 심각해지자 철도운영사와 경찰청이 칼을 빼들었다.

 

  • 6,400만 건의 불법 접속 시도 (연합뉴스, 2025.02.20): SR(수서고속철도)은 설 승차권 예매 기간에 불법 매크로를 돌린 9명을 경찰에 수사 의뢰했다. 이 중 한 명은 혼자서 무려 3,100만 건의 접속을 시도하며 서버를 마비시켰다.
    [기사 출처: https://www.yna.co.kr/view/AKR20250220057200003]
  • 매크로 조직적 이용자 검찰 송치 (노컷뉴스, 2025.10.03): 경찰청은 매크로 프로그램을 이용해 명절 기차표를 싹쓸이한 피의자 6명을 불구속 송치했다.

[기사 출처: https://www.nocutnews.co.kr/news/6409767]

 

몇 만 원 치킨값 벌어보려다 전과자가 되고 벌금을 물어내야 할 수도 있다는 뜻이다.

 

그렇다면 이같은 매크로 프로그램은 도대체 얼마나 대단한 고도의 기술일까?

 

결론부터 말하자면, 크게 어렵지 않다.

 

조금만 분석할 수 있는 능력만 있으면 누구나 쉽게 만들 수 있는 난이도이다.

 

크게 매크로 로직은 정말 허무할 정도로 단순하다.

  1. 사이트에 접속해서 로그인을 한다.
  2. 출발역, 도착역, 시간을 설정한다.
  3. '조회하기' 버튼을 기계처럼 계속 누른다.
  4. 화면에 '예약하기' (빈자리) 이미지가 뜨면 0.001초의 망설임도 없이 클릭한다.

이게 끝이다.

 

사람이 마우스를 쥐고 눈으로 화면이 바뀐 걸 확인한 뒤 클릭하는 반응속도는 아무리 빨라도 0.2~0.3초다.

 

하지만 컴퓨터(매크로)는 코드가 실행되는 즉시 누른다.

 

애초에 인간이 이길 수 없는 싸움인 것이다.

 

위 코드처럼 만드는 것 자체는 너무나 쉽다.

 

구글링 몇 번이면 GitHub에 널려 있는 게 기차 예매 매크로 소스코드이다.

 

하지만 Github나 공유되고 있는 소스코드는 예전 코드이기 때문에 대부분 동작하지 않기 때문에

 

직접 분석해 분석한 내용으로 아래의 예매 웹 사이트로 만들어 보았다.

 

 

이처럼 쉽게 만들수가 있었다.

 

예매가 된다면 내 폰으로 알림을 오게 만들 수도 있고, 혹은, 웹 사이트가 아닌 모바일 앱으로 만든다면?

 

그냥 일하면서, 혹은 자면서 설정만 해놓고 예매가 될때까지 기다리면 되는것이다.

반응형

약 거의 2년전에 당근에 적용된 LIAPP 솔루션을 분석하고 우회했던 글을 작성했었다.(참고)

 

이번에는 직장인들의 필수 애플리케이션인 블라인드(Blind)를 한번 살펴보았다.

 

살짝 살펴보니 블라인드도 당근과 똑같이 LIAPP이라는 모바일 애플리케이션 보안 솔루션을 사용하고 있었다.

 

그런데 막상 테스트 단말기에서 분석을 시작해 보니... 당근보다는 조금 더 빡센(?) 느낌이었다.

 

원래 테스트 환경에 처음 설치하고 애플리케이션 을 실행하면, 대부분 잘 실행이 되는데

 

블라인드는 아래와 같이 냅다 "디버거 탐지 / any-hacking-tools " 라는 탐지 문구가 발생하였다.

 

any-hacking-tools

 

뭐 딱히 해킹 툴이라고 부를 만한 걸 헤비하게 설치한 건 없었다.

 

기껏해야 기본적으로 세팅해 두는 분석용 환경 정도다.

 

그런데 다짜고짜 저런 문구가 발생하면서 튕기길래, "어? 이건 또 뭐지?" 하고 호기심이 생겨

 

본격적으로 분석을 시작했다.

 

생각보다 방어 로직이 촘촘하게 엮여 있었는데

 

분석 결과, 지금까지 모바일 애플리케이션을 분석하면서 처음 본 탐지 로직이 존재하였다.

 

진짜 난생 처음보는 탐지 로직이었다.

 

원인과 로직을 파악했으니 해결은 크게 어렵지 않았다.

 

 

그렇게 짜증나고 신기하던 any-hacking-tools 팝업이 사라지고,

 

아주 깔끔하게 블라인드 애플리케이션의 초기 로그인 화면까지 진입하는 데 성공했다.

 

같은 LIAPP 솔루션을 사용하더라도, 당근 애플리케이션을 분석할 때와

 

블라인드 애플리케이션을 분석할 때의 난이도나 탐지 민감도가 확실히 달랐다.

 

아마, 블라인드 애플리케이션 특성상 약간 보안에 신경을 쓴것 같다?? 라는 느낌을 받았다.

 

애플리케이션 서비스의 성격(익명성이 극도로 중요한 블라인드)에 따라 개발사에서

 

보안 솔루션의 탐지 옵션을 훨씬 더 타이트하게(빡세게) 설정해 두었거나,

 

더 상위 버전의 모듈을 적용한 것으로 보인다.

 

새로운 탐지 로직을 구경할 수 있어서 꽤 흥미로운 분석이었다.

반응형

모바일 애플리케이션을 분석하다 보면 종종 이런 생각이 들 때가 있다.

 

“이거 내가 애플리케이션을 분석하는 건지, 모바일 보안 솔루션을 분석하는 건지 모르겠네…”

 

최근 출시되는 애플리케이션들은 대부분 모바일 보안 솔루션이 기본으로 탑재되어 있다.

 

모바일 보안 솔루션들은 분석이나 해킹 시도를 막기 위해 치밀하게 설계되어 있다.

 

덕분에 보안 업계에서 일하는 우리 같은 사람들은 애플리케이션 본연의 로직을 분석하는 것보다

 

오히려 모바일 보안 솔루션을 우회하는 데 더 많은 시간을 쏟고 있는 것이 현실이다.

 

모의해커나 보안 분석가 입장에서 애플리케이션을 깊이 있게 점검하려면

 

기본적으로 루팅(Rooting) 된 단말기 Frida 같은 동적 분석 도구가 필수적이다.

 

하지만, 애플리케이션 개발사들과 보안 솔루션 업체들도 이를 너무나 잘 알고 있다.

 

과거 2024년, [14. 모바일 솔루션 우회 (토스)] 포스팅을 통해 보안 솔루션을 직접적으로 건드리지 않고도

 

애플리케이션 분석이 가능한 사례를 소개했었다.

 

당시 금융권 최고 수준의 보안을 자랑하는 토스(Toss)를 대상으로 성공적인 테스트를 마쳤고,

 

서비스 점검 본연의 업무에 집중할 수 있는 발판을 마련했었다.

 

시간이 흘러 2026년 현재,

 

모바일 보안 솔루션들은 2년 전과는 비교할 수 없을 정도로 진화했다.

 

단순히 특정 파일(Su 바이너리 등)의 존재 여부나 패키지명을 검사하던 수준을 넘어섰다.

 

무결성 검증, 메모리 변조에 대한 실시간 감시, 탐지 로직의 난독화,

 

그리고 Frida와 같은 후킹 툴의 탐지 기법들이 대거 적용되었다.

 

잘 작동하던 나의 분석 환경도 2026년 최신 업데이트를 거친 애플리케이션들 앞에서는

 

다시 "비정상적인 환경이 감지되었습니다"라는 알림을 다시 볼수 있었다.

 

이것이 업데이트된 토스의 모바일 보안 솔루션을 다시 들여다보게 된 계기이다.

 

또 다시 솔루션과 직접 맞붙어 시간을 낭비할 수는 없었다.

 

결과는 어땠을까?

 

일반적으로 루팅 된 단말기에서 2026년 최신 버전의 토스를 실행하면

 

여전히 아래와 같이 경고 알림이 뜨면서 즉시 종료된다.

 

 

하지만 2026년의 강화된 보안 로직에 맞춰 새롭게 업데이트한 환경에서 실행한 결과,

 

루팅된 단말기임에도 불구하고 토스 애플리케이션이 정상적으로 실행되는 것을 확인할 수 있었다.

 

 

단순히 루팅된 환경에서 애플리케이션이 실행되는 것을 넘어,

 

복잡하고 강력해진 탐지 로직에도 아래와 같이,

 

Frida 역시 정상적으로 실행되어 원활한 후킹 작업을 통해 분석이 가능한 것을 확인했다.

 

Friad를 실행할때 Spwan 방식이든, Attach 방식이든 입맛에 맞게 실행하면 된다.

 

아래는 Attach 방식으로 붙었을때의 모습을 보여준다.

 

 

또한, 아래와 같이 패킷 캡쳐도 볼 수 있다.

 

 

이렇게 암호화 된 값도 평문으로 볼 수 있다.

 

해당 프로젝트는 앞으로도 계속될 것이고,

 

국내 애플리케이션뿐 아니라 해외 애플리케이션도 동일한 환경을 적용해 보며

 

분석 환경을 더욱 정교하게 고도화할 예정이다.

 

궁극적인 목표는 보안 솔루션을 무력화하는 것 자체가 아니다.

 

분석에 방해되는 요소를 최소화하여

 

진짜 점검해야 할 '서비스와 애플리케이션의 취약점'에 더 집중할 수 있는 안정적이고 효율적인 도구를 만드는 것이다.

반응형

 

 

밀리의서재

독서와 무제한 친해지리, 밀리의서재에서 당신의 일상을 1밀리+ 더 멋지게 만들어 보세요.

www.millie.co.kr

 

 

최근 YES24 eBook DRM 구조를 분석하면서 전자책(eBook) 플랫폼의 보안 메커니즘에 대해

 

살펴볼 기회가 있었다.

 

DRM이 콘텐츠 자체를 암호화하여 직접적으로 보호한다면,

 

이러한 DRM 로직이 동작하는 '애플리케이션 자체'를 보호하는 첫 번째 관문이 바로 모바일 보안 솔루션이다.

 

DRM 복호화 원리나 내부 비즈니스 로직을 분석하려면 필수적으로

 

애플리케이션에 적용된 보안 솔루션을 우회해야만 분석을 진행할 수 있다.

 

그래서 이번에는 국내 대표적인 독서 플랫폼인 밀리의 서재를 타깃으로 삼아,

 

애플리케이션에 적용된 보안 솔루션을 분석해 보았다.

 

확인 결과, 밀리의 서재에는 NHN AppGuard가 적용되어 있었다.

 

 

NHN AppGuard : NHN Cloud

모바일 앱 서비스에서 발생할 수 있는 다양한 보안 침해 행위를 사전에 탐지하고 방어하는 SaaS 솔루션 시작하기요금 계산기

www.nhncloud.com

 

본격적인 분석을 위해 현재 기준으로 최신 Frida 버전인 17.7.3으로 테스트를 해보았다.

https://github.com/frida/frida/releases

 

역시나 모바일 보안 솔루션답게 Frida를 즉시 탐지해 애플리케이션이 강제 종료되었다.

 

NHN AppGuard의 핵심 방어 로직 중 하나는 강력한 안티 디버깅네이티브 라이브러리(.so) 보호이다. 

 

이를 분석하기 위해서는 NHN AppGuard에서 개발한 모바일 보안 솔루션의 .so 파일을 추출해야 한다.

 

따라서 APK 파일을 다운로드하고. so 파일을 살펴보았다.

 

lib 폴더에 존재하는 so 파일 중 libloader.soNHN AppGuard에서 개발한 모바일 보안 솔루션의 라이브러리다.

 

따라서 분석을 진행하기 위해 IDA Pro를 활용하여 디컴파일을 진행하였다.

 

IDAlibloader.so 파일을 디컴파일 하니 위의 그림처럼 에러가 발생하였다.

 

따라서, 동적으로 libloader.so 파일을 덤프 해야 했다.

 

왼쪽 그림이 그냥 so 파일을 디컴파일한 모습이고, 오른쪽이 동적으로 덤프 한 so 파일이다.

 

함수의 심볼의 차이가 거의 9배나 차이가 난다.

 

동적으로 덤프 한 so 파일을 하나하나 뜯어보며,

 

AppGuard가 어느 시점에 실행한 디바이스의 환경을 검증하고 Frida 탐지 로직이 실행되는지 분석을 시작했다.

 

분석 결과, 크게 루트 권한 탐지, 무결성 검증, Proxt 탐지 그리고 동적 분석 도구의 Frida 탐지

 

여러 단계의 탐지 로직이 엄청나게 얽혀 있는 것을 확인할 수 있었다.

 

결과적으로 아래와 같이 NHN AppGuard의 탐지 로직을 우회하고,

 

밀리의 서재 애플리케이션에 성공적으로 Frida를 연결할 수 있었다.

 

 

하지만 더 분석을 진행하고 싶었지만 밀리의 서재의 DRM을 분석하기 위해서는 구독을 해야 한다.

 

계정 공유 가능하신 분 주시면 감사하겠습니다

 

계정을 공유받을 수 있다면 밀리의 서재의 DRM도 분석을 진행해봐야겠다.

 


※ 주의 본 포스팅은 보안 연구 및 모의해킹 역량 강화를 위한 학습 목적으로만 작성되었습니다. 실제 서비스에 대한 무단 우회 배포, 저작권 침해 및 악의적인 해킹 시도는 명백한 불법이며 법적 처벌을 받을 수 있습니다. 기술적 원리 이해를 위한 참고 자료로만 활용해 주시기 바랍니다.

반응형

 
최근 회사 업무 중 꽤 흥미로운 업무를 맡게 되었다.
 
바로 MDM(Mobile Device Management) 환경 내에서 DRM(Digital Rights Management)이 적용된
 
파일 유출 가능성을 검증하는 모의 해킹 업무였다.
 
해당 업무를 진단하고 검수하는 입장에서 누구나 한 번쯤 "DRM은 정말 안전할까?"
 
"이 암호화는 어느 시점에 풀리는 걸까?"라는 의문을 가져봤을 것이다.
 
DRM 분석은 언젠가 각 잡고 제대로 파봐야지 하고 있던 주제였는데,
 
업무를 명분 삼아 합법적으로(?) 분석해 볼 기회가 생긴 셈이었다.
 
그 과정은 생각보다 생각보다 재미있었다.
 
결과적으로 유의미한 테스트 결과를 얻었고, 해당 업무는 성공적으로 마무리되었다.
 
업무는 끝났지만, 한 가지 의문점이 들었다.
 
"기업용 DRM이 이런 논리로 동작한다면,
 
우리가 일상에서 가장 흔하게 접하는 상용 DRM은 어떻게 설계되어 있을까?"
 
OTT, 음원 스트리밍 등 여러 분야가 있지만,
 
텍스트와 이미지 기반으로 가장 강력한 DRM을 걸고 있는 분야, 바로 eBook(전자책)이 떠올랐다.
 
분석 대상을 정하기 위해 국내 eBook 시장을 살펴보았다.
 
기술적 호기심을 충족시키려면 아무래도 가장 많은 유저가 사용하고,
 
가장 고도화된 보안을 적용했을 것으로 추정되는 플랫폼을 생각해 보았고,
 
YES24교보문고가 생각이 났다.
 
이 두 플랫폼은 사용자가 구매(또는 대여)한 도서를 로컬 기기에 다운로드하여 열람하는 방식이다.
 
즉, DRM이 적용된 파일이 내 PC나 스마트폰 어딘가에 저장되어 있고,
 
뷰어가 실행될 때 키 값을 받아와 복호화하여 화면에 뿌려준다는 기본 메커니즘은
 
기업용 DRM과 크게 다르지 않을 것이라 생각하였다.
 
그래서 먼저 안드로이드에서 YES24를 다운로드하고 바로 분석해 보았다.
 
실행하는 과정은 위에서 생각한 것과 같았다.
 
YES24에서 eBook을 구매 혹은 대여한 후
 
YES24에서 만든 뷰어로 DRM이 적용되어 있는 파일을 복호화해서
 
구매한 사용자들이 보는 그런 구조였다.
 
그리고 조금 검색해 보니 DRM을 해제하고 싶은 사람이 은근히 많았다.
 

 
또한, 아래와 같이 DRM이 적용된 eBook이 유출되는 실제 사례도 존재하였다.

 
그래서 어떻게 되어 있는지 궁금증이 생겨 분석을 진행해 보았다.
 
분석 내용과 관련된 기술은 악용될 가능성이 존재하여 기술적인 내용은 포스팅을 하지 않겠다.
 
정말 개인적으로 학습 및 연구를 위해 진행하였다.
 
그리고 분석하는 과정에서 상당히 복잡하게 되어있다고 느꼈기 때문에 분석한 내용을
 
까먹을까봐 도식화도 함께 진행하였다.
 

 
분석한 결과, 분석하는 사람마다 이해한 로직, 기술마다 다를 수 있지만
 
크게 4단계로 구성이 되어 있었다.
 
그리고 진짜 생각보다 상당히 복잡한 구조였다.
 
끝으로, 분석이 끝난 후
 
암/복호화의 로직과 분석한 내용이 맞는지 검증하기 위해 DRM이 적용된 파일을 복호화하는
 
즉, 뷰어 이외에서도 열람하기 위한 원본 파일을 추출하는 프로그램을 만들어보았다.
 
테스트는 무료로 eBook을 구매할 수 있는 상품으로 테스트를 진행하였다.
 

 
이처럼, 위의 화면처럼 eBook 전용 뷰어에서만 볼 수 있다.
 
하지만 아래의 복호화 프로그램을 사용할 시 원본의 eBook의 PDF 파일을 획득할 수 있다.

 
위의 DRM_Unlock.py를 이용해서 DRM이 적용된 파일을 복호화하면 아래와 같이 Decrypted.pdf가 생성된다.

 
위의 Decrypted.pdf가 바로 원본 PDF 파일인 것이다.
 
이것을 열어보면 아래와 같이 원본 파일을 뷰어가 아닌 상황에서도 볼 수가 있었다. 
 


 
※  주의 
본 포스팅은 보안 연구 및 학습 목적으로 작성되었습니다.
실제 서비스에 대한 무단 복호화 시도, DRM 해제 배포, 저작권 침해 행위는 명백한 불법이며
법적 처벌을 받을 수 있습니다.
기술적 원리 이해를 위한 참고 자료로만 활용해 주시기 바랍니다.

반응형

예전에 블로그에 13. 휴대폰 번호로 이름과 주소 찾기 라는 글을 쓴 적이 있다.

 

그 글에서 소개한 내용은 간단하다.

  • 휴대폰 번호 하나만 알고 있어도
  • 그 사람의 이름과 집 주소까지 바로 조회되는 구조가 실제 서비스에 존재했고
  • 이걸 5년 전(대략 2020년도)에 발견해서 제보까지 했지만, 지금까지도 조치가 되지 않았다.

당시 글에서도 적었듯이, 이름·주소 정도는 "별 거 아닌 정보"로 생각할 수 있다.

 

하지만 지금 쿠팡, 넷마블에서 해킹된 이름과 주소가 유출 됬는데 왜 이렇게 난리인걸까?

 

조금만 상상해 보면:

  • 피싱·보이스피싱 시 실명+주소 기반 정교한 공격,
  • 실제 집 주소를 노린 스토킹·침입 범죄,
  • 스미싱과 스팸의 정확도 상승

지금 현재 쿠팡 개인저보 유출사고가 터지고 나서 계속 언급되는것이 바로 보이스피싱, 스미싱 피해 주의다.

 

 

 

이전에 발견된 취약점도 이번 쿠팡에서 개인정보가 유출된것처럼 이름, 집 주소까지 다 조회가 되는 취약점이다.

 

하지만 이전에 발견된 취약점은 "휴대폰 번호 하나"에서 시작될 수 있는 구조다.

 

사실 개인적으로 이게 더 위험하다고 생각한다.

 

휴대폰 번호? 그냥 무작위로 넣으면 그만이다.

 

또, 더 위험한 건 이게 어떤 최첨단 제로데이 해킹이 아니라는 점이다.


1. 옛날에 만들어 놓고 관리도 안 하는 레거시 시스템

 

2. 과도한 권한을 가진 조회 인터페이스

 

3. 접근 통제와 모니터링 부재가 합쳐진, 아주 전형적인 패턴이다.

 

그리고 몇 년이 지나, 이번 쿠팡넷마블에서 터진 대형 해킹 사고를 보면서

 

나는 똑같은 패턴을 다시 보고 있다는 느낌을 강하게 받았다.

 

이번 쿠팡 사건을 조금만 살펴보자.

 

최근 쿠팡에서는 3,370만 건대 규모의 고객 계정 정보가 유출되는 대형 사고가 발생했다.

 

핵심 포인트만 정리하면:

  1. 인증 담당자에게 발급된 액세스 토큰 서명키가 있었다.
  2. 이 서명키는 토큰의 진위를 검증하는 '도장' 역할을 한다.
    • 토큰이 일회용 출입증이라면,
    • 서명키는 그 출입증에 찍는 공인 도장에 가깝다.
  3. 그런데 이 서명키를
    • 담당자가 퇴사한 뒤에도 갱신·폐기하지 않고 방치
    • 결과적으로 내부 인물이 이 키를 악용해 서버가 신뢰하는 토큰을 임의로 생성
    • 고객 마이페이지·주문 정보 등에 접근해 수천만 건의 정보를 탈취한 것으로 분석되고 있다.

여기서 중요한 건 "해커가 그 비싼 방화벽, 보안 솔루션 등을 뚫고 들어온 사건"이라기보다

 

"퇴사자에게 발급됐던 인증키를 회수·갱신하지 않은 조직 내부 관리 실패"에 가깝다는 점이다.

 

즉, 보안 솔루션이 약해서가 아니라, 기본적인 권한·키 관리 프로세스를 지키지 않은 문제다.

  • 토큰 서명키의 유효 기간은 통상 5~10년 등 길게 잡기도 한다는 답변이 나왔지만
  • 그건 어디까지나 적절한 로테이션·폐기 절차가 존재한다는 전제 하에서나 의미가 있다.

넷마블 해킹 사건을 보자.

 

넷마블 역시 최근 PC 게임 포털 해킹으로 인해 약 611만 명의 고객·임직원 정보가 유출된 사실을 공개했다.

 

여기서 눈여겨볼 부분은 유출된 데이터의 연도 범위다.

 

  • 1차 발표:
    • 포털 회원·임직원 등 611만여 건의 정보 유출 공지.
  • 2차 발표:
    • 추가로 8,048건의 개인정보 유출이 확인되었고,
    • 여기에는
      • 2003~2004년 고객센터 문의자 정보,
      • 2003~2006년 온라인 입사지원자 정보,
      • 2001~2005년 및 2011~2021년 B2B 사업 제안 담당자 정보,
      • 취업박람회 부스 방문자의 연락처 등이 포함되어 있었다.
      • 일부에는 주민등록번호와 같은 고유식별정보도 포함되어 있었다.

즉, 이건 단지 "한 번 사고 났다"의 문제가 아니라,

  • 20년 가까이 된 과거 데이터가 여전히 삭제되지 않고, 접근 가능한 시스템 안에 살아 있었다라는 것이다.

이제 다시 예전에 쓴 취약점 글과 이어서 생각해보자.

 

  • 레거시 구조
    • 오래전에 만들어진 것으로 보이는,
    • 휴대폰 번호 → 개인 실명·주소를 바로 조회할 수 있는 과도한 기능.
  • 권한·인증 관리의 부재
    • 이 조회 기능에 접근하기 위한 인증·권한 통제가 사실상 부실하거나,
    • 특정 조건을 우회하면 누구나 조회 가능한 상태로 보였다.
  • 데이터 최소화 원칙 위반
    • “서비스 제공에 정말 필요한 범위를 넘어선 정보 접근”이 가능했다.
  • 제보 이후에도 수년째 미조치
    • 5년 전에 발견해서 제보까지 했는데, 지금 봐도 여전히 구조 자체가 유지되고 있는 것으로 보인다는 점

이 구조를 쿠팡·넷마블 해킹 사건에 그대로 대입해 보면 아래와 같이 겹친다.

 

  • 쿠팡:
    • 퇴사자의 서명키를 회수·갱신하지 않고 방치
    • → 내부자가 악용할 수 있는 "디지털 만능 열쇠"가 그대로 남아 있었다.
  • 넷마블:
    • 2000년대 초반부터 쌓인 고객센터/입사지원/행사 방문자 데이터
    • 삭제·파기되지 않고 레거시 포털 내부에 누적되어 있었다.
  • 내 사례:
    • 오래전 설계된 것으로 보이는 휴대폰 번호 기반 조회 시스템
    • 제보 이후에도 여전히 수정·폐기되지 않고 살아 있는 상태.

세 사건 모두 “악의적인 초고도화된 해킹 기법”보다 "방치된 것들"이 문제의 뿌리였다.

  • 권한을 부여할 땐 쉽게 주고,
  • 회수·축소·폐기는 뒤로 밀린다.
  • 데이터는 한 번 모으면 "혹시 나중에 쓸 수도 있으니까"라는 이유로 계속 쌓인다.

단순히 이번에 발생한 해킹 사건과 이전의 발견한 취약점의 회사를 비난하는것이 아니라

 

다시 한번 보안에 대해서 생각해보는 계기가 되었으면 하는 바램이다.

 

 

반응형

금융권 애플리케이션들을 집중적으로 분석하던 시기가 있었다.


그때만 해도 대부분의 애플리케이션은 루팅 우회 + SSL Pinning 우회만 해주면,

 

프록시를 통해 패킷 캡처가 무리 없이 가능했다.

 

그런데 유독 한 녀석만 끝까지 말을 안 듣는 애플리케이션이 있었다.


바로 카카오뱅크였다.

 

 

위의 방법처럼 늘 하던 대로 프록시를 설정하고, 카카오뱅크 애플리케이션을 실행해서 패킷을 캡처해보려 했다.


그런데 애플리케이션을 켜자마자 아래와 같은 네트워크 오류 알림이 뜨면서 통신이 진행되지 않았다.

 

 

그래서 처음엔 이렇게 생각했다.

"아, 여기도 SSL Pinning이 빡세게 걸려 있나 보다."

 

그래서 평소처럼 SSL Pinning을 우회하고 다시 시도했는데


똑같은 네트워크 오류만 반복될 뿐, 패킷은 단 한 건도 잡히지 않았다

 

혹시 내가 프록시 설정을 잘못한 건가?” 하는 의심이 들어서


검증용으로 다른 앱, 예를 들어 네이버 애플리케이션을 실행해 프록시 동작 여부를 확인해봤다.

 

결과는 아주 멀쩡했다.


위의 그림처럼 네이버 애플리케이션에서는 요청/응답 패킷이 잘 캡처되었다.

 

즉, 프록시 설정 문제도 아니고

루팅/SSL Pinning 우회도 이미 되어 있는데


카카오뱅크 애플리케이션에서만 패킷이 안 잡힌다는 결론이 나왔다.

 

이쯤 되니 자연스럽게 이런 생각이 들었다.

아, 이건 그냥 SSL Pinning 수준에서 막은 게 아니구나."

 

그래서 아래와 같이 생각을 하였다.


"기존의 패킷 캡처 자체를 차단하는 로직 혹은 다른 방법으로 되어 있겠구나"


이 이슈를 팀에서 같은 업무를 맡고 있는 동료에게 공유했고,

 

그 팀원 분이 감사하게도 접근 방향성을 하나 짚어 주었다.

 

그 조언을 바탕으로,


기존에 쓰던 방식이 아닌 다른 흐름으로 프록시를 구성해보았다.

그렇게 세팅을 바꾼 뒤 다시 카카오뱅크 애플리케이션을 실행해보니 

 

아래와 같이 더 이상 네트워크 오류 팝업이 뜨지 않고

 

아래 그림과 같이 HTTP(S) 패킷이 정상적으로 캡처되기 시작했다.

 

새로운 방식으로 프록시를 구성하자,

애플리케이션 내에서 발생하는 요청/응답이 서버와의 통신 구간까지 포함해서

문제없이 전부 캡처되는 것을 확인할 수 있었다.

 

이렇게 다른 단계에서도 서버와의 통신에서도 문제없이 패킷이 잘 캡처된것을 볼 수 있다.

반응형

한 번쯤 겪어봤을 것이다.


동네 중고거래 앱 당근마켓에서 마음에 드는 물건을 발견했는데,


글이 올라온 지 몇 초 만에 '예약중'으로 바뀌거나 사라진 적.

 

또 어떤 날은, 지역마다 똑같은 물건 글이 반복되어 올라오는 걸 본 적도 있을 것이다.

이런 현상은 대부분 매크로다중 계정, 그리고 다중 앱 악용이 원인이다.

 

그래서 예전에 내가 분석했던 인터파크 티켓팅 매크로 실험과 같이 알아보려고 한다.

 

 

 

당근으로 피해를 본 사람이라면 위의 사진을 한 번씩은 보았을 것이다.

 

첫 번째, 사진은 PC 화면에서수십 개의 당근창이 띄워져 있고,

 

각기 다른 지역에 로그인된 여러 계정이 동시에 로그인 중이다.

 

하지만 PC로 작업을 하기 위해서는 많은 제약이 있다.

 

이것을 보완하기 위해 모바일로 옮겨간 다중 애플리케이션으로 위의 두 번째 사진이다.

 

모바일에서는 동일한 당근 앱이 여러 개 복제되어 있고, 각 앱마다 서로 다른 계정으로 로그인해 거래를 진행한다.

 

이것도 티켓팅 못지않게 정말 큰 문제라고 생각한다.

 

예를 들어, 계정을 빌려주거나 대량으로 생성한 계정이 사기 거래에 쓰이면, 

 

피해가 개인에게 돌아가고 플랫폼은 책임 문제에 휘말릴 수 있다.

 

다수 계정 + 자동화는 인기 매물을 빠르게 선점하거나 반복해서 올려 노출을 차지할 수 있다.

 

정상 이용자는 ‘진짜 매물’에 접근하기 어려워지고 가격 형평성도 깨질 수도 있다고 생각한다.

 

즉, 정리하자면 이 구조는 단순히 편의 기능이 아니라, 시장 교란과 사기 거래의 핵심 도구가 될 가능성이 높다.

 

하지만 이런 문제가 있음에도 위의 설정이 되어 있는 휴대폰 단말기를 판매하기도 한다.

 

그래서 얼마나 쉽게 이렇게 당근 애플리케이션을 우회하고 위와 같이 다수의 계정으로 로그인을 할 수 있는지

 

테스트를 해보았다.

 

테스트한 결과, 핵심은 딱 3가지이다.

 

루팅 우회 + GPS 변조 + 다중 애플리케이션

 

이 세 가지만 통과하면 누구나 한 기기에서 여러 당근 계정을 동시에 운영할 수 있다.

 

원래 당근은 비정상적인 단말기에서는 아래와 같이 알림이 발생한다.

 

 

당근은 기본적으로 루팅된 단말기에서 실행을 탐지한다. 

 

보안을 위해 “비정상적인 단말기입니다”라는 알림이 뜨며, 앱이 즉시 종료된다. 

 

하지만 놀랍게도, 조금만 검색해 보면 일반인도 손쉽게 우회 방법을 찾을 수 있다. 

 

결과적으로, 시스템 보안이 완전히 풀린 루팅 단말기에서도 정상 로그인과 거래가 가능해진다.

 

그런 다음 2번째 요소인 위치 즉, GPS 변조이다.

 

당근은 사용자의 GPS를 기준으로 “우리 동네”를 설정하지만, 이 역시 간단히 우회할 수 있다.

 

예를 들어, 서울에 있으면서도 GPS 조작 앱을 통해 부산, 대구, 제주로 위치를 바꾸면,

 

마치 그 지역 주민처럼 인증이 통과된다.

 

즉, ‘내 근처 거래’라는 핵심 가치가 완전히 무너진다.

 

이것도 정말 조금만 찾아보더라도 GPS를 변조해 주는 방법이 널리고 널렸다.

 

현재 서울에 살고 있지만 GPS 변조로 아무 곳이나 설정해 주면 아래와 같이 설정한 위치로 동네 인증을 할 수 있다.

 

 

이것으로 이제 루팅 우회 + GPS 변조가 되었다.

 

이제 마지막 요소인 다중 애플리케이션이다.

 

이것도 조금만 찾아보면 진짜 쉽게 찾을 수 있다.

 

각 앱에 다른 계정으로 로그인한 뒤, 루팅 우회 + GPS 변조를 적용하면

 

하나의 휴대폰이 여러 사람인 척 활동하게 된다.

 

결국, 하나의 단말기로도 ‘서울 1계정, 부산 1계정, 대구 1계정, 광주 1계정’ 이런 식으로 지역별 계정이 

 

모두 동시에 거래 중일 수 있다.

 

이렇게 3개의 핵심 요소를 설정해 준다면 하나의 단말기에 당근 애플리케이션을 여러 개 설치한 후

 

각각의 계정에 GPS 변조로 위치를 설정해 주면 위의 사진에서 본 것처럼 매크로나 다중 계정을 사용할 수 있다.

 

 

 

더 나아가, API를 분석하여 전국에 있는 매물을 검색기로 만들어 판매하는 업체들도 생겨나고 있다.

 

API를 분석해 전국 매물 검색 자동화 프로그램을 제작하여 이것을 구독형식으로 판매를 하고 있다.

 

예를 들어 “전국 모든 지역의 ‘아이폰 15 프로’ 매물을 실시간으로 감시”하는 식이다.

 

이 정도면 사실상 ‘개인 거래’가 아니라 자동화된 중개 시스템이라고 해도 과언이 아니다.

 

이렇듯 매크로나 다중 계정 문제는 이제는 정말 단순한 문제가 아니다.

 

지역 기반 커뮤니티의 신뢰를 갉아먹고, 개인의 피해와 플랫폼 전체의 비용으로 연결된다.

 

기술, 운영적 대응을 마련해야 하지만 이것도 정말 쉽지 않다.

 

아무리 플랫폼에서 해당 방법을 보완한 다고 해도 또 이런 수요가 있는 이상 또 우회가 되기 마련이다.

반응형

기존의 iOS 14 버전에서 테스트를 하다가 오래된 버전이기도 하고 해당 단말기가 너무 느려서

 

16.0.2 버전의 iOS를 새롭게 구했다.

 

따라서 16.0.2 버전대에서 탈옥하는 과정을 정리해보려고한다.

 

매번 안드로이드에만 정신이 팔려 iOS는 잘 몰랐는데 정말 많이 생겼다.

 

트롤 스토어(TrollStore), 도파민(Dopamine), Palera1n, Zebra 등 정말 많이 생겼다.

 

정리하는 김에 하나씩 알아보려고 한다.

 

iOS 15부터 SSV 도입으로 rootless 탈옥이라는 개념이 등장하게 되었다.

 

여기서 SSV란 Signed System Volume의 약자로 시스템 파티션의 무경설을 강력히 보호하는 메커니즘이다.

 

이로 인해 전통적인 방식으로 탈옥하는 방식(rootfs)을 덮어쓰는 방식으로 탈옥하는 것이 어려워졌다.

 

따라서 그 대안으로 rootless 탈옥이 탄생한 것이다.

 

Rootless 탈옥은 시스템을 변경하지 않기 때문에 SSV을 우회할 수 있는 것이다.

 

그 방식을 사용한 프로젝트가 대표적으로 도파민(Dopamine), Palera1n이다.

 

그럼 차이점을 알아봐야 한다.

 

가장 큰 차이는 Semi-Untethered이다.

 

탈옥에는 3가지 버전이 있다.

 

  • Tethered
    • 재부팅마다 PC 연결·특수 툴로 부팅 절차를 거쳐야 한다. (부팅을 정상적으로 못함)
  • Untethered
    • 한 번 탈옥하면 재부팅해도 영구적으로 유지된다(부팅 체인에 영구적 수정이 존재).
  • Semi-Untethered (중간형)
    • 재부팅 시 탈옥 상태는 풀리지만, 기기 내 앱/스크립트로 간단히 재적용(주로 앱 실행으로) 할 수 있다.
    • PC가 필요 없거나 최소한의 조작만 필요하다.

 

즉, 재부팅 후 재적용이 필요 없다는 것이다.

 

그래서 Dopamine를 많이 사용하는 이유이다.

 

따라서 Dopamine를 설치해 보자.

 

하지만, 아이폰은 기본적으로 서명된 애플리케이션만 설치가 가능하기 때문에 ipa는 일반적으로 설치를 하지 못한다.

 

그래서 트롤 스토어(TrollStore)가 필요한 이유이다.

 

트롤 스토어(TrollStore)는 탈옥 없이(시스템 변경 없이)

 

특정 IPA를 영구 설치(permanent sideload) 하게 해주는 툴이다.

 

트롤 스토어를 설치하기 위해 TrollInstallerX로 설치를 설치해야 한다.

 

 

Installing TrollStore (TrollInstallerX) | iOS Guide

 

ios.cfw.guide

 

먼저 위의 TrollInstallerX를 설치하기 위해서는 Sideloadly로 설치를 해야 한다.

 

 

Sideloadly - iOS, Apple Silicon & TV Sideloading

Sideloadly is a tool for sideloading apps on iOS, Apple Silicon Macs, and Apple TV without jailbreak. Download now for a secure and easy sideloading experience.

sideloadly.io

 

Sideloadly 설치는 자신의 환경에 맞게 설치해 주면 된다.

 

그 후 아래의 TrollInstallerX.ipa를 다운로드하고 해당 단말기에 설치해 준다.

 

 

 

 

그러면 Done이라는 문구와 함께 아래의 TrollInstallerX가 설치된다.

 

 

 

실행을 하면 개발자 모드를 설정을 해야지만 설치가 된다고 한다.

 

 

따라서 개발자 모드를 셋팅 -> 개인정보 보호 및 보안에서 개발자 모드를 활성화한 후 재부팅을 해준다.

 

그러면 아래와 같이 실행이 가능하며 Install TrollStore을 클릭하면 설치가 된다.

 

위의 Dopamine 공식 페이지에서 ipa를 다운로드 받아서 설치해 줘도 되지만 사파리에서 아래의 주소로 접속하면

 

더 편하게 설치를 할 수 있다.

 

 

Dopamine

An iOS 15.0 - 16.6.1* jailbreak for A8 - A16 and M1 - M2 devices

ellekit.space

 

아이폰 사파리에서 https://ellekit.space/dopamine/ 를 입력한 후 접속하자.

 

 

그리고 Download .ipa를 클릭해서 다운로드 받자.

 

그 후 다운로드를 클릭해서 공유 버튼을 클릭해서 방금 설치한 TrollStore로 열어주자.

 

 

 

이렇게 TrollStore를 클릭하고 Install을 클릭하면 아래와 같이 Dopamin이 설치된다.

 

 

그리고 이제 마지막으로 Dopamine을 열어서 탈옥을 선택한 후

 

SileoZebra 2개의 중 선택해서 설치해 주면 탈옥이 완료된다.

 

 

반응형

'모바일 해킹 > iOS' 카테고리의 다른 글

iOS (Burp 인증서 설치)  (0) 2022.04.18
iOS (Frida 설치)  (0) 2022.04.15
iOS (SSH, SFTP설치)  (0) 2022.04.15
iOS 탈옥 (unc0ver - windows)  (0) 2022.04.15

오랜만에 직접 개발한 환경에서 아직 테스트하지 못한 모바일 보안 솔루션이 뭐가 있을까 하다가

 

에버스핀(Everspin)이라는 업체에서 만든 Eversafe 라는 모바일 보안 솔루션을 발견했다.

 

모바일 보안 솔루션도 적용하는 Level이나 탐지 정책으로 탐지가 될 수도 안될 수도 있다.

 

그래서 금융권에서 Eversafe를 사용하고 있는 곳을 찾아봤더니

 

우리 은행에서 사용하는 우리WON뱅킹이라는 애플리케이션을 발견하였다.

 

https://everspin.global

 

아래의 그림은 위의 에버스핀의 공식 홈페이지에서 캡처해 온 사진이다.

 

 

이렇게 크게 총 5개의 기능을 설명하는데 설명에 의하면

 

Eversafe시간대별로 동작되는 보안 모듈(.so)이 달라져 보안 모듈이 한 번 분석되더라도

 

실행할 때마다 보안 모듈이 교체되어 처음부터 다시 분석을 해야 한다는 점이 인상 깊었다.

 

따라서 바로 테스트를 해보았다.

 

물론 아래와 같이 루팅 우회는 가볍게 통과 했다.

 

다음은 Frida 탐지도 잘 우회가 되었다.

 

반응형

먼저 해당 프로젝트를 시작한 계기는 다음과 같다.
 
회사 업무 중 모바일 게임 모드앱이 들어왔을 때 분석을 진행해야 했다.
 
처음에는 어떻게 분석을 시작하는지, 어떻게 접근해야 하는지 자세히 몰랐다.
 
이때 Unity, Unreal, Cocos2d-x 등을 알게 되었고, 해당 엔진으로 만들어진 모바일 게임을 분석하기 위해서는
 
Unity 기준으로는 2가지 파일이 필요했다.
 
바로 libil2cpp.so와 global-metadata.dat 파일이 필요했다.
 
즉, Unity 게임을 분석하려면 크게 위의 2가지의 파일만 있으면 된다
 
짧게, Unity 게임 구조에 대해서 알아보면 다음과 같다.
 
대표적인 특징은 C# 코드가 곧 네이티브 코드(.so)로 변환되며 그 결과로 libil2cpp.so라는 특이한 파일이 생긴다.
 
그리고 여기서 global-metadata.dat라는 별도의 메타데이터 파일이 사용된다.
 
즉, libil2cpp.so는 Unity에서 실제 게임 로직(C#의 함수) 및 게임에서의 행동 코드를 네이티브 코드로 변환된
 
.so 파일이라고 생각하면 된다.
 
이처럼 중요한 파일이기 때문에 모바일 보안 솔루션이 적용되어 있는 모바일 게임에서는
 
libil2cpp.so 파일을 암호화를 하여 보호하기 때문에 분석하기가 까다롭다.
 
그렇다면 global-metadata.dat 파일은??
 
Unity가 IL2CPP로 변환할 때, 클래스명, 함수명, 필드명 등의 모든 구조 정보를 따로 저장한 메타데이터 파일이다.
 
libil2cpp.so 파일을 IDA로 디컴파일 한 후 global-metadata.dat를 검색하면 이렇게 나온다.
 

 
그 후 global-metadata.dat를 호출하는 곳으로 가면 아래와 같이 global-metadata.dat를 사용하는 코드가 보인다.
 

 
이렇게 libil2cpp.so에서  global-metadata.dat 파일이 사용된다는 것을 알 수 있다.
 
위치는 아래의 그림과 같이 보통 /assets/bin/Data/Managed/Metadata/ 또는 /assets/bin/Data/ 안에 존재한다.
 

/assets/bin/Data/Managed/Metadata에 존재하는 global-metadata.dat 파일

 
이런 이유로 Unity 모바일 게임을 분석하기 위해서는 libil2cpp.so, global-metadata.dat 파일이 존재해야지만
 
원본의 C# 코드를 복원하여 분석할 수 있다.
 
이렇게 2개의 파일이 Unity로 개발된 모바일 게임을 분석하기 위해 꼭 필요한 파일이기 때문에 해당 파일을
 
대부분의 모바일 보안 솔루션이 적용되어 있는 게임에서는 암호화를 진행한다.
 
따라서 복호화가 된 libil2cpp.so, global-metadata.dat를 얻기 위해서는
 
게임이 실행된 이후에 복호화된 위 2개의 파일을 덤프 하여 파일을 얻어와야 한다.
 
이를 위해 대부분 Frida를 사용해서 위 2가지 파일을 덤프 한다.
 
하지만 Frida를 사용하기 위해서는 루팅 된 환경에서 진행해야 한다.
 
이는 모바일 보안 솔루션에서 바로 차단을 한다.
 
Frida를 사용하지 못하니 Frida Gadget을 사용해 볼까?
 
이러면 또 무결성 탐지 로직을 우회해야 하고,
 
운이 좋게도 루팅 탐지 로직을 우회했다고 하더라도? Frida 탐지 로직도 우회해야 하고,
 
실컷 분석하다가 분석하는 애플리케이션이 업데이트가 된다면 또다시 처음부터 분석을 해야 하고...
 
이런 문제점을 생각하다 보니 Frida라는 하나의 분석 툴에 의지할 수는 없어
 
so 파일과 global-metadata.dat 파일을 덤프 하는 프로젝트를 시작한 계기가 된 것이다.
 
이전에는 so 파일을 Frida 없이 덤프 하는 방법을 알아보았다. (25. Native Library(.so) Dump without Frida)
 
이번 포스팅은 global-metadata.dat를 Frida 없이 덤프 하는 것을 알아보자.
 
테스트로는 LoadComplete에서 만든 레전드 오브 슬라임:방치형 RPG라는 게임으로 진행해 보았다.
 
해당 애플리케이션을 선택한 이유는 이리저리 웹 서핑을 하다가 해당 애플리케이션 광고를 보고
 
마침 해당 포스팅을 할 생각이어서 설치해 보았는데 목적에 딱 맞게

Unity로 개발되었고 global-metadata.dat가 암호화되어 있었다.

 
그래서 해당 애플리케이션을 테스트로 선택하게 되었다.
 
다른 이유는 없다.
 
레전드 오브 슬라임:방치형 RPG 게임에서는 LIAPP 이라는 모바일 보안 솔루션을 사용하고 있었다.
 

LIAPP ALERT "Connection denied."

 
해당 애플리케이션은 다운로드를 하여 libil2cpp.so 파일과 global-metadata.dat를 열어보면 다음과 같다.

원본의 il2cpp.so

 
위의 so 파일을 보면 첫 시작이 7F 45 4C 46으로 ELF의 구조를 가지고 있다.
헤더가 일단 암호화되어 있지 않아 보여 바로 global-metadata.dat 파일을 살펴보았다.
 

암호화된 global-metadata.dat

 
위의 global-metadata.dat를 보면 4C 49 4B 45로 일반적인 global-metadata.dat의 헤더가 아니다.
 
정상적인 global-metadata.dat의 시작은 아래의 그림처럼 AF 1B B1 FA로 시작한다.

원본의 global-metadata.dat

 
여기까지 정리해 보자면 다음과 같다.
 
더 분석을 해봐야지 정확하겠지만 레전드 오브 슬라임:방치형 RPG 게임(com.loadcomplete.slimeidle)은
 
libil2cpp.so 파일은 암호화가 되어 있지 않거나, 부분적으로 암호화가 되어있다.
 
global-metadata.dat 파일은 암호화가 되어있다.
 
이렇게 정리할 수 있다.
 
libil2cpp.so에서 ELF 파일 구조를 가지고 있다고 해도 .text 영역을 암호화를 했을 수도 있을 수 있기 때문이다.
 
또 어떤 보안 솔루션에서는 ELF 파일 헤더를 그냥 00으로 채워서 분석을 못하도록 하는 경우도 있다.
 
따라서, 2가지 파일 모두 암호화가 되어있다고 생각을 하고 분석을 진행하였다.
 
먼저 동적으로 libil2cpp.so 파일을 덤프 해야 한다.
 
이는 이전 포스팅을 참고하면 된다. (25. Native Library(.so) Dump without Frida)
 

 
위의 그림은 IDA로 동적으로 원본의 libil2cpp.so 파일과 동적으로 Dump한 libil2cpp.so 파일을 비교한 그림이다.
 
Dump한 so 파일에서는 323173개의 함수가 존재했고 Origin libil2cpp.so 파일에서는 322711개가 나왔다.
 
462개가 차이가 난다.
 
여기에 각종 탐지 로직이 존재할 수도 있다.
 
물론 정석적인 방법으로 분석을 하면 찾을 수 있겠지만 이는 원하는 방식이 아니다.
 
빠르게 분석을 하기 위해서 이런 프로젝트를 진행하고 있기 때문에 목적에 맞지 않아,
 
분석하는 글은 나중에 시간이 되면 포스팅을 할 예정이다.
 
이제 동적으로 얻은 so 파일은 획득하였고 이제 복호화된 global-metadata.dat 파일을 얻어와야 한다.
 
그래서 RainDropGlobal이라는 툴을 개발하였다.

 
해당 툴의 사용법은 ./RainDropGlobal "패키지명"을 입력하면 위의 그림처럼 동적으로
 
Frida 사용 없이 global-metadata.dat 파일을 덤프 할 수 있다.
 

복호화된 global-metadata.dat 파일

 
위의 그림처럼 AF 1B B1 FA로 복호화된 global-metadata.dat 파일을 얻을 수 있다.
 
이제 제대로 덤프가 되었는지 제대로 된 파일로 덤프가 되었는지 확인하기 위해서 dump.cs를 확인해 보면
 

 
이렇게 잘 덤프가 되었다.
 

반응형

해당 프로젝트를 하게 된 계기는 당근LIVE스코어라는 애플리케이션을 분석할 때였다.

 

당근이라는 애플리케이션은 Liapp이라는 모바일 보안 솔루션이 적용되어 있었고

 

LIVE스코어라는 애플리케이션은 Appseaing이라는 모바일 보안 솔루션이 적용되어 있었다.

 

(Appseaing이라는 모바일 보안 솔루션을 개발한 회사는 잉카엔트웍스였지만

현재 DoveRunner로 사명을 변경했다고 한다.)

 

다시 본론으로 돌아와서 당근 애플리케이션을 분석했을때의 상황을 생각해 보면,

 

분석할 당시에는 모바일 보안 솔루션을 분석하는 경험이 많이 없었고

 

한참 공부하고 연구할 때였다.

 

Frida 사용도 잘 못할 때였다.

 

그렇게 아무 생각 없이 당근 APK 파일을 다운로드하고 lib 폴더에

 

Liapp에서 개발한 libwfcwxdz.so 파일을 그대로 

IDA로 분석을 진행하였다.

 

당근 이전에 모바일 분석을 할 때 대부분 이렇게 진행하였다. 

 

분석을 한참 하다가 보니, 뭔가 이상했다.

 

APK 파일에서 추출한 libwfcwxdz.so 파일이 뭔가 제대로 되어 있는 것 같지가 않았다.

 

IDA에서 변수나, 함수등 Trace를 하기 위해서 참조를 살펴보았지만

 

참조가 제대로 나오지도 않았으며 ELF 섹션도 엉터리였다.

 

아래의 사진을 보자.

 

해당 그림은 APK 파일에서 그대로 가져온 so 파일이다.

 

IDA에서 분석한 함수는 총 666이다.

 

섹션 상황도 보자.

 

 

섹션도 엉망으로 되어 있다.

 

그래서 생각을 해보았다.

 

왜 이렇게 되어있을까?

 

정답은 질문처럼 간단했다.

 

모바일 보안 솔루션 업체에서 해당 so 파일을 암호화인코딩을 통해 정적분석을 하지 못하도록 하는 것이었다.

 

아래의 그림은 LIAPP 홈페이지에서 소개되는 특징 중 하나이다.

 

 

위의 방식처럼 모바일 보안 솔루션에서는 중요하다고 생각하는 바이너리나 파일을

 

난독화 암호화하여 분석을 방해하는 것이다.

 

하지만, 뭘 어떻게 암호화를 했던 난독화를 했던 뭘 했던지간에 어차피 실행을 하기 위해서는

 

복호화디코딩을 해야 할 것이라는 생각을 하였다.

 

대부분의 모바일 보안 솔루션은 실행하면서 복호화 디코딩 함수를 통해 메모리에 로드한다.

 

이때 덤프를 한다면 100%의 원본은 획득하지 못하지만 분석에 필요한 so 파일을 얻을 수 있다고 생각하였다.

 

하지만 덤프를 하기 위해서는 Frida를 통해 덤프를 해야 하는데 제대로 된 분석을 하지 못해

 

Frida를 탐지하는 로직을 우회할 수 없었다.

 

두 번째 상황은 LIVE스코어라는 애플리케이션을 분석할 당시였다.

 

이때는 그래도 모바일 보안 솔루션 분석에 필요한 노하우도 어느 정도 생겼고,

 

분석하는 스킬도 많이 늘었다고 생각을 했었다.

 

그러고 나서 위의 애플리케이션을 다운로드하고 Frida를 통해 해당 so 파일을 덤프 하기 위해서

 

Frida를 실행해보았다.

 

당연히 Frida 탐지가 되어 애플리케이션을 종료가 되었다.

 

Frida 탐지가 되기 때문에 분석하기 어려워 이때까지 쌓은 노하우나 스킬을 모두 사용해 보았지만 우회할 수 없었다.

 

이때 해당 프로젝트를 해보아야겠다는 생각을 처음 한 순간이었다.

 

Frida를 사용하지 못하면? 정적 분석에 필요한 so 파일을 획득할 수 없구나,

 

따라서 Frida를 사용하지 않고 덤프를 할 수 있는 방법을 찾아봐야겠다고 생각했다.

 

그렇게 퇴근 후 이것저것 찾아보고 연구한 결과,

 

Frida 없이 so 파일을 덤프 할 수 있는 RainDropELF라는 툴을 개발하였다.

 

./RainDropELF "덤프 할 패키지명" "덤프 하고 싶은 so 파일"을 입력하면

 

/data/local/tmp덤프 된 so 파일을 얻을 수 있다.

 

Frida 탐지 로직을 우회를 한 후 so 파일을 덤프하고 IDA로 디컴파일을 하려고 할 때 아래와 같은 

 

Bad file structure or read error (line 5840). Continue? 라는 문구를 한 번쯤은 본 적이 있을 것이다.

 

 

File contains meaningless/illegal section declarations 해당 문구도 본 적이 있을 것이다.

 

 

이런 문제도 덤프 할 때 위의 문제를 해결되도록 개발하였다.

 

덤프 한 so 파일을 IDA로 열어보면 처음 666개 밖에 없었던 함수의 개수도 813개로 늘어났고

 

함수 심볼들도 잘 복구가 된 것을 볼 수 있다.

 

 

 

물론 섹션도 잘 복구가 되었다.

 

 

반응형

보통 한 달에 한두 번, 많을 때는 세 번까지,

 

직접 개발한 환경에서 모바일 보안 솔루션 우회 여부를 테스트를 해본다.

이유는 간단하다.


보안 솔루션은 국내외 수많은 고객사가 존재한다.


특히 금융권이나 공공기관 같이 민감한 데이터를 다루는 환경에서 주로 많이 사용한다. 


실제로 많은 기업들이 보안 솔루션을 도입한 후


외부 보안 컨설팅 업체를 통해 연간 단위 모의해킹 프로젝트를 진행한다.


이런 프로젝트에 투입 된다면 해당 인원이 가장 어려워하고 난감해야하는것은

 

내부망 진단, CS 진단, 모바일 애플리케이션 진단이다.

 

그 중, 모바일 애플리케이션 진단을 하기위해서는

 

당연히 해당 서비스에 적용되어 있는 보안 솔루션을 우회하는 시도도 필수이다.

이렇게 모바일 보안 솔루션 우회 과정을 지나 검수를 통해 보안 취약점을 발견하고


해당 취약점을 기반으로 보고서가 작성된다.


보고서를 받은 기관이나 기업은 내부적으로 조치를 취하고


이행점검을 진행해야 한다.

중요한 건 여기서 해당 솔루션 공급사에도 공유가 된다.

왜냐하면 대부분의 기업은 솔루션 자체를 직접 개발한 것이 아니기 때문에  


우회된 원인을 해결할 수 있는 주체는 결국 솔루션 업체이기 때문이다.

결과적으로 이 과정은 솔루션 업체에게 새로운 취약점에 대한 대응 로직을 추가하거나  


기존의 탐지 로직을 수정할 기회가 제공되는 것이다.

 

이런 구조 속에서 보안 솔루션은 빠르게 고도화가 진행된다.


우회 시도와 그에 따른 피드백이 반복되면서 자연스럽게 탐지 기술은 더 발견하기 힘들어지고


신규 취약점이나 루팅 툴, 해킹 툴등 에도 빠르게 대응할 수 있게 된다.

 

따라서 한 달에 적어도 2~3번 이상은 1차로 개발한 환경에서 

 

모바일 보안 솔루션이 적용되어 있는 여러 애플리케이션들을 실행해보는 이유이다.

그래서 이번에 테스트를 진행한 솔루션은 스틸리언이라는 회사에서 개발한하는 AppSuit이다.

 

해당 제품이 어디서 사용되고 있나 살펴봤더니, 물론 더 많이 존재하겠지만

 

당장 설치되어 있는 애플리케이션에서 찾아보니 키움증권의 MTS, '영웅문' 이라는

 

애플리케이션에 적용되어 있었다.

 

1차 개발이 완료된 환경에서 실행한 결과

 

다른 모바일 보안 솔루션과 다를 것 없이 애플리케이션이 정상적으로 실행된것을 볼 수 있다.


또한, Frida도 별다른 오류 없이 정상적으로 사용이 가능했다.  


즉, 탐지나 차단 로직에 탐지되어 종료가 되지 않았다는 것은,

 

1차로 개발 환경에서 자동으로 루팅 탐지 로직 USB 디버깅 탐지 로직

 

그리고 Frida 탐지 로직을 우회가 자동으로 성공했다는 의미이다.

 

 


앞으로도 다양한 모바일 보안 솔루션을 테스트하여 2차, 3차 등 고도화를 계속 진행할 예정이다.

반응형

이번에 회사에서 새로 출시된 PC 게임을 보안 검수해야 하는 일이 생겼다.

 

매번 이나 모바일만 검수를 하다가 PC 게임을 제대로 검수하는것은 처음이었다.

 

출시가 얼마 안된 베타 버전이지만, 해당 게임에 대한 핵이 벌써 만들어졌다. 

 

그래서 한번도 제대로 분석을 해보지 않았지만 분석을 해야만 했다.

 

그래서 유심히 게임 핵 영상을 살펴보던 중 DLL Injection을 하는 모습을 보았다.

 

한번씩 DLL Injection이라고 들어는 봤지, 한번도 해본적도 없이 없었다.

 

따라서 이번에 좋은 기회일것 같아 제대로 찾아보고 약간의 기술적인 내용과 함께

 

DLL Injection을 쉽게 할 수 있는 툴을 개발해보았다.

 

DLL이란 도대체 뭘까?

DLL은 Dynamic Link Library의 약자이다.

 

쉽게 말하면, 공유해서 쓸 수 있는 라이브러리라고 생각하면 된다.

 

모바일에서는 so 파일이라고 생각하면 쉽다.

 

사운드와 관련된 함수를 사용하고 싶으면 사운드와 관련된 dll을 사용하면 되고

 

메세지 박스를 사용자에게 보여 주고 싶으면 해당 메세지 박스를 사용할 수 있는 dll을 불러와 사용하면된다.

 

그렇다면, DLL Injection이란?

DLL Injection이란, 내가 만든 DLL을 다른 프로그램(예: 게임)에 강제로 '끼워넣는'기술이다

 

이걸 통해 그 프로그램의 동작을 감시하거나, 조작하거나, 로그를 찍는 등의 작업이 가능하다.


예를 들어, FPS 게임이라면 총을 쏜 후에 재장전을 해야하는데 재장전 시간을 0초로 만들 수 있다는것이다.

 

실제로 어떻게 이루어지나?

 

실제로 DLL을 주입해보려면 간단하게 아래와 같은 단계를 진행하게 된다.

  1. OpenProcess → 대상 게임 프로세스를 연다
  2. VirtualAllocEx → 게임 메모리에 공간을 만든다 
  3. WriteProcessMemory → DLL 경로를 그 공간에 쓴다 
  4. GetProcAddress → LoadLibraryA()의 주소를 찾는다 
  5. CreateRemoteThread → LoadLibrary를 실행시켜 DLL을 로드한다

위의 과정이 내가 Injection 하고 싶은 프로세스에 DLL을 Injection 하는 과정이다.

 

왜 이런 기술이 존재할까?

보안은 양날의 검과 같다.

 

아래의 정당한 용도와 악의적인 용도를 보자.

 

정당한 용도

  • OBS 같은 방송 프로그램이 게임 화면을 캡처할 때
  • 보안 프로그램이 키 입력을 감시할 때
  • 디버거가 내부 함수 호출을 후킹할 때

악의적인 용도

  • 게임 핵 (ESP, 오토에임)
  • 악성코드 (키로거, 정보 유출)
  • 백도어 삽입 등

이처럼 쓰임새는 다양하지만 목적에 따라 용도가 달라진다.

 

이렇게 짧지만 DLL Injection에 대해서 알아보았다.

 

이제 해당 과정과 개념을 가지고 편하게 DLL Injection을 할 수 있는 툴을 개발해보았다.

 

아래의 툴을 가지고 PC 게임을 분석한 후 게임 함수를 후킹할 수 있는 DLL을 만들어 Injection하면

 

우리가 흔히 아는 게임핵이 만들어지는것이다.

반응형

코인도 주식도 항상 가격이 오르락내리락 한다.

 

그런데 "어디쯤에서 사람들이 가장 많이 매수했을까?" 하는 궁금증이 생겼다.

 

그 해답이 바로 평균가라는 정보다.

 

예를 들어 어떤 종목의 현재 가격이 3만 원이라고 해보자.


이게 '머리'에 해당할 수도 있고, '어깨', '몸통', '무릎', '발' 같은 위치로 나눠서


현재 가격이 고점인지 저점인지 감을 잡는 데 참고할 수 있다.

 

처음엔 이 평균가 데이터가 단순히 앱에서 보여주는 숫자일 뿐이라고 생각했다.


그런데 문득 궁금해졌다.

 

"이 숫자는 어떻게 계산되는 거지?"


"서버에선 뭘 주고받길래 이런 데이터가 나오는 걸까?"

 

사실 이런 호기심은 나만의 투자 도우미 앱을 만들면서 시작됐다.


"어떤 기능을 넣으면 좋을까?" 고민하며 증권사 앱들을 둘러보다가,


이 평균가 기능이 꽤 유용해 보여서 직접 구현해보고 싶어진 것이다.

 

요즘 증권사 앱들에 들어가 보면 '평균가' 항목을 제공하는 곳도 있고,


아예 보여주지 않는 곳도 있다.

 

보통 이 '평균가'는 그 증권사를 통해 해당 종목을 매수한 사람들의 평균 단가를 의미한다.

 

예를 들어 삼성전자 주식의 현재가가 10만 원인데,


앱에서 평균가가 6만 5천 원으로 표시된다면?


대부분 싸게 샀고, 지금은 수익 중이라는 뜻이다.

 

재밌는 건 이 데이터를 단순 숫자가 아니라 시각적으로 보여주는 방식이다.

 

많은 앱이 사람의 신체 구조에 빗대어 다음과 같이 표현한다.

  • 머리
  • 어깨
  • 몸통
  • 무릎

예를 들어 평균가가 2만 원이고, 현재 가격이 1만 원으로 '발'에 해당된다면?


거의 저점으로 볼 수 있다.


이럴 경우, 매수 포인트로 판단할 수도 있는 것이다.

 

물론 이런 단순한 지표 외에도 기술적 분석은 반드시 병행되어야 한다.

 

그래서 이 기능을 나만의 투자 앱에 넣어보기로 마음먹고, 분석을 시작했다.


먼저 앱에서 이 평균가가 어떻게 서버에서 데이터가 전달 되는지 확인하려면,

 

서버와 어떤 데이터를 주고받는지를 파악해야 했다.

 

당연히 프록시 툴을 먼저 써봤지만,


패킷이 하나도 잡히지 않았다.

 

요즘 증권사 앱들은 보안과 속도를 위해


TCP 소켓 통신을 사용하며, 암호화까지 적용되어 있어서


일반적인 방법으로는 내용을 확인할 수 없었다.

 

결국 해당 앱을 뜯어보기로 했다.

 

당연히 증권사 앱답게 루팅 탐지, 디버깅 탐지, 피닝 탐지 등 엄청난 보안 로직들이 적용되어 있었다.

 

위의 탐지 로직 등을 우회하면 드디어 코드와 앱의 실행 과정을 분석할 수 있었다.

 

코드를 분석하면서 서버와 주고받는 구조를 추적 및 분석을 하였고,


마침내 평균가 요청 패킷 구조와 암호화 키, 응답 데이터 형식을 확인할 수 있었다.

 

예를 들어 삼성전자 종목 코드와 함께 평균가 요청을 보내면,


서버는 해당 종목에 대한 이용자 평균 매수 단가를 계산해 응답해준다.

 

응답값은 단순 평균뿐 아니라,


머리, 어깨, 몸통, 무릎, 발에 해당하는 구간별 가격까지 함께 포함되어 있었다.

 

아래 왼쪽 그림은 현재 삼성전자의 현재가와 전날과의 대비 등락을 보여주는 화면이다.

 

해당 종목을 클릭하면 오른쪽 그림처럼 현재 삼성전자의 평균 단가를 보여주는

 

그림을 출력하도록 기능을 추가하였다.

 

 

반응형

요즘 투자가 재밌어 보여서 이것저것 알아보다가, 자동 매매 시스템이라는 걸 알게 됐다.

 

 

"어? 자동으로 사고팔아준다고?


이거 완전 돈 버는 기계 아냐?"

 


그렇게 호기심이 폭발하면서 나도 "직접 만들어 봐야지!" 하고 계획을 세웠다.


하지만 막상 만들려고 보니, 가장 먼저 해결해야 할 문제가 떠올랐다.

바로 가격을 실시간으로 받아와야 뭐든 할 수 있겠다 싶었다.

 

그래서 국내 1위 거래소인 업비트에 접속해보았다.

 

 

 

홈 | 업비트

비트코인, 이더리움, 리플, NFT 등 다양한 디지털 자산, 국내 거래량 1위 거래소 업비트에서 지금 확인해보세요. No.1 Digital Asset Exchange in Korea, Upbit. Trade various digital assets conveniently and securely including

upbit.com

 

 

역시 국내 거래량 1위 거래소 업비트(Upbit)에서 API를 제공하지 않을 리 없었다.


그래서 공식 홈페이지를 찾아봤더니...

 

 

 

업비트 개발자 센터

 

docs.upbit.com

 

2025년 2월 26일 기준으로 공식 사이트에서 표로 깔끔하게 정리한 내용을 보자면 다음과 같다.

 

 

공식 문서를 읽어보니 API는 크게 두 가지 종류로 나뉜다.

QUOTATION API – 시세 데이터를 조회할 때 사용하는 API


EXCHANGE API – 매수/매도를 할 때 사용하는 API


이걸 보고 난 "아, 거래하는 건 큰 문제가 없겠네?"라고 생각했다.

 

하지만...

자동 매매에는 치명적인 단점이 존재했다.


개인적으로 사람마다 다르겠지만,

 

API 문서를 읽어보면서, 이건 좀 불편한데? 싶은 점이 두 가지나 있었다.

1. 계정 필수 + IP 등록 제한


API를 사용하려면 반드시 업비트 계정이 있어야 하고, 

 

미리 등록한 IP에서만 요청 가능했다.


집에서만 돌릴 거면 문제없지만, 

 

밖에서도 실행할 수 있는 앱을 만들고 싶었던 나에겐 큰 걸림돌이었다.



2. 실시간 가격 조회 속도 제한


소켓(Socket)으로 가격을 받아올 수 있지만, 초당 5회분당 100회라는 제한이 있다.

코인 가격은 순식간에 변하는데, 

 

이 속도로는 수십 개의 종목을 실시간으로 모니터링하기 어려웠다.

 

그렇다고 서버를 둘 수 도 없고..


이건 모바일 자동 매매 프로그램을 만들 때 가장 큰 단점이었다.


"이거 어떻게든 해결해야겠는데?" 하는 마음으로 분석을 시작했다.

그리고 결국

2025년 2월 26일 기준, 160개의 코인을 거의 실시간으로 보여주는 데모 애플리케이션을 개발했다.

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

 

먼저 리플을 홈페이지와 직접 개발한 데모 애플리케이션비교했을때의 모습이다.

 

사실 화면에서는 보이지 않지만, 해당 애플리케이션의 빽단에서는 거의 실시간으로 데이터를 받을 수 있다.

하지만 UI로 표현 하는 방법코드 로직에 따라 조금은 시간차가 존재하였다.

 

다음은 비트코인의 호가창이다.

이것도 마찬가지로 애플리케이션의 빽단에서는 거의 실시간으로 데이터를 받을 수 있지만

 

UI로 표현 하는 방법에서 코드 로직이 조금 개선이 필요할것 같았다.

 

동영상 서비스가 종료되어 해당 콘텐츠를 재생할 수 없습니다.

 

 

이것을 활용해서 자동 매매 프로그램을 제작해볼 예정이다.

반응형

모바일 애플리케이션을 분석하려면 가장 먼저 USB Debugging 설정을 활성화해야 한다.

 

이유는 여러 가지가 있겠지만, 가장 핵심적인 이유는 Frida와 같은 필수 도구를 사용하기 위함이다.

 

Frida는 앱의 내부 동작을 분석하고 디컴파일된 코드에 접근할 수 있도록 해주는 강력한 도구인데

 

문제는 간혹 애플리케이션이 USB Debugging 감지 로직을 통해 이를 탐지하고

 

앱 실행을 중단하는 경우가 존재한다.

 

다행히도 대부분의 USB Debugging 감지 로직은 Frida를 이용해 우회할 수 있다.

 

Java 또는 Native 레벨에서 동작하는 탐지 코드를 찾아내고,

 

메소드함수후킹(hooking)을 걸어 감지 로직을 우회할 수 있다.

 

하지만 여기서 다음과 같은 문제가 발생할 수 있다.

 

앱의 Java 코드나 Native 코드가 암호화되어 있다면???

 

코드가 암호화된 상태에서는 감지 로직이 어디에 숨겨져 있는지 찾아내기가 매우 어렵다.

 

암호화된 상태의 코드를 분석하려면,

 

실행 중인 앱에서 복호화된 상태의 원본 파일(예: Dex 파일이나 .so 파일)을

 

덤프(dump) 해야 한다.

 

이를 통해 암호화된 코드를 확인할 수 있으며 높은 확률로 탐지 로직도 찾을수 있다.

 

그런데 여기서 또 하나의 문제가 발생한다.

 

USB Debugging 탐지 로직이 앱을 종료시켜 버리면??

 

Frida를 이용해 복호화된 파일을 덤프할 기회조차 주어지지 않는다.

 

아래의 그림을 보자.

 

아래의 사진처럼 FridaDex 혹은 so 파일을 덤프를 하려고 USB Debugging을 설정해주고

 

연결하면 아래의 사진처럼 USB Debugging 탐지 로직에 탐지되어 앱이 종료된다.

 

 

이런 상황을 대비하고자.

 

기존에는 Frida를 이용해 USB Debugging 감지를 우회하는 방법이 일반적이었지만,

 

이번엔 Frida로 USB Debugging을 우회하지 않고도 문제를 해결할 수 있는 새로운 환경을 구성해 보았다.

 

아래의 그림이 Frida를 이용하지 않고 USB Debugging을 우회하지 않고

 

USB Debugging을 탐지 로직을 우회한 모습이다.

 

USB Debugging 탐지 로직이 우회된 모습

 

이 방법을 통해, USB Debugging 감지 로직에 걸리지 않으면서도

 

Frida로 원본 Dex 파일 및 so 파일을 성공적으로 덤프할 수 있었다.

반응형

모의해킹을 진행하다 보면, 예상치 못한 도전에 부딪히는 순간들이 있다.

 

그중에서도 흔히 발생하는 일이 바로 취약점이 발견된 화면을 캡처하려다 실패하는 상황이다.

 

보고서를 작성하기 위해 "여기 보세요! 이게 바로 취약점입니다"라며 캡처 사진을

 

보고서에 첨부하려고 캡처 버튼을 누르는 순간,

 

화면에 뜨는 건 "이 앱에서는 캡처가 허용되지 않습니다"라는 냉랭한 문구.

 

화면이 짤막하게 깜빡일 뿐, 저장된 건 아무것도 없다.

 

캡처가 되더라도 검은색 화면만 캡처가 된다.

화면 캡처와 화면 녹화 기능이 차단된 상황

 

이런 문제는 특히 금융권 애플리케이션에서 자주 발견된다.

 

왜일까? 이유는 간단하다.

 

바로 보안 때문이다.


예를 들어, 은행 앱에서 사용자의 계좌정보나 금융 데이터를 화면 캡처로 저장할 수 있다면,

 

이는 악성 코드나 정보 탈취 프로그램에 의해 민감한 데이터가 쉽게 유출될 가능성이 있다.

 

그래서 화면 캡처를 차단해 둔다.

 

또 한 가지 재미있는 예로는, 저작권 보호를 위한 캡처 차단 사례를 들 수 있다.

 

네이버 웹툰과 카카오 웹툰이 대표적인 사례이다.

 

네이버 웹툰 화면 캡처와 화면 녹화 기능이 차단된 상황

 

조금 주제를 벗어난 이야기를 하자면,

 

무료로 열람할 수 있는 웹툰의 경우에는 공격자나 악의적으로 저작권을 위반하려는

 

해커가 굳이 캡처를 할 필요가 없다.

 

왜냐하면, 어차피 누구나 볼 수 있는 공개된 회차이기 때문이다.

 

아래는 카카오 웹툰, 네이버 웹툰의 무료 회차에 대한 화면 캡처가 우회된 모습이다.

 

카카오 웹툰 무료 회차

 

네이버 웹툰 무료 회차

 

 

하지만 궁금한 마음에 유료로 열람하는 회차에서도 캡처가 가능한지 확인해보았다.


결과는 무료 회차든, 유료 회차든 모두 캡처가 가능했다.

 

유료 회차에서 화면 캡처가 우회된 모습

 

다만, 네이버 웹툰에는 툰레이더라는 캡처 추적 시스템이 존재한다.

 

이 시스템은 네이버 웹툰 작품이 불법적으로 캡처되거나 유출될 경우,

 

이를 실시간으로 탐지해 담당자가 즉각 확인할 수 있도록 만들어진 솔루션이다.

 

물론 카카오 웹툰도 추척 시스템이 존재할것이다.

 

이 때문에, 확인은 단순히 테스트 목적으로만 진행했으며, 추가적인 캡처는 진행하지 않았다.

 

다시 본론으로 돌아와,

 

만약 위의 화면 캡처 방지 문제를 우회하지 못해,

 

화면을 다른 휴대폰으로 직접 사진을 찍어 보고서에 첨부해야 하는 상황이 발생한다.

 

이런 방식은 마치 "아날로그"로 돌아간 듯한 느낌을 주며,

 

결과적으로 보고서의 퀄리티가 개인적으로 한층 떨어져 보인다고 생각한다.

 

그래서 개인적으로 보고서에 화면을 첨부할 일이 생기면

 

Frida를 활용해 화면 캡처 방지를 우회한 뒤, 고화질로 캡처한 이미지를 보고서에 첨부한다.

 

이렇게 하면 보고서가 훨씬 더 전문적이고 완성도 높게 보인다고 생각이 되기 때문이다.

 

물론, 애플리케이션 중에는 설정 메뉴에서 화면 캡처를 허용하는 옵션을 제공하는 경우도 있다.

 

하지만 이러한 기능이 없는 애플리케이션도 여전히 많다.

 

이런 경우에는 위에서 언급한것처럼 Frida로 화면 캡처 제한을 우회해야만 캡처가 가능해진다.

 

문제는, Frida를 매번 실행해야하고 스크립트를 작성하는 과정

 

또, Frida를 탐지하고 있으면 이를 우회하는것이 상당히 번거롭다.

 

그래서 이러한 반복적인 작업을 항상 캡처 방지를 우회할 수 있는 환경을 구성했다.

 

이렇게 금융권 애플리케이션, 국내 대표적인 웹툰 애플리케이션인 네이버, 카카오 웹툰에서

 

Frida를 사용하지 않고도 화면 캡쳐 및 화면 녹화가 되는것을 확인하였다.

반응형

모바일 모의해킹에 처음 흥미를 느꼈던 순간을 떠올려 보면,

 

본격적으로 분석을 시작했던 대상이 바로 NSHC사의 libdxbase.so

 

Liapp이라는 모바일 보안 솔루션이였다.

 

당시 이 솔루션을 우회하는 데 정말 많은 시간이 들었던 것으로 기억한다.

 

어떻게 접근을 해야하는지도 몰랐고, 어디서부터 분석을 시작해야하는지 참 막막했던 기억이 있다.

 

많은 시도를 반복하며, 하나씩 문제를 해결하는 과정에서 자연스럽게

 

모바일 보안 솔루션에 대한 기술을 익히게 되었다.

 

최근에는 1차 테스트용으로 개발이 완료된 환경에서

 

NSHC사의 모바일 보안 솔루션(libdxbase.so)을 탑재한

 

SK 주파수3이라는 애플리케이션을 실행해보았다.

 

테스트 결과는 성공적이었다.

 

현재 대부분은 Magisk를 사용해서 루팅하기 때문에 Magisk로 루팅된 환경에서 실행해보았다.

 

Magisk를 사용하여 루팅된 환경에서 실행 시 루팅된 환경이 탐지됬다는 알림창을 볼 수 있다.

 

 

하지만 1차 개발이 완료된 환경에서는

 

아래의 그림에서 보는것처럼 루팅된 환경에서도 아무 문제 없이 정상적으로 동작하는 것을 확인할 수 있다.

 

 

또한, 원래 Frida를 사용하면 아래와 같이 바로 종료가 된다.

 

하지만 아래와 같이 Spwan으로 Frida를 실행한 후

 

1초마다 Frida Bypass........라는 문자열을 출력해보았다.


5분이 넘게 Frida가 종료되지 않는것으로 보아 Frida 탐지가 되지 않고 잘 실행되고 있다는것을 

 

확인할 수 있다.

반응형

모바일 애플리케이션을 분석하다 보면 종종 이런 생각이 들 때가 있다.


“이거 내가 애플리케이션을 분석하는 건지, 모바일 보안 솔루션을 분석하는 건지 모르겠네…”

 

최근 출시되는 애플리케이션들은 대부분 모바일 보안 솔루션이 기본으로 탑재되어 있다.

 

모바일 보안 솔루션들은 분석이나 해킹 시도를 막기 위해 치밀하게 설계되어 있다.

 

덕분에 보안 업계에서 일하는 우리 같은 사람들은 애플리케이션을 분석하는 것보다

 

오히려 모바일 보안 솔루션을 우회하는 데 더 많은 시간을 쓰고 있다.

 

모의해커보안 분석가 입장에서 애플리케이션을 점검하려면 기본적으로

 

루팅 된 단말기Frida 같은 도구가 필요하다.

 

하지만, 애플리케이션 개발사들도 이를 알고 있기 때문에

 

이에 맞게 대응하고 있으며 그 대응 방안 중 하나가 바로 모바일 보안 솔루션이다.

 

모바일 보안 솔루션들은 루팅 된 환경을 알아차리고는 바로 실행을 중단한다.

 

덕분에 분석은커녕,  "비정상적인 환경이 감지되었습니다” 같은 알림만 받아보는 것이 현실이다.

 

분석가들은 제한된 일정 안에서 서비스를 빠르게 분석하고 보고서를 제출해야 하는데,

 

모바일 보안 솔루션무력화하거나 탐지 로직을 하나씩 분석하려다 보면 시간이 부족하기 마련이다.

 

분석 과정에서 점점 지쳐가면서 문득 처음 말했던 것처럼 착각마저 든다.

 

"이거 내가 분석하는 게 애플리케이션이었나? 모바일 보안 솔루션이었나?"

 

이런 문제점을 해결하기 위해 새로운 접근이 필요했다.

 

모바일 보안 솔루션직접적으로 우회하거나 제거하지 않고, 더 효율적으로 분석을 진행할 방법은 없을까?

 

그래서 모바일 보안 솔루션을 우회하지 않으면서도 애플리케이션 분석이 가능한 환경을 개발했다.

 

이를 통해 애플리케이션 자체에 더 집중하고, 방해 요소를 최소화하며

 

효율적으로 분석 작업을 진행할 수 있었다.

 

첫 실험 대상은 이전에 포스팅한 당근마켓이었고,

 

이후 이번엔 금융권 앱 중에서도 보안 강도가 높다고 소문이 난 토스를 대상으로 테스트 진행했다. 

 

 

일반적으로 루팅 된 단말기에서 토스를 실행하면 아래와 같이 경고 알림이 뜨면서 바로 종료된다.

 

토스도 마찬가지로 위의 영상에서처럼 위/변조 혹은, 루팅된 단말기에서 실행하면 경고 알림이 발생하면서

 

바로 접속이 차단된다.

 

그래서 일반적인 루팅된 테스트 폰에서 토스 애플리케이션을 설치한 후 실행해보았다.

 

위의 그림처럼 바로 탐지가 되었으며 애플리케이션 바로 종료 되었다.

 

하지만 직접 개발한 환경(루팅 된 단말기)에서 실행한 결과 토스정상적으로 실행되었다.

 

 

뿐만 아니라, 아래와 같이 Frida 같은 분석 도구아무런 문제 없이 작동하는 것을 확인할 수 있었다.

 

해당 프로젝트는 앞으로도 계속될 것이고 국내 애플리케이션(당근마켓, 토스)뿐 아니라

 

해외 애플리케이션도 동일한 환경을 적용해 보면서 분석 환경을 고도화할 예정이다.

 

궁극적으로는 서비스 점검에 더 집중할 수 있는 안정적이고 효율적인 도구를 만드는 것이 목표이다.

 

반응형

+ Recent posts