게임보안솔루션 무력화 했었던 경험과 신기했던 점

홈 > 안드로이드 > 안드로이드
안드로이드

게임보안솔루션 무력화 했었던 경험과 신기했던 점

6 지존 37 16003 8

옛날에 보안솔루션이 적용되어 있던 어떤 유니티 게임을 분석했던 내용들인데

강좌라 하기엔 너무 부실하고 방향성도 모호해서 그냥 저의 의식의 흐름대로 적을게요


f43271662e8d5f78b3fd83545bc927f8_1570521138_1951.png

모 애플리케이션의 메인액티비티의 onCreate 함수입니다

onCreate가 뭐지? 하시는 분들은 구글에 Android life cycle 이라고 검색해보세요!

딱봐도 간단해 보이는 내용이죠? 보안솔루션의 인스턴스를 얻어온 뒤에 initialize 함수를 호출하는거에요

파고들다 보면 결국 네이티브 라이브러리 호출을 하는 것을 알 수있는데요


f43271662e8d5f78b3fd83545bc927f8_1570521694_2297.png


저의 허접한 분석 결과 initialize라는 함수가 상당히 많은 역할을 하고 이 함수만 무력화 시키면 보안 솔루션을 호구로 만들 수 있다고 생각했어요 

하지만, 그렇게 무력화를 한 후에 게임을 실행해보니 어딘가 무결성 검사를 하는 부분이 있다는 것을 알아냈고

놀랍게도 그게 게임엔진 스크립트 부분인 Assembly-CSharp.dll 에 있다는것을 알고 깜짝 놀랐어요

그 당시에는 무력화에만 집중하느라 별 생각 없이 지나쳤던 부분인데 과연 어떻게 한 것일까요? 


f43271662e8d5f78b3fd83545bc927f8_1570522017_7849.png

요 그림은 무결성 검사를 하는 부분의 일부를 가져온 것이에요

보시면 패킷 송수신을 통해서 무결성에 관한 정보를 확인하는 거라는걸 간단히 짐작할수있죠

근데 여기서 AndroidManager.XXXXXX() ​보이시나요?

네이티브 함수들에 대해서 제대로 안보여드려서 그렇지만..분명 네이티브 함수에 분명 비슷한 이름들이 있었어요

그것을 보고 혹시 유니티에서도 직접 네이티브 함수를 호출할수 있나 싶었죠

그래서 AndroidManager 클래스에 대해서 한번더 파고 들어봤어요


f43271662e8d5f78b3fd83545bc927f8_1570522378_5496.png

쿠키값을 받아오는 함수에요 activity라는 멤버 에서 Call이라는 메서드를 통해서 함수를 호출하는것을 알 수있었어요


activity의 할당은 언제 되는건지 한번 더 알아보았어요


f43271662e8d5f78b3fd83545bc927f8_1570522473_5086.png


이 그림에서 46번째 줄 보이시나요?

AndroidJavaClass 의 생성자로 애플리케이션의 메인액티비티를 파라미터로 넘겨주고 

GetStatic이라는 메서드를 통해서 싱글턴 인스턴스를 activity에 할당해주는것이라고.. 추측해볼수 있었어요


구글에 검색을 해봤어요

https://docs.unity3d.com/kr/530/ScriptReference/AndroidJavaClass.html


설명을 읽어보시면 알겠지만 네이티브로 호출하는것은 아니지만, 유니티에서도 AndroidJavaClass 를 이용하면 java 코드를 호출할 수 있다는것을 알 수 있었어요

네이티브 함수를 직접 부른다는 제 추측은 틀렸지만, 어쨌든 MainActivity에서 전혀 호출해주는 녀석들이 없는데도 왜 있지 하는 녀석들이 왜있는지를 알게 되었어요


몇년전에 리버싱 배울 때 정공학을 잘해야 역공학도 잘한다는 말을 들은 적이 있어요

정공학을 못한다고 생각하고 있었지만 이번에 간단한 삽질을 통해서 그걸 또 한번 깨닫게 되네요 ㅎㅎ;;


이것저것 말하다가 요점을 잃어버린것 같네요 ㅋㅋ

3줄 요약 해드릴게요

1.게임 보안 솔루션 메서드의 호출을 dex 파일 말고도 Assembly-CSharp.dll 에서 하는것이 신기했음

2.유니티에서 AndroidJavaClass 객체를 생성함으로써 Java 함수의 호출이 가능하다

3.정공학을 열심히 하자

37 Comments
S 코드몽키 2019.10.08 18:48  
또다른 기인의 등장! 역시 포럼의 장점이죠! 반갑습니다~ 앞으로 좋은 포스팅 잘부탁드립니다~^^)
8 리피트싯 2019.10.08 19:14  
자바에서 펑션을 만들고 그펑션을 유니티에서 인자를넘겨 네이티브에접속할수있습니다.
1 하하 2019.10.08 19:25  
나는 왜 이해가않되지 ㅠ
S tutorial1 2019.10.08 19:46  
추천 박습니다.
3 아토 2019.10.08 23:59  
능력자들이 많으시군요 ㄷㄷ
6 하늘사자 2019.10.09 09:23  
대단하시네요~~~ 감사합니다.
3 junos 2019.10.09 09:56  
오 신기하네요 감사합니다
1 킹짱 2019.10.09 18:04  
오호라 그러면 저부분이 그것이라는 거군여.....
신기하네요...
1 dorsia 2019.10.09 18:30  
못알아듣겠지만 신기..
2 은빛늑대 2019.10.10 00:44  
뜬금없지만,, 저 뷰어 이름이 뭐예요? ㅋ.ㅋ;;
6 지존 2019.10.10 03:28  
사진에 나온 툴들은 jadx와 dnspy입니다
1 rlaekgp 2019.10.10 18:23  
어렵긴하지만 신기하네요 ;;
5 치콩 2019.10.11 19:16  
와...이걸 ㅋㅋ 신기하네요!! 잘 보고갑니다^^
10 항상웃는삐에로 2019.10.11 19:56  
대단하시네요. 좋은정보 많이 많이 부탁드립니다.
5 파파엄마 2019.10.12 09:11  
좋은 정보 감사합니다~~~~ 양질의 강의가 점점 많아지네요!
2 unclebob 2019.10.20 14:41  
xigncode cookie?
1 rok795 2019.10.21 12:07  
좋은 정보 감사합니다.
3 최삽질 2019.10.29 15:14  
정보 감사합니다~
1 고수님들감사용 2019.11.20 02:22  
추천이요!
1 dkssud12 2019.12.08 20:27  
역시 능력자 ㄷㄷ 대단합니다
2 빙굴 2019.12.12 08:13  
감사합니다 도움이 되었습니다
2 songod 2019.12.19 17:13  
감사합니다.
28 사딸라 2020.01.07 08:29  
대단합니다
2 혀기꼬 2020.01.08 15:25  
감사합니다
4 알려주세요오 2020.01.26 21:39  
좋습니당.
2 레모늬 2020.02.28 09:47  
감사합니다 ㄷㄷ
2 개미개미 2020.03.07 02:01  
난 왜 이해가 안되는걸까요 ㅜㅜ 아직 배울게 많네요
1 테나 2020.03.17 13:10  
아직 어렵네요 ^^
7 래바리 2020.04.03 18:43  
감사합니다.
1 sdfadf 2020.04.05 21:04  
배울게 많군요..
1 이나얼아니 2020.05.20 13:24  
감사합니다
2 zpkkpz 2020.05.24 00:35  
어렵네요..
1 changkr 2020.08.02 14:52  
대단하십니다
부지런히 공부하겠습니다
16 오도도 2021.04.02 11:09  
ㅎㅎ 여기저기 보는 재미가 있네요,, dnspy 화면을 몇번 사용했다고 익숙하네요 ㅎ
1 alspf 2021.05.09 07:05  
지금봐도 이해가 안되네요.. 좀 배워야겠습니다
1 릿카짱 2021.07.26 20:53  
감사합니다~~!!

Congratulation! You win the 18 축하드립니다! 당첨되셨어요~!

1 almaystro79 2023.10.20 18:45  
but is that possible in hard anti cheats like ACE ?