기본 콘텐츠로 건너뛰기

lena-tutorial-1

lena tutorial 1, 2

lena tutorial은 리버스 엔지니어링을 연습하기 좋은 문제들로 구성되어 있어 많은 학습자들이 애용하는 자료이다.

튜토리얼을 실행하면 Evaluation period out of date. Purchase new license 메시지 창이 실행되는 것을 확인할 수 있다. 디버깅 도구를 이용하여 디스어셈블리를 확인해보면 “Keyfile.dat” 파일을 읽으려 한다는 것을 알 수 있다.

CODE:0040105C                 push    0               ; hTemplateFile
CODE:0040105E                 push    offset unk_40216F ; dwFlagsAndAttributes
CODE:00401063                 push    3               ; dwCreationDisposition
CODE:00401065                 push    0               ; lpSecurityAttributes
CODE:00401067                 push    3               ; dwShareMode
CODE:00401069                 push    0C0000000h      ; dwDesiredAccess
CODE:0040106E                 push    offset FileName ; "Keyfile.dat"
CODE:00401073                 call    CreateFileA
CODE:00401078                 cmp     eax, 0FFFFFFFFh
CODE:0040107B                 jnz     short loc_40109A
CODE:0040107D                 push    0               ; uType
CODE:0040107F                 push    offset Caption  ; " Key File ReverseMe"
CODE:00401084                 push    offset Text     ; "Evaluation period out of date. Purchase"...
CODE:00401089                 push    0               ; hWnd
CODE:0040108B                 call    MessageBoxA
CODE:00401090                 call    ExitProcess

Keyfile.dat 파일이 없는 경우 -1을 반환하므로 0040107B에서 다음 로직으로 이동하지 못하고 메시지 창 출력 후 프로세스를 종료하는 것을 확인할 수 있다. Keyfile.dat 파일 생성 후 다시 진행해보자.

Keyfile is not valid. Sorry. 문구를 출력하고 프로세스가 종료되는 것을 확인할 수 있다. 조금 더 살펴보면 이번 튜토리얼의 목적인 You really did it! Congratz !!!" 메시지 창을 출력하는 코드를 만날 수 있다. 어떻게 하면 성공 코드에 도달할 수 있을까.

CODE:004010A9                 call    ReadFile
CODE:004010AE                 test    eax, eax
CODE:004010B0                 jnz     short loc_4010B4
CODE:004010B2                 jmp     short loc_4010F7
CODE:004010B4
CODE:004010B4 loc_4010B4:                             ; CODE XREF: start+B0↑j
CODE:004010B4                 xor     ebx, ebx
CODE:004010B6                 xor     esi, esi
CODE:004010B8                 cmp     ds:NumberOfBytesRead, 10h
CODE:004010BF                 jl      short loc_4010F7
CODE:004010C1
CODE:004010C1 loc_4010C1:                             ; CODE XREF: start+D1↓j
CODE:004010C1                 mov     al, ds:byte_40211A[ebx]
CODE:004010C7                 cmp     al, 0
CODE:004010C9                 jz      short loc_4010D3
CODE:004010CB                 cmp     al, 47h
CODE:004010CD                 jnz     short loc_4010D0
CODE:004010CF                 inc     esi
CODE:004010D0
CODE:004010D0 loc_4010D0:                             ; CODE XREF: start+CD↑j
CODE:004010D0                 inc     ebx
CODE:004010D1                 jmp     short loc_4010C1
CODE:004010D3
CODE:004010D3 loc_4010D3:                             ; CODE XREF: start+C9↑j
CODE:004010D3                 cmp     esi, 8
CODE:004010D6                 jl      short loc_4010F7
CODE:004010D8                 jmp     loc_401205

4010F7으로 이동 시 실패, 401205으로 이동 시 성공이다. 첫 번째로 004010B8cmp ds:NumberOfBytesRead, 10h를 만족하기 위해서 Keyfile.dat 파일은 16자리 이상으로 구성되어야 한다. 두 번째로 004010D3cmp esi, 8를 만족하기 위해서 ‘G’가 8개 이상(004010CBcmp al, 47h) 포함되어야 한다. 004010C7cmp al, 0로 확인하여 null 일 시 비교를 시작하므로 GGGGGGGGGGGGGGGG를 Keyfile.dat에 저장하면 You really did it! Congratz !!!" 메시지 창이 출력되는 것을 확인할 수 있다.

이 블로그의 인기 게시물

데일 카네기 인간관계론 정리

Remove-Server-Header

응답 메시지 내 서버 버전 정보 제거 1. Apache 1) 조치 방법 “/etc/htpd/conf/httpd.conf” 파일 안에서 1. ServerTokens OS → ServerTokens Prod 2. ServerSignature On → ServerSignature Off 로 변경한 후 아파치를 재시작하면 헤더 값의 아파치 버전 정보 및 OS 정보를 제거할 수 있다. 2) 참고 URL http://zetawiki.com/wiki/CentOS_ 아파치_보안권장설정_ServerTokens_Prod,_ServerSignature_Off 2. IIS 1) 조치 방법 IIS 6.0 urlscan_setup 실행. 설치. \windows\system32\inetsrv\urlscan\urlscan.ini 파일을 열어 다음 수정(RemoveServerHeader=0 을 RemoveServerHeader=1 로 변경) 서비스에서 IIS Admin Service 재시작. IIS 7.0 IIS 관리자를 열고 관리하려는 수준으로 이동합니다. 기능 보기에서 HTTP 응답 헤더를 두 번 클릭합니다. HTTP 응답 헤더 페이지에서 제거할 헤더를 선택합니다. 작업 창에서 제거를 클릭하고 예를 클릭합니다. 2) 참고 URL IIS 6.0 : http://gonnie.tistory.com/entry/iis6- 응답헤더-감추기 IIS 7.0 : https://technet.microsoft.com/ko-kr/library/cc733102(v=ws.10).aspx 3. jetty 1) 조치 방법 “jetty.xml” 파일에서 jetty.send.server.version=false 설정 2) 참고 URL http://attenuated-perspicacity.blogspot.kr/2009/09/jetty-61x-hardening.html 4. Nginx ...

CVE-2017-11352

CVE-2017-11352 ImageMagick 에서 발생했던 CVE-2017-9144 취약점의 미흡한 조치로 인하여 동일한 취약점이 다시 발생되었다. 재 발생된 취약점 CVE-2017-11352은 coders/rle.c 에서 RLE 이미지에 대한 부적절한 EOF 처리가 원인이었다. EOF 란? 파일의 끝(End of File, EOF)으로 데이터 소스로부터 더 이상 읽을 수 있는 데이터가 없음을 나타낸다. ImageMagick Github Page 에 들어가보면 해당 이슈를 상세히 확인할 수 있다. 부적절한 EOF 처리 원인은 소스 코드 수정 시 유사한 코드를 복사 붙여넣기 하는 과정에서 검증해야할 변수 명을 고치지 않고 그대로 적용해서 발생했다. operand=ReadBlobByte(image); if (opcode == EOF) ThrowRLEException(CorruptImageError, "UnexpectedEndOfFile" ); 이로 인해서 조치 완료된 줄 알았던 CVE-2017-9144 취약점은 CVE-2017-11352이라는 새로운 취약점 명으로 다시 조치 되었다. case SkipLinesOp: { operand=ReadBlobByte(image); - if (opcode == EOF) + if (operand == EOF) ThrowRLEException(CorruptImageError, "UnexpectedEndOfFile" ); if (opcode & 0x40 ) { operand=ReadBlobLSBSignedShort(image); - if (opcode == EOF) + if (operand == EO...