본문 바로가기

Reversing

gdbserver 디버깅 따로 ida에서 제공하는 dbgsrv에서 쓸만한게 없다면 gdbserver를 올려서 디버깅 해야한다. 서버에 gdbserver를 static으로 서버 환경에 맞게 컴파일하거나 이미 컴파일 된 파일을 다운 받아서 올리고 "sudo ./gdbserver 127.0.0.1:port ./binary" 이렇게 실행하면 된다. port부분에 1337, 7777처럼 포트 번호를 넣으면 된다. (해당 포트포워딩은 외부로 해 둬야 한다.)가끔씩 sudo를 안해서 ida에서 오류가 날 때가 있으니 해주는게 좋다.그리고 ida로 debugger를 Remote GDB debbuger로 설정하고 Debugger - Process Options에서 Application, Input file을 서버에서의 파일 위치로 잡고, Par.. 더보기
c++ reversing 4 보호되어 있는 글입니다. 더보기
c++ reversing 3 보호되어 있는 글입니다. 더보기
c++ reversing 2 보호되어 있는 글입니다. 더보기
c++ reversing 1 보호되어 있는 글입니다. 더보기
OS 동적 디버깅(vmware) vmware가상머신의 .vmx 파일을 텍스트 편집기로 열어서 하단에 debugStub.listen.guest32 = "TRUE"debugStub.hideBreakpoints = "TRUE"monitor.debugOnStartGuest32 = "TRUE"세 문장을 넣어줌 부팅하고 IDA에서 Attach -> Remote GDB Debugger -> localhost:8832 하고 0번에 있는거 선택 후 0x7c00에 브포 걸면 MBR 영역부터 디버깅 가능 더보기
16bit DOS Debugging 최근 16비트 DOS바이너리를 디버깅 할 일이 생겨서 디버깅 방법을 찾아 보았다. 일단 IDA Bochs Plugin으로 하는 방법이 있고 Turbo Debugger로 하는 방법이 있는데 Bochs는 설정이 너무 어렵고 힘드므로 터보 디버거로 했다. 이 터보 디버거 역시 WIndows98을 가상 머신에 깔아서 하는 방법이 있고, DosBox를 이용해서 하는 방법이 있는데 나는 DosBox를 이용해서 했다. 먼저 필요한 것은 Tasm이다. 설치는 http://sourceforge.net/projects/tasmforwindows/ 여기서 자신의 윈도우에 맞게 다운받아 설치하면 된다. 그리고 실행하면 전체화면이 DOS창으로 꽉 채워지게 된다. 이 때 당황하지 말고 Alt+Enter를 누르면 작은 화면으로 바.. 더보기
PEview Patch 평소에 많은 사람들이 쓰는 PE뷰어인 이 PEView에는 한 가지 단점이 있다. 바로 PE구조를 보면서 헥스 에디터와 같은 것들로 값 변경이 불가능하다는 부분이다. PEView가 멍청하게 파일을 읽기 모드로 열어버려서 쓰기가 안되는 것이다. 평소에 이런 불편함을 가지고 계속 사용하다가 분명히 이렇게 되는 이유는 프로그램을 읽어 들일 때 읽기 모드라서 이런 것이라고 생각하고 직접 올리디버거로 열어서 바이너리를 패치해 주기로 하였다. 먼저 이 PEView는 아무런 패킹이 되어 있지가 않다. 안티디버깅도 없고 해서 분석하기가 굉장히 수월 했었다. 일단 올리디버거로 열어서 CreateFile함수를 호출하는 부분에 브레이크포인트를 걸어 주었다. 여기서 바로 볼 수 있는 것은 바로 CreateFile함수의 Shar.. 더보기
Debug Register 디버그 레지스터는 프로그램 디버깅을 목적으로 프로세서에 의해 사용되는 레지스터로써 DR0~DR7까지 총 8개가 있습니다. 그 중 DR0~DR3까지 4개의 레지스터만 직접 사용이 가능합니다. 우리가 보통 하드웨어 브레이크 포인트를 4개 까지만 설정이 가능한 이유도 이와 같습니다. 그림으로 보면 이렇게 볼 수 있습니다. 그리고 나머지 DR4~DR7 까지 4개의 레지스터는 상태를 관리하기 위해 쓰입니다. 특별히 그 중 DR7레지스터는 Debug Control Register로 불리며 15비트부터 31비트까지 R/W 0~3의 비트가 있습니다. 이 비트들은 DR0~DR3 까지의 브레이크 포인트 속성과 관련 된 내용입니다. 각 비트는 두 개의 비트로 이루어져 있으며 각 의미를 보면 00 - 명령어가 실행 되었을 때.. 더보기
Control Register 컨트롤 레지스터란 운영체제의 운영 모드를 변경하고 현재 운영 중인 모드의 기능을 제어하는 레지스터이다. CR0, CR1, CR2, CR3, CR4 이렇게 다섯 개의 레지스터가 존재한다. 전체적인 부분을 그림으로 보면 그리고이렇게 나눌 수 있다. 각 레지스터들을 기능을 나누어 설명하면CR0 - 운영모드를 제어하는 레지스터 PE - Protection Enable (보호모드와 리얼모드 설정) MP - Monitor Coprocessor (wait, fwait 명령시 TS필드의 참조 여부) EM - Emulation (FPU가 내장되었는지 여부 설정) TS - Task Switched (FPU명령 사용시 예외 설정 여부) ET - Extension Type (1로 예약되어있음) NE - Numeric Erro.. 더보기