전체 글(333)
-
악성코드 기초 정적분석 ( File packed UPX )
[ 악성코드 기초 정적분석 ] 1> www.virustotal.com에 파일을 업로드하여 해시코드값 검색 2> 패킹 여부 확인 ( PEiD ) Microsoft 6.0++ 같이 컴파일 프로그램이름을 알 수가 없다즉, 패킹되어있다 3> 프로그램 코드 분석 ( PEView )UPX로 패킹되어 있는 실행파일임을 알 수 있다또한, UPX0헤더에서 쓰기권한을 가지고 있어 0x4000크기의 가상메모리에 데이터를 작성할 것으로 보인다 4-1> 언패킹 실시 ( upx.exe ) - 자동화 방식upx.exe 패킹(or언패킹)프로그램을 사용해서 UPX파일을 언패킹 시킨다 언패킹 된 결과 & 4-2> 언패킹 실시 - 프로그램 없이 수동으로[4-2-1] 코드 분석 ( UPX Packing특징 : PUSHAD & POPAD )..
2018.04.19 -
악성코드 기초 정적분석이란?
기초 정적분석이란?- 악성코드 분석시에 가장 먼저 진행- 프로그램의 기능을 파악하기 위해서 코드 or 프로그램의 구조를 분석한다 ( 프로그램을 실행시키지 않는다 )악성코드파일에서 사용하는 문자열이나 사용하는 DLL 및 함수를 조사 분석 방법 악성코드의 지문(Finger Print)확인악성코드는 해시를 이름으로 사용한다해시값을 사용하여 악성코드를 식별할 수 있다=> 해시와 그 특징을 공유한 사이트가 존재한다 ( https://www.virustotal.com )또는 WinMD5Free Program을 사용해서 MD5해시값을 구할 수 있다 * virustotal 사이트 & 악성파일 매칭 악성코드 실행파일이 사용하는 문자열 검색Strings Program을 사용한다실행파일이 생성하는 파일의 이름을 지정할 때 ..
2018.04.18 -
FSG 수동언패킹 [ Lena21 ]
FSG Unpacking 1> 패킹 여부 확인실행파일은 현재 FSG로 패킹 되어있다 2> Ollydbg 코드 분석 * FSG 특징 - JMP코드를 연속으로 3개 사용한다해당 부분을 찾아서 break를 걸어주고 실행시켜 보자 3> 원본파일 OEP확인마지막 점프명령을 실행시키면 0x00404000 주소로 이동한다0x00404000 = OEP ! 4> OEP주소부터 덤프파일로 저장Plugins - Ollydump - Dump debugged process -> dump파일로 저장 ( OEP와 EP확인 후 덤프 ! )Import는 Import REC를 통해서 복구한다 5> Import REC를 통한 IAT복구OEP수정 후 "AutoSearch" 클릭 => RVA와 Size가 구해진다RVA로 지점으로 직접 이동해..
2018.04.14 -
Upack 수동언패킹 [ Lena21 ]
Upack Unpacking1> 실행파일의 패킹 여부를 확인한다 ( PEiD 사용 ) 2> Ollydbg로 실행파일 코드 분석Ollydbg로 파일을 실행시켰더니 다음과 같은 문구가 발생하였다아마도 Upack으로 패킹되있어서 나오는 문구이지 싶다 3> MemoryMap를 통해서 코드시작지점 찾기ImageBase + AddressEntryPoint => EntryPoint 4> 원본파일 OEP 찾기하지만, 실행파일은 패킹되어있다따라서 맵에 나와있는 값은 거짓값일 확률이 높다해당 지점으로 이동해보자 해당 지점에 break를 걸어주고 코드를 계속 진행시킨다0x0049A05B 지점에서 RETN명령이 실행된다 RETN명령을 실행시킨 다음의 상황이다0x00427180주소로 이동하였다해당 주소가 원본실행파일의 EP가 ..
2018.04.14 -
UPX 수동언패킹 [ Lena 21 ]
이전 게시글에서 말했듯이 UPX의 특징인 PUSHAD를 실행한 직후의 모습이다STACK에는 EAX~EDI레지스터 값이 PUSH되어 있다ESP주소에 break를 걸어주고 코드를 실행시켜보자 * ESP주소 : 0012FFA4 * 코드를 실행시킨 뒤의 모습이다 ESP주소에 접근했을 때 실행이 멈추었다* ESP에 위치해서 POPAD를 통해 레지스터값을 복구시킨뒤 JMP코드를 실행하기 이전의 모습이다 JMP명령을 실행시켜보자 * 여러줄의 코드가 적혀 있는 지점으로 이동했다* 00401000 지점부터 원본파일의 코드가 된다* 00401000 : OEP ( Original Entry Point ) # 원본파일의 코드를 DUMP해서 저장하자 ImageBase : 00400000OEP : 00401000Ollydump는..
2018.04.10 -
Packing & Unpacking
[1] Packing(1) Compressor단순히 실행파일의 압축을 목적으로 한다 ex) UPX(2) Protector실행파일의 보호를 목적으로 한다. Anti-reversing기법이 적용된다. MS-DOS용 upx.exe 패킹도구를 이용해서 UPX패킹 및 언패킹을 실행시켜보겠다. \> upx.exe [Target]해당 타겟 실행파일을 upx패킹한다\> upx.exe -d [Target]해당 타겟 upx압축파일을 언패킹한다\> upx.exe [Target] -o [FileName]타겟실행파일을 다른 이름으로 패킹하여 저장한다 다음은 메모장의 패킹 전 후 의 모습이다 ( win32 )실행파일의 용량이 압축되어 작아졌다 [ 그림 1 ][ 그림 2 ] 기..
2018.04.10 -
PE File Structure
EXE나 DLL파일 실행시 개발자가 만든 코드가 실행되기 전에 PE의 정보부터 읽어와서 바이너리를 메모리에 올리기 위한 각종 데이터를 설정하는 작업을 한다.PE는 파일이 실행되기 위한 정보가 기록된 것 PE 구조 ( 32bit 환경 )[ IMAGE_DOS_HEADER ]e_magic - 현재 파일이 PE파일인지 체크한다 ( * MZ헤더를 통해 MS-DOS의 시작을 알린다 )e_lfanew - IMAGE_NT_HEADER 구조체의 위치를 가리킨다 [ IMAGE_NT_HEADER ]SIGNATURE ( 변수 ) - PE\0\0IMAGE_FILE_HEADER ( 구조체 )IMAGE_OPTIONAL_HEADER ( 구조체 ) [ IMAGE_FILE_HEDAER ]* Machine (2byte) : 어떤 CPU에..
2018.04.10 -
어셈블리어 정리 ( cmp & TEST & ZF & CF )
레지스터에는 ZF,CF, 등등 여러가지 상태 플래그가 존재한다.cmp와 TEST명령어는 ZF와 CF를 사용하므로 두가지 플래그에 대해 알아보자. [1] 플래그[3-1] ZF ( ZeroFlag )이전 명령어의 연산결과의 값이 0 일경우에 ZF플래그는 "1" 로 set 되어진다.연산결과 == 0 ---> " 거짓 " ---> ZF : 1연산결과 != 0 ---> " 참 " ---> ZF : 0ZF플래그를 통해서 이전 명령어의 참,거짓을 판별할 수 있다. [3-2] CF ( CarryFlag )연산 시 비트올림이나, 비트내림 발생 시 CF가 1로 set된다.쉽게말하면, 두 숫자를 비교할 때 사용하는 플래그이다 [2] cmp arg1 arg2( 두 인자의 차를 이용한 비교 ) [ 연산1 ]cmp eax,1실행..
2018.04.04 -
Python 문법 ( 클래스, 예외처리, 모듈, 파일 입출력 )
[1] 클래스의 기본 선언 구조* class 클래스명: 예약어 class를 통해 클래스를 선언한다def _init__(self,인자): 클래스 생성시 디폴트로 호출되는 생성자이다 ( self가 반드시 인자로 들어가야한다 ) ...def 함수명(인자): 클래스 내부에서 함수를 선언할 수 있다 ...* class 클래스명(상속클래스명): 클래스 선언시 인자로 상속받을 클래스명을 넣어준다def 함수명(인자):... [ 예제 ] [2] 예외처리 오류가 발생해도 프로그램이 정상적으로 동작할 수 있도록 하는 특별한 장치역할try:예외가 발생할 수 있는 구문except 예외 종류: * 예외 복수 처리 가능예외처리 수행 구문else:예외 미발생시 수행할 구문finally:예외 발생에 관계없이 무조..
2018.03.05 -
컴퓨터 관련 기본지식
1. CPU메모리에 있는 명령어와 데이터를 처리하면서 동작한다ALU ( Arithmetic Logic Unit ) : 덧셈,뺄셈,나눗셈,곱셈,AND,OR,NOT 등의 각종 산술연산과 논리연산을 수행하는 회로CU ( Control Unit ) : 입력 레지스터로부터 전달받은 데이터를 ALU가 수행할 연산의 종류를 결정한다, 장치의 동작을 제어한다Register : CPU내에 있는 고속의 소규모 기억장치Bus Interface : 주소, 데이터, 제어신호가 버스시스템을 통해서 CPU와 다른 요소들간에 통신을 지원한다 2. Memory메모리 용량이 클수록 한꺼번에 많은 양의 일을 처리할 수 있어 컴퓨터 처리 성능 향상에 도움이 된다컴퓨터에서 사용하는 메모리는 ROM과 RAM이 있다ROM ( ..
2018.03.05