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

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

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

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

M LIN 87 17850 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하고 앱을 다시 실행하면 자동으로 후킹됩니다.



87 Comments
1 버퍼오버플로우 2019.11.30 01:07  
와..ㅋㅋㅋ 이건 진짜 너무 편리하네요
13 백형이 2019.11.30 12:16  
와우!!! 진짜 좋네요 ㅋㅋㅋ
5 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  
와; 대박입니다
28 사딸라 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  
열심히 해봐야겠네요
2 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  
빨라해보고싶어요 ㅠㅠ
2 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 공유칭 2021.01.16 22:20  
설명 감사합니다 이해되기쉽네요.
2 nz3ro 2021.01.23 17:50  
감사합니다
1 RAIDME 2021.01.30 13:52  
감사합니다
1 지식흡수중 2021.02.14 13:54  
감사합니다. 배워갑니다

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

1 justhave 2021.02.18 22:28  
감사합니다
1 곤뇽 2021.03.07 21:29  
감사합니다
1 Shin1004 2021.03.18 23:25  
감사합니다~
2 낙화유수 2021.04.06 22:50  
감사합니다 ^^
1 Aabbcc 2021.04.07 23:44  
잘보고갑니다
3 Jaedy 2021.05.16 23:30  
잘보고갑니다~
1 공부 2021.06.19 10:13  
감사합니다
3 o다람쥐o 2021.07.14 22:23  
우와... 천천히 10번정도 읽고하니,, 어느정도 보이네요 +_+
하지만,, 완벽히 이해는 못했지만,,, 100% 이해하기 위해 열심히 공부해보겠습니다.
자세한 강의 감사합니다!
1 zelddde04 2021.07.28 16:58  
감사합니다 :)
1 Goninini 2021.08.10 12:15  
오.. 좋은자료 감사합니다
1 moon12 2021.08.15 19:13  
감사합니다
1 moon12 2021.08.15 19:14  
이해가 잘되네요
1 심해 2021.08.16 10:47  
감사합니다
3 굿모닝 2021.08.25 05:26  
빨리 실행해 보고 싶군요.
1 백봉지 2021.09.03 05:21  
와...해볼려하니...잘모르겠어요........
1 백봉지 2021.09.04 01:33  
후킹까지 성공했는데 Log 창을 눌러보니 아무것도 없는 공백이네요? 어떻게 해야하나요 이럴떈?
1 sdas323 2021.12.14 06:15  
유익하네요 감사합니다
1 Barr 2021.12.17 02:06  
감사합니다
1 토템 2022.01.01 02:18  
감사합니다
1 HG17 2022.01.26 11:13  
감사합니다!
1 뭘바여ㅠㅠ 2022.02.05 14:27  
새해 복 많이 받으세요!
1 sakfbhniuqgwbfi… 2022.02.17 19:16  
감사합니다.
1 아석 2022.03.18 14:30  
어릴 때 치트 엔진으로 크레이지 아케이드 루찌 수정하던 기억이 나네요
1 rhrnak 2022.05.14 01:26  
감사합니다 :)
1 rhrnak 2022.05.14 01:27  
감사합니다 :)

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

1 아리에리 2022.06.11 03:38  
좋은정보 감사합니다 ㅎㅎ
1 김뱅기 2022.06.11 16:04  
와우감사합니다
1 바쯔캄 2022.06.12 13:10  
감사합니다 :)
1 뽈롱 2022.06.16 02:09  
감사합니다

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

1 YUUTAY 2022.09.17 01:47  
감사합니다
1 패트릭 2022.09.21 17:30  
감사합니다
1 빈이 2022.09.24 08:27  
이제 배우고있는데 좋은 기능들이 많네요 감사합니다
1 열혈액션가면 2022.12.05 17:14  
감사합니다.
1 qwer135 2023.01.15 16:05  
감사합니다 :)
1 김키 2023.02.01 20:25  
훅헬퍼정말좋네요감사합니다
1 kklngkang 2023.03.19 05:19  
항상 감사합니다
1 봉달샘123 01.22 20:53  
대박이네요.....와우