유니티 tweak 만들기
저번에는 모 게임의 서명 값 확인하는 함수의 결과 값을 바이너리로 변경을 해보았습니다.
저번 강좌의 링크입니다. http://linforum.kr/bbs/board.php?bo_table=ios&wr_id=15
아래와 같이 dump 파일에 함수 정보가 있었죠...
private bool CheckSignature(string fileName); // RVA: 0x1024B1F7C Offset: 0x24B1F7C
자 ~ 이제 이 함수를 후킹하는 방법에 대하여 설명드리겠습니다.
일단 zzanghacker님이 올려주신 theos를 설치합니다.
링크는 >> http://linforum.kr/bbs/board.php?bo_table=ios&wr_id=36
설치가 완료되면 Tweak 프로젝트를 생성하고 tweak.x에 후킹 코드를 작성을 합니다.
작성하는 방법에 대해서 설명하겠습니다.
저번에 바이너리 변조를 하였듯이 무조건 true로 넘겨줘야 합니다
int (*old_function)(void); // 앱에서 CheckSignature 호출시 제가 만든 my_CheckSignature가 호출됩니다. bool my_CheckSignatrue()
{return true; // 무조건 true로 넘겨줍니다. } // %ctor 앱 실행시 hook %ctor { @autoreleasepool {
// _dyld_get_image_vmaddr_slide(0) 메모리 주소를 가져옵니다. 인자가 0일 경우 앱의 시작 부분의 메모리 주소를 가져옵니다.
// 위에 CheckSignature 함수의 RVA 값을 더 해줍니다. unsignedlong targetAddress = _dyld_get_image_vmaddr_slide(0) + 0x1024B1F7C; // 변수에 담아주세요 ^^ MSHookFunction((void *)targetAddress, (void *)&my_CheckSignatrue, (void **)&old_function); // 후킹을 합니다. // MSHookFunction 정보는 >> http://www.cydiasubstrate.com/api/c/MSHookFunction/ 이곳에서 확인해주세요~! } }
그리고 make packge 후 deb 파일이 생깁니다. 그것을 iFile을 통해 설치를 합니다.
여기서 theos에서 ip를 설정하실 수 있는데요. 설정을 해주면 바로 설치도 가능합니다.
설치 명령어는 make package install 입니다.