악성코드 분석(29)
-
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