ImagePrc

ImagePrc 의 Check 버튼을 눌렀을 때 다음과 같은 화면이 나타난다.
일단 저 팝업메시지가 나오는 부분을 기준으로 관찰해보도록 하자.
Wrong 이라는 문자열을 검색했다.
지금 Breakpoint 가 걸린 부분에서 MessageBoxA를 호출하면 바로 해당 메시지가 나온다.
즉 여기로 오지 않게 하는게 첫번째 목표다.
0x4013AA에서 문자열들을 Push 하는 영역으로 보내주는데, 이 부분에서 분기하지 않도록 해줘야한다.
0x4013AA에서의 JNE 조건을 보면 dl과 bl이 같아야 들어가는 것을 알 수 있다.
비교 구문 위에서
dl 에 ecx 주소가 가르키는 값을 넣어주고(5660048)
bl에 eax+ecx 주소가 가르키는 값을 넣어준다. (10047E060) 이 값은 결론적으로 eax값을 가르키게 된다. 근데 ecx가 밑에서 1씩 계속 증가하니까,
결론적인 부분을 이야기하자면 원래의 esi와 eax 영역을 비교하는데, 0x15F90만큼 비교한다. 해당 영역의 메모리를 복사를 해서 새로운 파일로 저장했다.
bitmapimage
87.9KB
일단 그림을 그릴수 있다는 점, 비트맵같은 형식으로 저장된다는 점에서 비트맵 이미지인거 같은데, 한번 알아보자 그 전에 사진 프레임을 알아야 변환을 할 수 있을거 같은데, 이건 처음에 생성할때를 보거나, 전체 길이가 90000 인 점에서 RGB가 세트일 때 30000 의 해상도 값 을 가질 것이고, 대충 3:4 비율로 보이는데, 150(세로)* 200(가로) 정도로 생각하면 될 듯 하다.
저 비트열을 사진으로 바꾸는 코드는 아래와 같다.
import cv2 import numpy as np from PIL import Image file = open('bitmapimage.bmp','rb') data = bytearray(file.read()) image=[] for i in range(0,150): col=[] for j in range(0,200): row=[] for k in range(0,3): tmp = ((200*(149-i))+(j))*3 row.append(data[tmp + k]) col.append(row) image.append(col) image = np.array(image,dtype=np.uint8) cv2.imshow("HI",image) cv2.waitKey() cv2.destroyAllWindows()
Python
답은 GOT 이다