#include int main(int argc, char* argv[]) { /* char cmd[4] = {'c','m','d','\x0'}; __asm { _emit 0xCC } WinExec(cmd, SW_SHOW); ExitProcess(1); */ /* __asm{ // cmd // 아래 널 바이트 부분을 대체하는 코드 xor ebx, ebx mov [ebp-4], ebx movbyte ptr [ebp-4], 63h movbyte ptr [ebp-3], 6Dh mov byte ptr [ebp-2], 64h //mov byte ptr [ebp-1], 0 // 널바이트 제거 // call WinExec('cmd', SH_SHOW ) push 5 lea eax, [ebp-4] push eax mov..
LoadLibrary MSDNhttps://msdn.microsoft.com/ko-kr/library/windows/desktop/ms684175(v=vs.85).aspx GetProcAddress MSDNhttps://msdn.microsoft.com/en-us/library/windows/desktop/ms683212(v=vs.85).aspx LoadLibrary 함수를 사용하여 DLL의 시작 주소를 가져와 GetProcAddress 함수를 사용하여 ServiceMain에 진입하는 방법이다.
memcpy 취약한 함수를 사용하여 기본적인 Buffer Over Flow 취약점을 알아보겠습니다. 아래 소스는 BOF에 취약한 소스입니다. 메모리에 들어오는 길이 값을 검사하지 않아 생기는 취약점인데, 엄청 기본적인 방법이라 정리를 하고 가려고 합니다. sBuf에 32를 할당하고, 0으로 초기화 시키고 있습니다. shellcode는 0x41414141 4바이트씩 맞춰서 결국 Return Addresss에 0x41414141이 뜨고, 그 곳으로 가게 하는 것이 목표입니다! 위의 소스를 디스어셈블하여 확인하면, 아래와 같습니다. EBP를 확인해보면 0012FF78 이라는 것을 확인할 수 있습니다. MOV EBP, ESP를 통해서 EBP에 스택포인터가 전해졌고, [EBP-20] 을 할당 후에 0으로 모두 쓴..
1. 새 프로젝트로 콘솔 프로그램 생성2. 프로젝트 오른쪽 마우스 클릭 - 빌드 종속성 - 사용자 지정 빌드 클릭 - masm 체크 - 확인 3. 소스파일로 .asm .s 확장자로 파일을 생성4. 생성 된 소스파일의 속성 페이지 - 빌드에서 제외 (아니요), 항목 형식 - Microsoft Macro Assembler 5. 프로젝트 속성 페이지 - 구성 속성 - 링커 - 입력 메뉴로 들어가 추가 종속성을 클릭 - 편집 버튼 클릭 후 libcmt.lib 적고 확인 버튼 클릭 6. 어셈블리 코딩 시작
RVA (Relative Virtual Address)- VA(Virtual Address)는 memory에 mapping된 절대 주소를 뜻함.- RVA는 이름 그대로 어느 기준(ImageBase)으로부터의 상대 주소를 뜻함. VA와 RVA의 관계는 아래와 같다.RVA + ImageBase = VA PE header 내의 많은 정보들이 RVA 형태로 되어 있다.RVA를 사용하는 이유는 relocation 때문인데, Dll 같은 경우 memory에 mapping 하려는 주소에이미 다른 library가 있는 경우 Relocation을 통해 빈 공간에 mapping하게 된다. RAW- RAW는 disk상의 file에서 주소를 뜻함. File상에서의 offset이라고도 불림. RVA to RAV- PE file..
PE Image Switching - PE Image Switching 기법은 어떤 프로세스(A.exe)를 SUSPEND 모드로 실행한 후 전혀 다른 PE 파일(B.exe)의 PE Image를 매핑시켜 A.exe 프로세스 메모리 공간에서 실행하는 기법입니다.ex) A.exe 프로세스 생성 -> A.exe PE Image 제거 -> B.exe PE Image 로딩 -> B.exe PE Image 실행PE Image를 변경하면 프로세스 이름은 A.exe이지만, 실제 프로세스 메모리에 매핑된 PE Image는 B.exe이기 때문에 원본(A.exe)과는 전혀 다른 동작을 하게 됩니다. A.exe는 겉모습만 남아있는 껍데기 이고, B.exe가 실제로 실행되는 진짜배기 입니다. DebugMe3.exe 파일은 첫 번..
Self Creation 이란 ? - 실행 중에 자기 자신을 자식(Child) 프로세스로 생성시키는 애플리케이션들을 말합니다.같은 실행 파일이면서 부모(Parent)로 실행될 때와 자식으로 실행될 때 서로 다르게 동작합니다. 다시 말해서 프로세스가 자기 아래 그림과 같이 자신을 자식 프로세스로 실행시키는 것을 말합니다. 악성코드에 자주 나오는 유형이니 숙지하면 좋은 기법입니다. * 실습 파일(DebugMe2.exe)는 리버싱 핵심원리의 실습 파일을 사용했습니다. 부모 프로세스는 콘솔(Console) 창에 parent 문자열을 출력하고 자식 프로세느는 child 문자열을 출력합니다. 이와 같이 하나의 실행 팡리에서 두 가지 형태의 동작을 수행하는 것을 확인할 수 있습니다. [동작 원리] [Self-Crea..
서비스 디버깅의 정석은 SCM에 의해서 실행된 서비스 프로세스에 디버거를 Attach해서 디버깅해야 합니다.개념은 단순하지만 실행 방법에 있어 문제가 있고, 그건 바로 SCM이 서비스를 실행시킨 이후에 Attach를 하면 핵심 코드(서비스 메인 함수)가 이미 실행된 이후라는 것입니다. 따라서 SCM이 서비스 프로세스를 생성하고 EP 코드를 실행시키기 직전에 디버거를 Attach해야 합니다. 1. 그냥 디버깅 - EIP 강제 세팅main() 함수로 가서 StartServiceCtrlDispatcher() API 함수를 찾는다. 이 함수를 호출하면 SCM에게 서비스 메인 함수(SvcMain()) 주소를 알려줘야 합니다. 따라서 이 API를 찾으면 SvcMain() 주소를 알아낼 수 있습니다. StartSer..
- Total
- Today
- Yesterday
- Kimsuky
- .wll
- AMSI
- 악성코드
- 출처 : Do it 안드로이드 프로그래밍
- koodous
- Servey
- MS-Office
- 멋쟁이사자처럼 4기
- Decoding
- CVE-2018-0798
- keylogger
- cuckoo-sandbox
- Static Analysis Engine
- 비트코인
- 스피어피싱
- us-cert
- VirusBulletin
- 한글악성코드
- malware
- Bisonal
- CVE-2018-9375
- 해킹메일
- vuln
- Cisco Talos
- Yara
- Flybits
- infostealer
- idapython
- 위협정보공유
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
1 | 2 | 3 | 4 | |||
5 | 6 | 7 | 8 | 9 | 10 | 11 |
12 | 13 | 14 | 15 | 16 | 17 | 18 |
19 | 20 | 21 | 22 | 23 | 24 | 25 |
26 | 27 | 28 | 29 | 30 | 31 |