[리버싱] 메모장 시간/날짜 표시 순서 변경
메모장을 유용하게 사용 할 때가 있었다. 윈도우 기본 메모장에는 f5키를 누르면 날짜와 현재 시간을 찍어 출력해주는데, 순서가 불편했다. 오후 4:13 2020-01-24 이런 식으로, 날짜가 뒤에 나오는 것이 불편하여 호기심에 이걸 바꿔보고 싶어 리버싱을 시작했다. x32dbg로 열어, 함수 목록을 찾아보았다. f5를 눌렀을 때 시간 정보를 가져오니까 Get가 써진 함수중에 time이 붙은 함수가 있길래 bp걸고f5를 눌렀더니 멈췄다. 이 곳이 f5를 눌렀을 때의 이벤트 핸들러 함수가 있는 장소라고 생각했다. 함수를 쭉 둘러보고 몇 번 실행해 보며 관찰했다. 함수가 끝나는 부분 전에 핸들러의 edit박스를 수정하는 함수를 호출하고, 마무리짓고 끝낸다. 그리고 그 위를 보면 반복해서 뭘 호출하는데, 저 호출하는 함수가 문자열을 잇는 함수더라. 반복해서 나오는 ebp-338의 공간은 memset함수를 호출하고 난 뒤 빈 공간이 되는 것을 볼 수 있다. 할당된 메모리의 주소임을 알 수 있고, 위에서 반복해서 호출하는 것을 보아 저 주소에 시간 정보들을 복사할 것이다. 함수를 보면 차례로 GetLocalTime함수와, GetDateFormatW, GetTimeFormatW를 호출하는데, 뒤의 두 개는 무시해보고서라도 localtime을 먼저 호출하여 구하는 것 자체가 먼저 시간을 구했다는 것을 유추할 수 있다. 그리고 이 부분을 자세히 보면, ebp-338을 반복적으로 사용하는데 다른 주소의 인자를 같은 순서에 따라 두 번 넣는 것을 볼 수 있다. ebp-a4와, ebp-3d8이다. ebp-a4와 ebp-3d8이 참조하는 주소에는 시간 정보와 날짜 정보가 담긴 구조체나 텍스트 데이터가 저장될 것이다. 저 코드가 담긴 위치의 ebp-a4와 ebp-3d8을 반대로 수정하면 어떻게 될까. 아마도 날짜 텍스트가 먼저 ebp-338의 주소에 적히지 않을까? 바로 수정해 보았다. 명령어의...