저번에 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하는 주요 함수만 확인해보면
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 |