[피카츄배구 리버싱] 2

저번에 401297번지까지 봤습니다. 그 이후 부분입니다.



인자 12개(0,"MAIN",0x411038, 0xCF0000,??,0,0,"IDI_PIKAICON","IDR_MENU1",0,0,1)를 넣고 sub_4075C0을 CALL합니다. sub_4075C0 안으로 들어가봅니다.



LoadCursorA, LoadMenuA, RegisterClassA, CreateWindowExA 등을 호출합니다. 커서, 메뉴를 지정하고 창을 만드는 것으로 볼 수 있겠네요. 매개변수가 12개(0,"MAIN",0x411038, 0xCF0000,??,0,0,"IDI_PIKAICON","IDR_MENU1",0,0,1)이고 계속 꺼내쓰는데 이렇게 보면 너무 가독성이 떨어져서 IDA로 깔끔하게 확인해보면

CALL하는 주요 함수만 확인해보면
v16 = LoadCursorA(hInstance, 0x7F00); 이 됩니다. 0x7F00은 IDC_ARROW입니다. 아마 기본 화살표인 것 같네요.



v17 = LoadIconA(hInstance, "IDI_PIKAICON"); 입니다. 정황상 리소스를 읽어들여 아이콘을 불러오는 것 같은데, 정확히 어떤식으로 돌아가는지는 조금 더 알아봐야할 것 같습니다.



또한 a11이 0이므로 GetStockObject(0)이 실행됩니다. 찾아봤는데 그닥 중요한 함수는 아닌 것으로 보입니다. 오브젝트를 캔버스에 그릴 때 하얀색으로 그리겠다 뭐 그런 함수입니다.



그리고나서 LoadMenuA(hInstance, "IDR_MENU1")을 수행하고



최종적으로 CreateWindowExA를 실행합니다. 무려 인자로 12개가 들어가네요.



이 때 lpWindowName 값인 0x411038이 실제 파일에서 어디에 해당하는지를 알아야하는데 일단 ImageBase는 0x400000이고



0x411038 - 0x400000 = 0x11038은 data 영역에 해당하고, data 영역의 rawoffset은 0xF200이므로



File Offset의 0xF238에 대응됩니다.



파일에서 0xF238번지를 확인하면 아래와 같습니다.



정말 먼 길을 돌아왔네요. 이제 이 부분의 내용을 수정하면 프로그램 창의 제목을 수정할 수 있습니다.



CreateWindowExA의 다른 인자의 역할, 메뉴 제목 수정 등을 다음에 이어서 하겠습니다.



'컴퓨터과학 > 리버싱' 카테고리의 다른 글

[피카츄배구 리버싱] 7  (0) 2018.03.11
[피카츄배구 리버싱] 6  (0) 2018.03.11
[피카츄배구 리버싱] 5  (0) 2018.03.11
[피카츄배구 리버싱] 4  (0) 2018.03.10
[피카츄배구 리버싱] 3  (0) 2018.03.10
[피카츄배구 리버싱] 1  (3) 2018.03.10
  Comments