린엔진 튜토리얼 - 훅 헬퍼(Hook Helper)

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

린엔진 튜토리얼 - 훅 헬퍼(Hook Helper)

M LIN 119 17433 6

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


Hook Helper?


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


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

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

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

Hook Helper는 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하고 앱을 다시 실행하면 자동으로 후킹됩니다.




* 악용은 삼가 부탁드리며, 보안 검수 및 모의해킹 용도로 사용 부탁드립니다.

게임뿐만 아니라 ART 후킹, libc 후킹 등 활용 방안은 무궁무진합니다.

119 Comments
8 아수라발발이 2019.11.30 19:00  
2번까지는.. 3번부터 hook success가 안되네요 ㅠㅠ
/린엔진 시작시,인스톨을 안했네요 인스톨하고 해결완료!
8 아수라발발이 2019.11.30 19:28  
진짜 신세계!! 린님 외계인이 납치해서 고문하신거 아니죠?
9 단향 2019.11.30 19:57  
린님이 외계인일수도 있습니다...
1 버퍼오버플로우 2019.11.30 20:24  
린엔진만의 시그니처 기능이 추가된것 같네요ㄷㄷㄷㄷ
고생하셧습니다.
30 vk2v 2019.12.01 00:20  
항상 좋은자료 감사합니다~ ㅎㅎ
20 dldldl 2019.12.02 14:09  
이번엔 또 어떤 외계인을 고문하셨습니까. 이제 그만 우주의 비밀을 알려주시죠?
11 creater 2019.12.03 12:42  
정말 멋진 기능이네요!!
1 Nickel 2019.12.03 20:14  
고생많으셨습니다
1 또리쓰마 2019.12.03 21:40  
감사합니다 잘보겠습니다!!
5 파파엄마 2019.12.04 08:23  
이렇게 쓰는 거였군요!! 감동이에요~~~
2 masu 2019.12.04 13:50  
좋은자료 감사합니다
2 95grit 2019.12.06 23:40  
좋은 자료 감사합니다.
4 신사 2019.12.07 01:59  
오 항상감사합니다 ~~
S 코드몽키 2019.12.08 04:16  
간절히 원하면 우주가 나서 도와준다
1 초이스 2019.12.08 11:55  
좋은 정보 감사합니다

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

1 dkssud12 2019.12.08 20:28  
감사합니다 !
4 py0zz1 2019.12.09 01:51  
좋은 자료 감사합니다.
3 dlsrks12 2019.12.09 08:13  
좋은 자료 감사합니다
2 모모앱 2019.12.09 22:02  
많이배우거갑니당 ㅎㅎㅎㄴㅇ
2 리리 2019.12.10 00:06  
잘배우고 갑니닿ㅎ

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

2 기탄 2019.12.10 14:40  
잘 배우고 갑니다 감사해요
12 모야모야 2019.12.10 15:06  
와 너무 잘하시네용
2 벌레 2019.12.11 14:45  
오.. 잘사용해보겠습니다!
2 빙굴 2019.12.12 07:45  
좋은 강의 감사합니다
2 mineismine 2019.12.13 14:05  
감사합니다.
2 이영욱 2019.12.15 12:31  
감사합니다
1 고기찬가 2019.12.16 09:45  
공부가 좀 필요하겠네요!
1 alsdyd34 2019.12.16 16:57  
감사합니다
4 순수어린이 2019.12.17 14:13  
ㅜㅜ 열심히 하겠습니다.
9 scent2d 2019.12.17 14:55  
감사합니다
4 김흑화 2019.12.19 14:16  
감사합니다.
2 지나가는공돌이 2019.12.22 22:56  
우와 감사합니다!~!
3 초코몽 2019.12.24 04:44  
배울게 너무 많네요 ㅜㅜ
1 핵곤 2019.12.24 16:25  
많이 배우고 갑니다.
1 rafael 2019.12.28 12:36  
감사합니다
3 OwNeD 2019.12.31 11:02  
좋은 기능이 너무 많네요 !
1 구구긍 2020.01.01 03:07  
꼭 필요한 기능이었는데 감사합니다!
2 djucd 2020.01.01 04:48  
감사합니다
1 경민 2020.01.05 22:52  
와;; 대단하십니다 진짜 ㅋㅋㅋㅋ
2 우아앙아 2020.01.05 23:06  
이런 기능을 가진게 무료배포라니..
1 ab1313 2020.01.06 09:49  
감사합니다
28 사딸라 2020.01.07 08:23  
이런게 무료라니 ㄷㄷㄷ
3 나나야 2020.01.07 18:16  
무료 기능이 맞나 의심스러울 정도
13 Rohas 2020.01.09 16:11  
무료라니;;
3 wontang 2020.01.12 11:42  
좋은 자료 감사합니다
1 제온 2020.01.14 18:42  
감사합니다!
12 모야모야 2020.01.15 20:14  
린님 이 기능은 유니티외에도 COCOS에도 가능한건가요?
M LIN 2020.01.16 09:34  
넵, 모든 네이티브 라이브러리에서 사용이 가능합니다.
3 제비올 2020.01.17 22:24  
환상적입니다!!!
4 알려주세요오 2020.01.20 19:18  
선생님 이게  타겟이 되는 메소드에서 리턴값의 값자체를 바꿔버리는건데 이거 메모리 변조를 하는거랑

탐지측면에서 큰 차이가 있을까요. 결국 서버사이드에서 값처리하면 이러한 후킹 방법도 탐지되는것아닌가요

다만 메모리 변조는 패킷자체에서 오류검출을 하는지 안하는지는 모르겠는데.

이게 탐지측면에서 메모리변조랑 다른점이 뭔지를 모르겠습니당.
1 후움 2020.01.27 23:39  
어렵군요...좀더 공부해야할듯
1 sdw93 2020.02.07 21:51  
아직 잘 모르겟찌만 감사합니다
4 엘라로즈 2020.02.27 10:36  
친절한 예시 설명 감사합니다 :)
2 호랑이쿨광 2020.03.09 06:02  
좋은정보 감사합니다~!
1 H4N2 2020.03.18 02:15  
린엔진은 훅 기능이 대박이네요. 감사합니다
1 dhfj 2020.03.19 21:47  
감사합니다 !
5 다올 2020.03.30 18:49  
좋은자료 감사합니다
2 링딩돔 2020.04.02 10:23  
댓글내용 확인
7 래바리 2020.04.03 18:32  
감사합니다.
2 mandalake 2020.04.11 23:12  
감사합니다 잘 배워갑니다
2 FOREVER 2020.04.13 00:42  
좋은 자료 넘 감사합니다.
2 rjsejrrjsejr 2020.04.16 05:30  
진짜 좋은 기능입니다
2 다큰아이 2020.04.22 14:13  
공부를 많이 해봐야 알겠지만 좋은 프로그램인것 같아용!

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

10 총각미남 2020.05.16 14:10  
진짜 감사합니다~!
1 레어메드 2020.05.16 18:05  
좋은정보 감사합니다.
1 돠니 2020.05.17 21:28  
감사합니다
1 stuw 2020.05.19 17:17  
공부 많이해야겠네요...ㅎ
1 133144255 2020.05.30 16:04  
감사합니다. 고생하셨습니다.
3 애교낭자 2020.06.17 20:52  
아직 포인트가 안되어 강좌 눈팅만 하지만 나중에 꼭 직접 해보겠습니다
2 Curry 2020.06.24 05:44  
정말 능력자 이신거 같아요... 초보는 잘 보고 공부 하겠습니다!
3 존주 2020.07.20 18:59  
와 정말 대단합니다......
1 KK102 2020.07.23 11:01  
감사합니다
1 파자니지 2020.07.26 03:19  
도대체 어떻게 만드신거죠.. 와 진짜 미쳤넹
1 용사장 2020.07.30 06:23  
대단하십니다..
1 권도 2020.08.07 14:27  
열독중입니다
4 쿨록 2020.08.07 18:55  
와 대단하시네요
1 dkoasdko 2020.08.16 01:00  
잘 배우고 갑니다 감사해요
1 오로치 2020.09.13 07:38  
잘 배우고 갑니다 고마워요
2 붉은앙마 2020.09.13 07:44  
자세한 설명 감사합니다.
2 호랑이쿨광 2020.09.28 01:06  
잘 배우고 갑니다.
1 이슬비 2020.10.07 11:56  
환상적입니다!!!
2 코몽수강생1 2020.10.16 23:17  
잘배우고 갑니다 ㅎㅎ
2 herial 2020.10.24 17:31  
좋은 자료감사합니다
2 키랏 2020.11.10 15:27  
정말 대단하시네요.. 감사합니다!
1 마루 2020.11.10 20:22  
잘 배우고 갑니다!
1 ChicChoc 2020.11.13 18:12  
감사합니다
1 은이 2020.11.13 21:08  
감사합니다
1 레로 2020.11.30 14:16  
잘 쓰겠습니다.
1 NatBad 2020.12.28 15:18  
무료배포 및 설명 너무 감사합니다 ㅎㅎ
1 weststarqp 2021.01.07 14:55  
감사합니다
1 drei6 2021.02.09 05:42  
감사합니다
2 iank 2021.02.09 15:13  
후킹은 됐는데 로그에 기록이 남지않는 것은 왜 그런걸까요?
1 티티티포 2021.02.14 04:49  
Wow...능력자 그자체
1 Jen2 2021.02.17 16:43  
와우 좋은자료 감사합니다
1 lucider 2021.03.04 14:07  
좋은 강좌 감사합니다
1 둥딩 2021.03.06 20:33  
와 강좌 감사합니당
1 바보교주 2021.03.13 00:39  
좋은 강좌 감사합니다
1 dGVzdA 2021.03.21 19:47  
좋은 강의 감사합니다.
1 마휘핑 2021.03.24 10:07  
엄청난 기능을 내장하고 있네요
1 유리바다 2021.04.01 02:33  
감사합니다.
1 Kimless 2021.04.10 22:26  
감사합니다
1 동창회 2021.05.01 21:22  
감사합니다
1 dowhatuwannado 2021.06.14 06:46  
감사합니다
2 공적1 2021.09.06 03:05  
감사합니다~
3 Shdlem 2021.10.14 11:15  
감사합니다
1 그러하다 2021.10.29 01:25  
감사합니다 자세한설명 ^^!
3 asdafjo 2022.02.01 17:53  
이거 보고 사용법 배워갑니다!
1 chraks 2022.03.28 02:25  
감사합니다아
2 basak2 2022.05.10 22:51  
엄청난 정보 ㄷㄷ 감사합니다
1 dnsy01 2022.07.12 23:04  
이해하기 쉽게 설명 잘 해주셔서 감사합니다
1 miel 2022.08.17 16:24  
설명 잘 보았습니다..
1 배워서남줘야지 2023.02.23 12:41  
초보라 잘은 모르지만 열심히 배우겠습니다. 감사합니다.
1 부엉이 2023.03.30 05:03  
감사합니다
1 woong4025 2023.03.31 09:58  
좋은자료 감사합니다.
1 richardson 2023.05.24 00:41  
tranks
1 1159pm 2023.05.24 00:59  
thanks
1 음야 2023.07.28 10:40  
감사합니다
1 불량벌레 2023.08.17 17:08  
감사합니다.
2 린풔 2023.09.19 22:56  
와 좋은 기능 대박입니다.