린엔진 튜토리얼 - Hook Helper(훅 헬퍼) 사용방법

홈 > 린엔진 > 린엔진 게시판
린엔진 게시판

린엔진 관련 게시판입니다.

린엔진 튜토리얼 - Hook Helper(훅 헬퍼) 사용방법

M LIN 55 6930 0

린엔진의 새로운 기능인 훅 헬퍼(Hook Helper) 사용 방법 강좌입니다.


Hook Helper?


Hook Helper : http://linforum.kr/bbs/board.php?bo_table=linBoard&wr_id=198

훅 헬퍼의 초기 컨셉은 치트엔진의 오토 어셈블과 동일하게 ARM 어셈블리어를 삽입하도록 만드려고 하였으나,

어려운 어셈블리어를 직접 짤 필요가 없이 쉽게 후킹이 가능한 Frida 라는 강력한 후킹 프레임워크가 존재합니다.

그렇기 때문에 훅 헬퍼는 초보자들도 쉽게 사용할 수 있으며, 동적으로 빠르게 확인이 필요한 작업에 용이하도록 개발 컨셉을 변경하였습니다.

UI에서 단순 버튼 클릭 몇번으로 쉽게 후킹할 수 있습니다.


조건문이 필요한 복잡한 후킹 포인트는 Frida 를 사용하고,

빠르게 단순한 인자 확인 및 변경이 필요한 포인트 또는 동적확인 용도는 Hook Helper 기능을 사용하시면 됩니다.


사용 방법


이전 강좌인 "린엔진 튜토리얼 - IL2CPP 분석"에서 타겟 앱이었던 "Roguelike RPG Offline"이라는 싱글 RPG 게임을 대상으로 진행하겠습니다.


ce0f14ade00c9a94c15b826654034802_1575039468_1959.png


1. 이전 강좌와 동일하게 앱을 어태치한 뒤, View -> Hook Helper 를 클릭하여 훅 헬퍼창을 오픈합니다.


ce0f14ade00c9a94c15b826654034802_1575040779_2026.png
 

2. 가장 먼저 Interceptor 타입의 훅을 사용하여 리턴되는 값을 가로채서 확인해보도록 하겠습니다.

우선 Hook Helper 창에서 오른쪽에 Add를 클릭한 뒤 Dialog에 위와 같이 입력합니다.


FileName : 후킹할 타겟의 SO 이름을 적어주시면 됩니다.

Symbol Name : 해당 SO의 후킹할 심볼을 입력하면 되며, 심볼이 없거나 오프셋을 더하여 후킹할 경우에는 Set Offset을 체크하고 값을 적어주시면 됩니다.

Type : 후킹할 타입 지정이 가능합니다. 

중간에 있는 Add 버튼 : 인자의 개수를 늘릴 수 있으며, 인자 타입을 선택 및 인자값 변경이 가능합니다.

RET : 리턴되는 값의 타입 및 교체될 값을 지정합니다.


FileName에는 libil2cpp.so 를 입력합니다.

libil2cpp.so의 심볼은 모두 제거되었기 때문에 해당 오프셋을 Symbol Name에 입력하고 Set Offset에 체크하면 됩니다.

이전 강좌에서 분석했던 함수인 get_Health()offset 값인 0xD3AFE8을 입력합니다. (16진수 입력) 

 -> public int get_Health(); // RVA: 0xD3AFE8 Offset: 0xD3AFE8  

Type은 Interceptor를 선택합니다.

RET에는 리턴되는 값이 int 타입이기 때문에 %d를 선택합니다.

이렇게 후킹하게 되면 리턴되는 값을 가로챌 수 있습니다.


ce0f14ade00c9a94c15b826654034802_1575041153_0601.PNG
 

3. 후킹테이블이 등록되고 등록된 행의 가장 오른쪽에 존재하는 Status가 빨간 글씨의 "HOOK SUCCESS"로 변경되었다면 후킹에 성공한 상태입니다.


ce0f14ade00c9a94c15b826654034802_1575040570_9563.png
 

4. 실제 몬스터와 전투시 get_Health() 함수의 반환값이 Log에 기록되는것을 확인할 수 있습니다.

Detail에서 "===> (634)"는 리턴되는 값이 634를 뜻합니다.

해당 함수를 가로채서 실제 체력값을 리턴하는것을 확인했으니 리턴되는값을 변경시키도록 해보겠습니다.


ce0f14ade00c9a94c15b826654034802_1575041302_5656.png
 

5. 리턴값을 변경하기 전 해당 함수는 이미 후킹이 되어 있기 때문에 우선 후킹을 해제해야 합니다.

해당 행을 클릭하고 오른쪽에 Delete 버튼을 클릭하여 후킹을 해제시킵니다.


ce0f14ade00c9a94c15b826654034802_1575039978_373.png
 

6. Hook Helper 창에서 다시 Add 버튼을 클릭하여 Replace 타입을 선택하면 리턴되는 값 또는 인자값을 변경할 수 있습니다.

dialog에 위와 같이 동일하게 작성합니다.

Type은 Replace을 선택한 뒤 리턴될 값을 "12345"로 변경합니다.

이렇게 후킹하게 되면 리턴되는 값을 "12345"로 변경하여 반환하게 됩니다.


ce0f14ade00c9a94c15b826654034802_1575040240_1724.png
 

7. 후킹테이블이 등록되고 등록된 행의 가장 오른쪽에 존재하는 Status가 빨간 글씨의 "HOOK SUCCESS"로 변경되었다면 후킹에 성공한 상태입니다.


ce0f14ade00c9a94c15b826654034802_1575040422_865.png
 

8. 게임으로 돌아가서 확인을 해보면 체력값이 12345 값으로 고정되어 피가 감소되지 않는 모습을 확인할 수 있습니다.


ce0f14ade00c9a94c15b826654034802_1575042701_6117.png
 

9. 후킹테이블은 로드/세이브 기능도 제공합니다.

앱을 종료한 뒤 등록되었던 행을 더블클릭하여 "Loop Until found" 체크박스에 체크한 뒤에 OK를 눌러 다시 저장합니다.

Loop Until found - 해당 라이브러리가 로드되지 않았을 경우 로드될 때 까지 기다린뒤에 후킹하는 옵션입니다. 

Hook Helper 창 왼쪽 상단에 File을 눌러 save를 클릭하여 저장이 가능하며, open하고 앱을 다시 실행하면 자동으로 후킹됩니다.



55 Comments
1 버퍼오버플로우 2019.11.30 01:07  
와..ㅋㅋㅋ 이건 진짜 너무 편리하네요
13 백형이 2019.11.30 12:16  
와우!!! 진짜 좋네요 ㅋㅋㅋ
4 wjddn 2019.11.30 16:45  
오 멋지네요 ㅎㅎ
2 masu 2019.12.06 02:20  
최고입니다
2 어이가차 2020.01.01 23:27  
감사합니다
1 Lr라 2020.01.04 20:57  
호.....신기하네요
3 야스오는과학자 2020.01.05 15:46  
오호 신기하네요~
3 야스오는과학자 2020.01.05 15:46  
오호 신기하네요~
2 우아앙아 2020.01.05 23:01  
와; 대박입니다
15 사딸라 2020.01.07 09:44  
대박입니다....
3 eiruty 2020.01.17 14:42  
감사합니다
1 이욜 2020.03.06 22:42  
감사합니다!

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

4 빛둘기 2020.03.07 10:53  
감사합니다 ㅎㅎ
9 지니니 2020.03.13 19:47  
이해되는 그날까지 =_=..
S Dhhd 2020.03.13 21:20  
어려우면 제가도와드리죠 연락주세요
https://open.kakao.com/me/Dhhd
1 orrra 2020.03.17 21:07  
감사합니다
1 란란루 2020.03.19 02:34  
정말 좋은 프로그램입니다
1 llLin 2020.03.27 21:00  
마술이네요!! 정말 멋져요!
2 kalhintz 2020.03.28 23:40  
감사합니다 잘보고갑니다 유익하네요
3 92bulldozer 2020.04.12 16:07  
최곱니다!!!!
2 skazh 2020.04.12 20:30  
감사합니다
2 mandalake 2020.04.12 22:31  
감사합니다 연습해보겠습니다
1 derelikt 2020.04.29 21:04  
와 프리다랑 같이 쓰면 진짜 강력한 툴이네요 감사합니다
2 ranie 2020.05.17 02:49  
감사합니다
1 노을 2020.05.18 16:19  
공부해야할게 많군요 ^^*
1 7days 2020.05.27 04:44  
열심히 배워봐야겠네요 ^^
1 바커스 2020.06.04 20:27  
신세계..
1 Chance 2020.06.05 02:19  
Nice tutorial for hook
1 오늘도도젼 2020.06.05 10:14  
감사합니다.
1 saevom 2020.08.07 23:25  
정말 좋은 프로그램입니다
1 hyuns 2020.08.11 21:58  
이건 무슨 치트엔진급으로 간단하게 해버리는군요.. 정말 좋은 프로그램이네요;
1 개도둑 2020.08.12 00:35  
어허 써보고싶다..
1 업복이 2020.08.14 23:01  
잘 배우고 갑니다
1 homoso 2020.08.14 23:12  
열심히 해봐야겠네요
1 hmmm 2020.08.24 22:33  
배우고 갑니다
1 이시작 2020.08.29 23:48  
감사합니다
1 미니 2020.09.01 22:57  
감사합니다~
1 유미린 2020.09.18 14:48  
감사합니다~~
1 애교만땅 2020.10.17 14:11  
빨라해보고싶어요 ㅠㅠ
1 herial 2020.10.24 17:41  
완전신기하네요 ㅎㅎ
2 린개굴 2020.11.08 21:50  
감사합니당~
2 독고진 2020.11.16 03:49  
초대박입니다
1 라이니티 2020.11.19 10:27  
감사합니다~!!
2 형356 2020.12.07 10:30  
설명 감사합니다 이해되기쉽네요.
1 stwekr20 2020.12.24 14:26  
진짜이거만든사람..칭찬해/
1 콜로서스 2020.12.28 02:59  
감사합니다 잘보고갑니다 유익하네요
1 공유칭 01.16 22:20  
설명 감사합니다 이해되기쉽네요.
2 nz3ro 01.23 17:50  
감사합니다
1 RAIDME 01.30 13:52  
감사합니다
1 지식흡수중 02.14 13:54  
감사합니다. 배워갑니다

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

1 justhave 02.18 22:28  
감사합니다
1 곤뇽 03.07 21:29  
감사합니다
1 Shin1004 03.18 23:25  
감사합니다~
2 낙화유수 04.06 22:50  
감사합니다 ^^
1 Aabbcc 04.07 23:44  
잘보고갑니다