바이너리 코드 변조

홈 > IOS > IOS > 강좌
IOS

바이너리 코드 변조

S 붉은상어 14 7128 2

4번 강좌에서는 게임 코드를 찾는 것을 확인했는데요.

요번에는 코드를 변조하는 방법에 대해서 설명하겠습니다.


모 게임의 서명 확인 주소는 0x1024B1F7C 였습니다.

private bool CheckSignature(string fileName); // RVA: 0x1024B1F7C Offset: 0x24B1F7C

여기서 리턴 값이 bool로 되어있습니다.

만약 서명이 틀리면 false로 리턴할 것이고 맞으면 true로 리턴할 것입니다.

그렇다면 서명이 무조건 맞다고 하기 위해서는 true로 계속 리턴을 해줘야 합니다.

false의 값은 0이고 true의 값은 1 입니다.


여기서 아래 코드는 false로 리턴해주는 어셈블리 코드 입니다.

c26fdc683180bf4153bdb63bdefcc685_1570699358_9124.PNG
코드를 간단하게 설명하자면 W0 레지스터 값이며 W0에 0이라는 값을 넣습니다.

그리고 리턴을 해줍니다.

참고로 R0, W0와 같은 0번 레지스터의 경우 리턴 레지스터라고도 불립니다.


그렇다면 ture로 변경하려면

MOV W0, #1

RET

요렇게 변경이 필요합니다.


일단 포럼 여기저기 hex converter가 있어서 그것을 사용해 보겠습니다.

http://armconverter.com/ 

c26fdc683180bf4153bdb63bdefcc685_1570700008_1972.PNG
 

위에 결과를 보시면 0x20008052 0xc0035fd6인 것을 확인할 수 있으며 값을 변경해주면 됩니다.


이제 위에 있는 함수의 RVA 값이 아닌 바이너리의 Offset 0x24B1F7C 위치로 가보겠습니다.

hex 에디터를 열고 0x24B1F7C 위치로 점프합니다.

c26fdc683180bf4153bdb63bdefcc685_1570700238_195.PNG

c26fdc683180bf4153bdb63bdefcc685_1570700250_3154.PNG

hex 에디터와 ida의 위치가 같은지 앞 부분의 byte 값을 확인합니다.


c26fdc683180bf4153bdb63bdefcc685_1570700428_0741.PNG
컨버터의 결과 값을 hex 에디터에서 수정을 합니다.

c26fdc683180bf4153bdb63bdefcc685_1570700927_0341.PNG
 

이제 ida로 와서 1로 리턴하는 코드를 확인합니다.

변조된 파일을 설치된 경로에 저장을 하고 실행을 합니다.

실행위치는 /var/containers/Bundle/Application/(bundle id)/(app name) 입니다. 

ios 버전에 따라 다를 수 있으며 인터넷에서 찾아보고 저장해 주시면 됩니다.


이번 내용은 아주 기본적인 변조 내용입니다.

외국 아저씨들은 코드가 동작하지 않도록 nop 하시는 분들도 있고 void에서는 RET 하시는 분들도 있습니다.

해당 강좌는 변조 공부를 통해 ARM 어셈블리에 대해서 친숙하시길 바라며

보안솔루션이 들어간 앱의 경우는 무결성 검사를 하기 때문에 변조를 해도 탐지가 됩니다.


14 Comments
S 코드몽키 2019.10.10 19:09  
유용한 정보 감사합니다^^ 그런데 일반적으로 많이쓰이는건 32비트니까 초보분들이 보시면 헷갈릴수도있을거같네요
S 붉은상어 2019.10.10 19:19  
안드로이드에서 32bit로 변조하는게 많았으니깐요ㅋ
ios 경우 대부분 64bit라서요.. 설명이 부족했네요ㅋ
곧 안드로이드도 64bit로 넘어갑니다ㅋ
구글 정책을 보면 그렇습니다ㅋ
8 리피트싯 2019.10.11 14:23  
안드로이드 8.0.0 이후부턴 대부분 64비트지원기기 더이상 32비트 폰은 출시되지않습니다.
2 레토스 2019.10.10 19:59  
좋은 글 감사합니다 ㅎㅎㅎㅎ
5 파파엄마 2019.10.13 08:36  
아주 좋은 글입니다 ! 이제 64비트 시대죠 ㅋㅋㅋ
9 단향 2019.11.30 14:48  
오홍 기본적이면서도 중요한 정보네요 감사합니다
1 혼또니 2019.12.25 14:41  
감사합니다~~~
28 사딸라 2020.01.08 23:48  
정보 감사합니다
9 탱바 2020.03.12 22:13  
잘 보았습니다 감사해요~
9 선우아빠 2020.03.23 10:26  
오오 고맙습니다~
3 zzs412412 2020.05.12 21:02  
감사합니다
7 임중호 2020.05.24 00:43  
감사합니데이
4 쿨록 2020.08.09 17:11  
어렵네요 ㅜㅜ
1 ooooo 2021.06.26 15:35  
감사합니다