포스팅 목적
- 기록
- 피드백을 받기 위해
- 공유
개발 이유
유니티로 컴파일 하여 배포한 APK 를 루팅한 기기(스마트폰 등)에서 APK 를 뽑아와 해체하면, 손쉽게 외부 DLL 에 접근이 가능합니다. 이렇게 접근 한 뒤 후킹 가능한 DLL 로 바꿔치기 하여, 다시 APK 로 묶으면, 손쉽게 해킹이 가능합니다. 또한 ILSpy 로 코드를 디스어샘블하여 볼 수 있습니다.
그래서 외부 컴파일된 DLL 을 암호화 하여, 동적 로드 하여, 사용한다면, 조금이라도 해커를 귀찮게 할 수 있습니다. 이 내용은 다음 링크에서 확인 할 수 있습니다.
링크
- http://unitystudy.net/bbs/board.php?bo_table=newwriting&wr_id=356
- http://www.slideshare.net/williamyang3910/unitekorea2013-protecting-your-android-content-21713675 - 32 page
DLL 암호화 절차
- 외부에서 컴파일된 DLL 을 open ssl 을 이용해 암호화 한다.
- 디스어샘블을 막고 무결성을 검증하기 위해 - 암호화된 DLL 을 base64 인코딩 한다.
- 암호화 되면, text 형태로 파일을 읽어오기 힘들기 때문에. (이 과정 없이 바로 바이너리로 로딩해도 됩니다) - 유니티에 인코딩된 파일을 알맞는 자리에 위치 시킨다.
- 유니티로 base64로 인코딩된 파일을 읽고, byte[] 로 변환시킨다.
- 변환 후 복호화 한다.
- 복호화된 대상을 동적 로드 한다.
- 쉽게 사용하기 위해 래퍼를 만들어 인터페이스를 추가하여 사용한다.
DLL 암호화 방법 및 사용법
- oepnSSL 을 다운로드 받는다. 자신의 OS 에 맞는 버전을 받아 사용 하세요.
- 윈도우 사용자의 경우, 바이너리로 받으면 편합니다.
- https://www.openssl.org/related/binaries.html - openssl 명령어를 통해 aes-256-cbc 로 암호화 한다. 이때 암호를 입력 하라 나오는데 입력하고 key 와 iv 를 복사해 둔다.
- openssl 명령어를 통해 base64 인코딩 한다.
예) openssl base64 -in HOTween.bin -out HOTween.txt - HOTween.txt 를 유니티 Resource 폴더에 위치 시킨다.
- 로더를 만든다. SecurityDLLLoader.cs
- 손쉽게 사용할 레퍼를 만든다. SecurityHOTween.cs
- 테스트!!!
여담
- openssl 을 이용한 암호화 전략은 여러가지 이유로 편하다.
- 다양한 툴과 여러 라이브러리가 존재하기 때문이다. - 동적 DLL 로드의 경우, 성능상의 이슈가 있으므로, 꼭 간단히 만들어 테스트 해보고 진행 해야 한다.
- 애초에 동적 DLL 로 쓸꺼다라는 개념으로 프로그래밍 했다면 좀 더 편했을 수 있겠다. - 위의 것을 조금 바꾸면, 스크립트 암호화가 되는데, 이는 다음 편에서....
:wq!
'연구실 > 파편화된 기록들' 카테고리의 다른 글
넥서스7 1세대, 롤리팝 업데이트 후 느려짐 현상 수정(버벅임) (0) | 2015.09.16 |
---|---|
유니티3D에 자바 라이브러리 Jar 연동하기 (How to link Jar in Unity3D) (0) | 2015.04.08 |
유니티3D를 위한 인 게임 디버그 콘솔 넣기 (In-game debug console for Unity3D) (0) | 2015.04.03 |
디자인 패턴, 행위 패턴, 스트래티지 패턴(Strategy Pattern) (0) | 2015.03.15 |
유니티 암호화 1편, PlayerPrefs 암호화 (7) | 2015.03.01 |
바나나리퍼블릭 Sale 페이지 할인율 올림차순이 북마클릿 (0) | 2015.02.06 |
네티 유저 가이드 4.x (Netty User guide for 4.x) 한글 번역 (1) | 2015.02.03 |
중복 코드 제거 기법 - swith+for 코드 점프 기법 (0) | 2011.03.18 |
lunit - Unit Testing Framework for Lua (1) | 2011.02.27 |
ORA-12520 (2) | 2011.02.05 |
최근댓글