#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..
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 //===================================================================..
어셈블리어를 보면 다음과 같이 숫자들이 적혀있는 것을 볼 수 있다. 이런 숫자들을 Operation Code라고 한다. 컴퓨터 명령어란 사람이 만든 프로그램(고수준 언어로 작성한 프로그램)을 번역해 컴퓨터가 알아들을 수 있는 명령어(기계 언어)로 바꿔 놓은 것이다. 컴퓨터가 명령을 처리하기 위해서는 이 opcode와 데이터를 찾는 주소(Operand)를 가지고 있어야 한다. opcode와 operand를 합쳐 명령어(instruction)라고 부른다. 위 사진의 첫번째 명령어를 보자. mov qword ptr ss:[rsp+10],rbx 간단히 rsp+10 주소에 있는 값에 rbx 값을 넣어라. 라는 명령어 이다. mov가 opcode이고 qword ptr ss:[rsp+10],rbx가 operand이다..
PIN tool은 동적으로 바이너리를 분석하기 위해 사용하는 도구이다. 이 도구를 활용해 프로그램 run time시에 코드를 삽입해 Recompile과 Relink가 필요없기 때문에 작업의 효율성이 높고, 실행 중에 발생하는 동작이나 코드를 처리할 수 있다. pin은 JIT 컴파일러로 프로그램을 실제 실행하는 시점에 기계어로 번역하는 방법이다. 이 방법은 컴파일과 인터프리트 방법을 혼합해 사용하는 방법이다. pin 실행 pin을 설치하면 다음과 같이 다운로드가 된다. 먼저 보이는 pin.exe는 32비트에서 사용하는 pin 프로그램이고 64비트 환경에서는 intel64\bin 디렉토리 내에 있는 pin.exe를 사용해야 한다. pin 실행 준비 source\tools\ManualExamples 디렉토리를..
PIN에서 사용하는 API들에 대해 정리하려고 한다. 먼저 pin은 jit 컴파일 버전임이 중요하다. 이는 프로그램을 실제 실행하는 시점에 기계어로 번역하는 기법이다. 프로그램 전체를 스캔하여 모두 기계어로 번역하는 컴파일러 방식과 프로그램 실행 시 한번에 한 문장만 기계어로 번역하는 인터프리터 방식의 중간 방식이라고 할 수 있다. 실행 시점에 인터프리터 방식으로 기계어로 번역하고 해당 기계어를 캐싱하여 같은 함수가 여러번 불릴 때 다시 기계어가 생성되는걸 방지한다. pin은 이런 방식을 trace instrumentation이라고 부른다. TRACE란 TRACE란 처음 시작 부분부터 끝날 때까지의 BBL들의 연속된 리스트이다. 예를 들어 main문을 실행하다 다른 함수의 호출을 만나게 되면 pin을 새..
- Total
- Today
- Yesterday
- PCA
- many-to-one
- SOME/IP
- AVTP
- 딥러닝
- 단순선형회귀
- problem statement
- Ethernet
- 이상탐지
- 차량 네트워크
- 케라스
- json2html
- 크로스 엔트로피
- cuckoo
- Python
- AVB
- 논문 잘 쓰는법
- 회귀
- CAN-FD
- 머신러닝
- porks
- AE
- automotive ethernet
- one-to-many
- SVM
- 차량용 이더넷
- 로지스틱회귀
- many-to-many
- HTML
- automotive
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |