목록전체 보기 (89)
둘둘리둘둘리둘둘리둘둘리둘둘리둘
@ PEDA(Python Exploit Development Assistance for GDB) - 리눅스 플렛폼에서의 Exploit을 돕기위한 도구이지만 Exploit에 기초가되는 분석에도 상당히 유용한 Python script @ PEDA 설치 버전 확인[root@localhost home]# gdb -q(gdb) python print sys.version2.6.6 (r266:84292, Nov 22 2013, 12:11:10)[GCC 4.4.7 20120313 (Red Hat 4.4.7-4)] 파이썬이 2.x대 버전이면 그냥 설치가능한데 최신 리눅스에 gdb는 3.x대로 컴파일돼서 gdb 지우고 다시 2.x대로 컴파일해야한다고함 peda 설치[root@localhost work]# wget htt..
문제 자체는 쉬우나 다른 플렛폼에서의 리버싱이란게 어려울 수 있다 리눅스에서 리버싱할경우 개인적으로 IDA 리모트 디버깅이나 gdb를 쓰는데 문제가 어렵지않아 gdb로도 충분하겠지만 gdb는 또 명령어들도 그렇고 CLI환경에서의 리버싱이니 어려움이 있을 수 있겠다 IDA 리모트 디버깅 -> http://dool2ly.tistory.com/79 일단 'readelf -h ./Easy_ELF' 또는 'objdump -f ./Easy_ELF'를 통해 얻어낸 엔트리 포인트에서부터 gdb로 리버싱해 보자면 [root@localhost reversing.kr]# gdb ./Easy_ELF(gdb) set disassembly-flavor intel //어셈블리어 출력방식을 intel로(gdb) x/13i 0x080..
MessageBoxA함수에 브레이크를 걸어서 Wrong메세지 출력 루틴을 찾음 Wrong메세지 루틴은 0x004013AA에서부터 점프되어 온다 0x4013AA부근을 보면 FindResourceA - LoadResurce - LockResource등 리소스를 불러오는 루틴 후 불러온 리소스랑 뭔가를 틀리거나 카운트 0x15F90이 넘을때까지 비교한다 check누를때마다 실행되므로 그려진 이미지랑 리소스가 같은지를 체크하는듯 함 0x00401170부터 Bitmap 이미지 관련된 함수들이 보이는걸로봐선 bmp인듯 함 mspaint로 bmp파일을 만들고 헤더가 끝나는 지점부터 ImagePrc리소스(HxD로 까서 수동으로 찾음..)를 복사해줌 CreateCompatibleBitmap함수에 bmp이미지 사이즈를 알..
@IDA를 이용한 리눅스 원격 디버깅 IDA는 호스트 PC에서 구동되고 Debuggee는 리눅스 머신에서 작동하게 됩니다.리눅스 뿐만 아니라 여러 OS에서도 가능한것 같지만 리눅스에서밖에 안써봐서 리눅스 기준으로 설명하겠습니다. IDA 6.5기준이지만 버전별로 큰 차이는 없는것 같습니다. 1. 리눅스 머신에 서버 elf파일 구동 IDA설치폴더->dbgsrv 폴더에 OS별로 서버 파일이 있습니다. Debuggee가 구동될 시스템으로 알맞은 서버파일을 옮기고, 테스트용 간단한 elf파일을 생성한 후 서버파일을 실행합니다. 2. Debuggee 파일을 IDA가 구동되는 시스템으로 이동시킨후 IDA 실행 테스트용으로 생성한 a.out 파일을 IDA가 설치돼있는 시스템(필자기준 윈도우)으로 옮긴후 IDA를 이용하..
Justin Seitz의 Gray Hat Python - Python Programming for Hackers and Reverse Engineers(2009)를 읽으며 책에 나와있는 소스만으로 코딩했을시 생기는 오류들과 그에 해당하는 소스 수정,추가,제거를 통해 오류해결법을 제시하겠습니다. 현재 작성중이며 내용은 계속해서 추가하겠습니다..(읽으며 작성중...) @ 3.4.1 SoftBreakpoints (p43) 책에 소개된대로 빌드 후 my_test.py를 실행시키면 Access Violation 이벤트만 계속 발생되는데, 이 이유는 책의 소스는 브레이크 포인트 설정후 바로 Debuggee를 재개시켜버려서이다.책의 bp_set 함수에서 printf의 시작을 0xCC(INT3)로 바꾼 후 해당 이벤트..
@디버깅 이벤트(Debugging Events) Event Code Event Code Value Union u Value 0x01 EXCEPTION_DEBUG_EVENT u.Exception 0x02 CREATE_THREAD_DEBUG_EVENT u.CreateThread 0x03 CREATE_PROCESS_DEBUG_EVENT u.CreateProcessInfo 0x04 EXIT_THREAD_DEBUG_EVENT u.ExitThread 0x05 EXIT_PROCESS_DEBUG_EVENT u.ExitProcess 0x06 LOAD_DLL_DEBUG_EVENT u.LoadDll 0x07 UNLOAD_DLL_DEBUG_EVENT u.UnloadDll 0x08 OUTPUT_DEBUG_STRING_EVENT..
@메모리 브레이크 포인트(Memory Breakpoints) 메모리 브레이크 포인트는 실제로 전혀 브레이크포인트가 아니다. 메모리 브레이크 포인트를 설정할때 디버거는 메모리의 영역(또는 page)의 권한을 변경한다. 메모리 페이지(Memory page)는 OS에서 처리하는 메모리의 가장 작은 단위이다. 메모리 페이지가 할당되면 할당된 메모리 페이지는 특정 접근권한이 세트된다. 메모리 페이지 권한(Memory page permissions) - Page execution실행가능권한, 만약 프로세스가 페이지에 읽거나 쓰려고하면 Access violation을 발생시킨다. - Page read프로세스가 페이지에서 읽어오기만 가능하게한다. 읽거나 실행시키려하면 Access violation. - Page wri..
@하드웨어 브레이크 포인트(Hardware Breakpoints) Debuggee 프로세스를 수정할 수 없을경우(Software breakpoints를 사용할수 없을경우) instruction의 수정 없이 사용할 수 있는 하드웨어 브레이크 포인트가 유용하다. 하드웨어 브레이크 포인트는 debug registers 라는 특수한 레지스터에 CPU레벨에서 셋트되며, 하드웨어 브레이크 포인트를 셋트하고 관리하는 debug registers는 DR0에서 DR7까지가 있다. DR0~DR3 : 브레이크 포인트 주소를 위해 예약됨DR4, DR5 : ReservedDR6 : Status register, 하드웨어 브레이크 포인트에의해 디버깅 이벤트 발생시 셋팅됨DR7 : 다른 브레이크 포인트의 상태를 저장 (하드웨어 브..
@C - Python - ctype 데이터 타입 C Type Python Type ctypes Type char 1-character string c_char wchar_t 1-character Unicode string c_wchar char int/long c_byte char int/long c_ubyte short int/long c_short unsigend short int/long c_ushort int int/long c_int unsigned int int/long c_uint long int/long c_long unsigned long int/long c_ulong long long int/long c_longlong unsigned long long int/long c_ulonglo..
ROPeMe (ROP Exploit Made Easy) ropshell.py를 이용하여 ROP 구성시 필요한 가젯을 쉽게 찾을수있도록 해줌exploit생성시 유용한 모듈들도 있는것같음 설치 1. 아래 파일 다운로드 후 압축해제(tar -xvf) 2. ropeme-bhus10 디렉토리 내부 distorm-1.7.30.tar.gz 압축해제(tar -xvf) 3. distorm-1.7.30의 setup.py #./setup.py build#./setup.py install 이후 /ropeme-bhus10/ropeme/ropshell.py 사용하면됨 공식 다운로드 링크http://ropshell.com/ropeme/ 사용법 링크http://ropshell.com/howto