
IPC를 하기 위해서 공유 메모리를 사용하기로 했다. 먼저 IPC 통신이란 프로세스간에 의사소통을 하는 것을 말한다. 이는 서로 데이터를 주고 받을 수 있다는 것이며 동시에 접근이 가능한 메모리가 필요하다는 것이다. IPC 종류 1. 공유 메모리 - 일반적으로 각 프로세스들은 고유의 메모리를 사용한다. - 공유 메모리를 통해 둘 이상의 프로세스가 메모리에 접근할 수 있는 개념으로 한 프로세스에서 변경한 메모리 공간의 내용을 다른 프로세스에서도 접근이 가능하다. - 메모리에 여러 cpu가 접근하기 때문에 각 클라이언트 pc가 자신만의 캐시를 가지고 있을 때, 공유 메모리를 사용할 때마다 캐시의 갱신으로 캐시 데이터가 불일치하는 캐시 일관성 문제가 발생할 수 있다. 이런 캐시 일관성 문제가 가장 다루기 어려..
#include "pin.H" #include #include #include #include #include // #define start 0x7FFD95D65A90 // #define end 0x7FFD95D6602D //#define start 0x7FFC46E42DD0 //#define end 0x7FFC46E43067 #define start 0x7FFC46E428A0 #define end 0x7FFC46E42AB1 #define XOR 49 #define SHL 193 #define SHR 193 #define AND 129 UINT8 Xcount = 0; UINT8 Acount = 0; UINT8 Rcount = 0; UINT8 Lcount = 0; using namespace std; KN..
cuckoo sandbox를 활용해 멀웨어 분석에 필요한 프로세스를 실행해야 한다. 이를 위한 패키지를 만들어봤다. 먼저 cuckoo github의 다음 경로의 process를 주로 활용한다. https://github.com/cuckoosandbox/cuckoo/tree/master/cuckoo/data/analyzer/windows/lib/api GitHub - cuckoosandbox/cuckoo: Cuckoo Sandbox is an automated dynamic malware analysis system Cuckoo Sandbox is an automated dynamic malware analysis system - GitHub - cuckoosandbox/cuckoo: Cuckoo Sand..
C++클래스와 리버스 엔지니어링 C++은 C와 달리 이 부분이 변수 선언이고 클래스 인지 구분이 쉽지않다. 이를 확인하기 위해선 메모리 사용량과 함수의 구조적인 부분을 살펴보면서 판단해야 한다. #include "windows.h" #include "stdio.h" #include "tchar.h" class Employee { public: int number; char name[128]; long pay; void ShowData(); void Test(); }; void Employee::ShowData() { printf("number: %d\n", number); printf("name: %s\n", name); printf("pay: %d\n", pay); Test(); return; } vo..

02. C 문법과 디스어셈블링 함수의 기본 구조 리버싱 엔지니어링에서 가장 큰 골칫거리는 개발자가 직접 코딩한 부분이 아니라 빌드 시에 컴파일러가 자동으로 생성해내는 코드를 필터링하는 것이다. 이런 필요없는 부분을 넘어갈 수 있어야 한다. 간단하게 예시들을 살펴보자. int sum(int a, int b){ int c =a+b; return c; } 2줄짜리 함수도 디스어셈해보니 10줄이 된다. 여기서 필요없는 부분을 걸러내는게 중요하다. ebp는 Extended Base Pointer로 스택 베이스 포인터로, 스택에서 사용될 함수의 시작 기준점을 잡는 레지스터이다. 먼저 시작의 push ebp, mov ebp, esp가 보인다. 이 부분을 프롤로그, 시작 부분이다. 함수를 호출해 스택에서 사용하겠다는 ..

ㅋ책을 보고 공부한 내용을 정리함. 책의 내용들은 IA-32를 기본 플랫폼으로 하고 있다. 01. 리버스 엔지니어링 기본 01.리버스 엔지니어링만을 위한 어셈블리 어셈블리 기본 구조 먼저 아래 psudo code를 예시의 어셈블리어로 바꿔본다. void 물마심(){ BOOL bOpen = 냉장고 오픈(); if(bOpen){ 물을 꺼냄(); 물을 마심(); } } __asm{ 냉장고 앞으로 간다 낭장고 문을 잡는다 냉장고 문을 연다 오픈 성공: 냉장고 안을 본다 손을 든다 냉장고 안에 넣는다 물병을 잡는다 물병을 꺼낸다 뚜껑을 연다 컵을 잡는다. 물을 따른다. 컵에 든 물을 마신다. 위에서 보듯이 어셈블리어는 한번에 하나의 동작만을 수행할 수 있다. 이처럼 어셈블리어는 코드를 한두줄만 봐선 어떤 동작을 ..
#include "pin.H" #include #include // FILE *trace; UINT32 nbl = 0; VOID printnbbl(UINT32 nb){ fprintf(trace,"%d",nb); } VOID Trace(TRACE trace,VOID *v){ nbl = TRACE_NumBbl(trace); } VOID Fini(INT32 code, VOID *v) { printf("count = %ld\n",(long)nbl); } INT32 Usage(VOID) { PIN_ERROR("This Pintool failed\n" + KNOB_BASE::StringKnobSummary() + "\n"); return -1; } int main(int argc, char *argv[]){ // ..
Taint Analysis Taint : 더럽히다. taint analysis는 프로그램이 외부의 입력으로부터 영향을 받아 흐름을 파악할 때 사용한다. 모든 외부의 입력을 taint(오염)으로 판단한 뒤, 그 입력이 악의적인 영향을 미치는지를 판단하기 위한 데이터 흐름 추적으로 탐지하는 방법이다. Information Flow 디버거로 애플리케이션의 흐름을 확인해보면, information은 복사되고 수정되는 과정을 거친다. 즉 information은 항상 움직이고 있다는 의미이다. taint analysis는 information flow 분석이라고 볼 수 있다.
#include "pin.H" #include #include #include #define start 0x7FF7B81BC89C #define end 0x7FF7B81BC8E4 UINT64 icount = 0; using namespace std; KNOB KnobOutputFile(KNOB_MODE_WRITEONCE, "pintool", "o", "test.out","A pin tool"); FILE * trace; //==================================================================== // Analysis Routines //===================================================================..
- Total
- Today
- Yesterday
- 크로스 엔트로피
- AE
- HTML
- one-to-many
- cuckoo
- 차량용 이더넷
- CAN-FD
- Ethernet
- AVB
- 머신러닝
- 딥러닝
- AVTP
- 단순선형회귀
- 케라스
- 회귀
- SOME/IP
- PCA
- json2html
- many-to-many
- problem statement
- automotive
- 이상탐지
- 논문 잘 쓰는법
- Python
- 로지스틱회귀
- automotive ethernet
- 차량 네트워크
- many-to-one
- porks
- SVM
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |