매우 간단한 예제니 중요한 부분만 집고 넘어가자.





체크 버튼을 눌렀을 때 실행되는 루틴인데 메모리상에 그려진 비트맵과 리소스로 읽어들인 비트맵을 비교하는 루틴이다.


처음엔 이 루틴을 넘어가면 해결이 되는 건가 싶었으나, 루틴을 통과해도 프로그램에는 아무런 변화가 없다.


해서, 해답 키는 리소스 안에 그려져 있을 거라는 생각이 들었다.


처음엔 리소스내용을 프로그램에 띄어볼까 했는데 코드 인젝션까지 하는 건 너무 번거로운 작업이 될 것 같아 리소스 데이터만 추출하기로 했다.


먼저 헥스에디터로 bmp 파일 헤더와 이미지 헤더를 복사해 넣고 리소스 데이터를  뒷부분에 넣어준다. 



방금 그림판이 만들어낸 비트맵 헤더다.

42 4D - BM (비트맵 파일 헤더의 첫 시작 PE 포맷의 PE와 같은 의미다.)

36 B8 0B 00 (헤더까지 합친 파일의 총 크기, 비트맵을 복원할땐 사용되지 않는다.)

00 00 (예약)

00 00 (예약)

36 00 00 00 (실제 이미지 데이터의 시작 오프셋)

28 00 00 00 (이미지 헤더의 크기)

80 02 00 00 ->  Width 값

90 01 00 00 ->  Height 값

01 00 18 00 00 00 00 00 00 B8 0B 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00 00


이 헤더를 그대로 쓰면 이미지를 불러올수 없으니 Width 와 Height 를 수정하자 


80 02 00 00 -> C8 00 00 00 (ImagePrc에서 사용하는 이미지 Width)

90 01 00 00 -> 96 00 00 00 (ImagePrc에서 사용하는 이미지 Height)


헤더 수정이 끝나면 리소스에서 긁어온 이미지 데이터를 헤더 뒤에 붙여넣자.


그럼 정상적으로 bmp 이미지를 불러올 수 있고


그곳엔 키 값이 적혀있다.




'취미 > WarGame' 카테고리의 다른 글

[reversing.kr] Ransomware  (0) 2015.02.24
[reversing.kr] Direct3D FPS  (1) 2015.02.24
[reversing.kr] Position  (0) 2013.10.30
[reversing.kr] replace  (0) 2013.10.25
[reversing.kr] Easy_UnpackMe  (0) 2013.10.24
Posted by $Zero
: