목록분야 (27)
모두의 dream

공부를 하며 정리한 내용으로 잘못된 내용이 있을 수 있습니다.x64dbg와 IDA를 이용하여 분석했습니다.블로그에는 가독성을 위해 IDA 코드를 위주로 사진을 첨부했습니다.Detail 포스팅: HermeticWiper Malware (Detail) (tistory.com) 보안 뉴스https://m.boannews.com/html/detail.html?idx=105334 러시아-우크라이나 전쟁이 사이버 공간에 미치는 영향우크라이나에서의 위기 상황이 고조되고 있으며, 러시아는 생각보다 승리를 쉽게 쟁취하지 못할 것처럼 보인다. 이 때문에 생각지도 못한 효과들이 나타나고 있다. 먼저는 난민들이 더 오랜 시m.boannews.com 1. 정적분석Windows7 32bit 에서 분석했다. (Windows10 에..

공부를 하며 정리한 내용으로 잘못된 내용이 있을 수 있습니다. x64dbg와 IDA를 이용하여 분석했습니다. 블로그에는 가독성을 위해 IDA 코드를 위주로 사진을 첨부했습니다. Detail 포스팅에는 정말 자세하게 함수 하나하나 분석한 내용이 정리되어 있습니다. 보고서: HermeticWiper Malware analysis report (tistory.com) 1. 정적분석 Windows7 32bit 에서 분석했다. (Windows10 에서도 정상적으로 작동 됨.) 32bit exe 실행파일임을 Detect It Easy 를 이용하여 확인했다. virus total 검색을 통해 이 악성코드의 이름을 찾을 수 있었다. 이름은 HermeticWiper, 우크라이나·러시아 전쟁에서 사이버공격에 사용된 악성코..

공부를 하며 정리한 내용으로 잘못된 내용이 있을 수 있습니다. 악성코드를 분석하다 보면 핸들과 관련된 코드들이 항상 나온다. 이번 기회에 제대로 어떤 기능인지 알고 넘어가고자 관련된 내용들을 정리했다. 1. 프로세스와 커널 현재 실행중인 프로그램이 프로세스. (실행중이지 않은 상태를 프로그램이라고 함) 흔히 알고 있는 메모리 구조(Code, Data, Heap, Stack)는 이 프로세스마다 독립적으로 존재한다. 프로세스안에 더 많은 정보(값)들이 들어갈 수도 있지만 일단 아는 선에서 그림으로 표현했다. 여기서 들었던 의문점: 커널은 스택 위쪽에 있다고 공부했는데, 그럼 커널도 프로세스마다 존재하는건가?? 그렇지 않다. 유저영역에서 프로세스들이 돌아가고 있고, 커널영역에 커널이 단독으로 자리잡고 있다. ..

공부를 하며 정리한 내용으로 잘못된 내용이 있을 수 있습니다. 이번에 우크라이나·러시아 전쟁에서 사용된 HermeticWiper 악성코드를 분석하다가 윈도우 권한과 관련된 코드가 있어서 공부겸 정리해봤다. 아래 코드는 윈도우 전원을 종료 시키는 코드다. #include #include char* GetLastErrorAsString() { DWORD dwLastError = GetLastError(); if (0 == dwLastError) return NULL; char* szMessageBuffer = NULL; size_t size = FormatMessageA(FORMAT_MESSAGE_ALLOCATE_BUFFER | FORMAT_MESSAGE_FROM_SYSTEM | FORMAT_MESSAGE_..

공부를 하며 정리한 내용으로 잘못된 내용이 있을 수 있습니다. DLL Injection: 실행중인 다른 프로세스에 특정 DLL을 강제로 삽입하는 것. DLL Injection 활용 예시기능 개선 및 버그 패치Message Hooking, API Hooking유해 프로그램, 사이트 차단 프로그램DLL Injection은 나쁜 기술이 아니지만, 대부분 악의적인 용도로 사용. DLL Injection의 전체적인 흐름.1. 타겟 프로세스를 잡는다. (메모장, 계산기 등등)2. DLL과 DLL injector를 제작한 후, DLL injector를 이용하여 DLL을 타겟 프로세스에 삽입한다.DLL 에는 Injection 후 행동할 코드가 들어가고, Injector에는 단순히 Injection을 시키기 위한 코드가..
#includeint main(){ int num[5]; for (int i=0; i#includeint main(){ int num[5]; for (int i=0; i위 코드와 아래 코드는 동일.배열의 각 요소(순서는 index라고 함)에 접근하면서 한 개씩 입력을 받는거임.결국 정수형도 & 없이도 입력 가능. 변수 이름 자체가 배열의 첫번째 주소를 가리키고 있음.문자열은 %s를 통해 입력받게 되면 입력한 값(요소)들을 배열에 쭉 나열시킴. 연속된 메모리 주소에 쭉 할당. 동일하게 변수 이름 자체가 배열의 첫번째 주소를 가리키고 있음.(C언어에는 string 형식이 없음.)그래서 문자열을 입력받을 땐 &(앰퍼샌드)를 안써도 됨.

1. 컴파일 과정소스코드 -> 전처리기(소스파일) -> 컴파일러(어셈블리 언어) -> 어셈블러(오브젝트 코드) -> 링커 -> 합쳐진 오브젝트 코드 (1) 전처리 (Precompile)#include한 내용들이(ex. 헤더파일) 내가 작성한 파일에 포함됨. (전처리기가 역할 수행)이외에도 주석을 제거하거나, 매크로를 치환한다.(함수 -> 특정 기능을 하는 소스코드를 묶어놓은 것 -> 그 함수들을 헤더파일에 정의되어 있음 -> 그러므로 헤더파일에 가서 함수를 찾아오는거임) (2) 컴파일 (Compile)C언어(고급언어) 로 작성한 소스코드를 컴퓨터가 알아볼 수 있는 저급언어 (어셈블리어) 로 바꿔줌.일반적으로 소스코드에서 합쳐진 오브젝트 코드가 완성되는 과정까지를 통틀어서 컴파일이라고 하지만, 좀 더 자세..