내가 정보보호학과에 발을 들이게 된 이유를 간략하게 설명하자면...
이 추억의 게임을 하고 싶었는데, 서버가 닫혀서 플레이가 불가능했다. 앱개발 지식이 있던 때에 저걸 뜯어봤는데, 도저히 안되더라. 그래서 찾아보니까 .so 파일을 수정해야될 것 같은데, 당시에는 이게 뭔지도 몰랐고 이걸 볼려면 ida 가 있는게 좋다고 했다. 근데 ida 는 대학교 동아리에서 준다고 해서...
어쨌든 이 게임을 패치하기 위해서 보안공부를 시작했다고 봐도 된다.
하지만 이제 충분한 지식과 경험이 있다. 시작해보자.
위 그림에서 확인버튼을 눌러도 아무런 반응이 없다. 그리고 내가 몇년전의 삽질로 안것은 java 단에서는 이를 활성화 시킬 수 없다는 것이다.
로그캣 로그를 보면 막 이렇게 로그인 실패라고 뜬다.
하지만 저건 자바단에서 출력하는 로그고 우리는 네이티브에서 출력하는 로그를 집중해서 봐야한다.
Game Start 외의 다른 기능들은 정상작동 하기 때문에 옵션같은 메뉴를 들어가면 이런 로그가 뜬다.
이걸 검색해서 ida 에서 찾고 주변 함수들을 뒤져보니까 이런놈이 있었다.
딱봐도 게임 시작할때 쓰이는 놈 같았다. 그래서 무지성으로 얘를 그냥 호출하게 해줬는데 안되더라.
그래서 좀더 뒤져봤다.
저 dword_26A758 이 0 인경우 start_init 이 호출되는데, 이걸 0으로 하고 호출되면 될거라고 생각했다.
아래 else if 는 도움말 버튼을 눌렀을 때 실행되는 코드인데(동적 디버깅으로 알았다) 저기서 dword_26a758 = 0 으로 세팅하고 start_init 을 호출해봤다. 아래처럼
와 ! 된다!
저 창이 계속 떠서 거슬리긴 한데, 저건 그냥 smali 조금 수정해서 builder 가 build 를 안하게 설정하면 된다.