본문 바로가기
반응형

Study78

[리버싱] 패킹 패킹이란? 패킹은 실행압축이라는 뜻을 가진다. 일반적으로 ZIP, RAR과 같은 압축은 그 압축을 해제 시켜야 해당 프로그램을 실행시킬 수 있다. 하지만 패킹은 있는 그대로 일반 프로그램처럼 실행 가능하다. 실행(PE) 파일을 대상으로 파일 내부에 압축해제코드를 포함하고 있어서 실행되는 순간에 메모리에서 압축을 해제 시킨 후 실행시키는 기술이다. 다시 말하면 압축을 푸는 과정없이 바로 프로그램을 실행할 수 있는 것을 실행압축이라고 한다. 패킹을 하는 이유 - 데이터 압축(프로그램 크기 줄이기) - 악성코드에서는 작은 용량으로 빠르게 많이 퍼지게 하며, 분석이 불가능하게 하기 위한 목적 - 데이터 보호 : anti-reversing, anti-disassembling, anti-dumping - 취약하게 .. 2017. 9. 18.
[리버싱] IAT&EAT IAT IAT(Import Address Table)란? 프로그램이 어떤 라이브러리에서 어떤 함수를 사용하고 있는지를 기술한 테이블입니다. IMAGE_IMPORT_DESCRIPTOR 구조체 PE파일은 자신이 어떤 라이브러리를 Import하고 있는지 IMAGE_IMPORT_DESCRIPTOR 구조체에 명시하고 있다. 구조체 중요 멤버 OrginalFirstThunk : INT(Import Name Table)의 주소(RVA) Name : Library 이름 문자열의 주소(RVA) FirstThunk : IAT(Import Name Table)의 주소(RVA) EAT EAT(Export Address Table)란? 라이브러리 파일에서 제공하는 함수를 다른 프로그램에서 가져다 사용할 수 있도록 해주는 핵심 .. 2017. 9. 17.
[리버싱] 정적&동적 라이브러리 정적 라이브러리(Static library) 특정 기능의 라이브러리를 static하게 제작한다는 것은 링크단계에서 라이브러리(*.lib 파일)를 실행 바이너리에 포함시킨다는 것이다. 즉, 라이브러리의 동작 코드가 이를 사용하는 실행 바이너리 속에 포함되기 때문에 별도의 추가 작업없이 독립적으로 라이브러리 함수들을 사용할 수 있다. 하지만, 정적 라이브러리를 사용하는 프로그램이 늘어날수록 불필요하게 실행 파일들의 크기가 커지며, 라이브러리가 동시에 여러 실행 바이너리에 포함되는 경우 메인 메모리의 공간 활용 효율이 떨어진다. 동적 라이브러리(Dynamic library) : DLL 동적 라이브러리는 이를 사용하고자 하는 실행 바이너리에서 필요시 사용할 수 있도록 최소한의 정보만 포함하여 링크하거나, 독립적.. 2017. 9. 16.
[리버싱] PE파일 참조:http://www.reversecore.com PE(Portable Executable) 파일이란? Win32 운영체제라면 어디에서라도 잘 돌아가는 파일 포맷을 말한다. PE라는 개념을 도입한 이유 PE 헤더에는 실행 파일을 실행하기 위한 각종 정보(메모리 적재 방법, 실행 위치, 필요한 DLL 목록 등)가 기록되어 있다. 즉, PE구조를 통해 파일이 실행되기 위해 필요한 정보들을 볼 수 있으며, 파일 실행 시, 코드가 실행되기 전에 PE의 정보부터 읽어 들여 바이너리를 메모리에 올리기 위한 데이터 설정 작업을 하게 된다. PE 파일의 종류 - 실행 파일 계열 : exe, scr - 라이브러리 계열 : dll, ocx - 드라이버 계열 : sys - 오브젝트 파일 계열 : obj ※ obj 파일을.. 2017. 9. 14.
[웹해킹] LOS 12번 darkknight 음... 좀 까다로운 것 같다 쿼터도 막혀있고, substr도 막혀있다. 우선 admin계정을 찾아보자. 이제 비밀번호를 찾아보자. 비밀번호는 8자!!! 브루트포스 하기 위해 찾아냈다. 쿼터를 사용하지 못해서 어떻게 문제를 풀 것인가 찾아보았다. 쿼터를 사용하지 못할 때 ' and substr(str, 1, 1) = 0x61 # ' and substr(str, 1, 1) = unhex(61) # ' and substr(str, 1, 1) = char(97) # 전부 a로 변환된다. 얘네도 막혔다면 ' and hex(substr(str, 1, 1)) = 61 # ' and ascii(substr(str, 1, 1)) = 97 # ' and ord(substr(str, 1, 1)) = 97 # 나는 char.. 2017. 9. 7.
[리버싱] CALL, JMP, RET(RETN) 명령어에 대해 알아보자 CALL 함수를 호출할 때 사용되는 명령어 오퍼랜드가 가리키는 곳으로 프로그램의 흐름이 변경됨 JMP와 차이점은 함수가 끝나고 다시 복귀할 수 있도록 EIP값이 변경되기 전에 기존의 위치를 스택에 저장함 다시 돌아올 때는 스택에서 해당 정보를 꺼내어 복귀함 JMP 오퍼랜드가 가리키는 곳으로 프로그램의 흐름이 바로 변경됨 EIP값이 저장되지 않아 다시 돌아올 수 없음 옵션에는 127byte 범위 내에서 점프하는 short 같은 세그먼트 내에서 점프하는 near 현재 세그먼트를 벗어나는 far RET(RETN) CALL을 통해 호출된 함수에서 다시 복귀하기 위해 사용하는 명령 스택에 저장된 정보를 기반으로 흐름이 바뀌는 것이기 때문에 의미상으로는 POP EIP와 동일하지만 EIP의 내용은 직접적인 수정이 안.. 2017. 9. 3.
반응형