ㅋ책을 보고 공부한 내용을 정리함. 책의 내용들은 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이다..
랜섬웨어에서 사용하는 암호화 알고리즘 대칭키는 속도가 빠름. 비대칭키는 공개키로 암호화하고 개인키로 복호화해 보안적으로 강력하지만 속도가 느림. 하이브리드형은 파일을 대칭키로 암호화하고 키를 공개키로 암호화해 개인키가 있어야지 대칭키를 얻을 수 있게함. 랜섬웨어에서 사용하는 암호 알고리즘 TEA 128비트 키 사용 64라운드 페이스텔구조 AES https://mike-tyson.tistory.com/6 - AES openssl RC4 MD5 RSA cryptohunt 논문 정리 악의적인 페이로드는 안티멀웨어스캐닝을 지연시키기위해 암호화를 진행하는 경우도 있음. OpenSSL이나 Mircosoft Crpytography API는 다시 사용되는 암호화 함수를 간단한 일로 만든다. -> OpenSSL이나 MS..
OpenSSL을 다음 사이트에 설치를 해준다. https://sourceforge.net/projects/openssl/ OpenSSL Download OpenSSL for free. This project offers OpenSSL for Windows (static as well as shared). It supports: FIPS Object Module 1.2 and CAPI engine. sourceforge.net 1.압축해제 후 생성된 bin 디렉토리 내 파일들을 C:\OpenSSL 디렉토리에 넣어준다.(OpenSSL 디렉토리는 만들어야 한다.) 2.C:\OpenSSL을 시스템 변수에 등록해준다. 3.다음 사항도 하나 만들어 준다. 4.openssl.exe를 실행한다. 5.다음 명령으로 개인..
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
- 차량 네트워크
- 딥러닝
- SVM
- Ethernet
- 케라스
- porks
- 회귀
- HTML
- AE
- automotive
- Python
- problem statement
- json2html
- 이상탐지
- automotive ethernet
- 머신러닝
- cuckoo
- many-to-many
- one-to-many
- AVB
- CAN-FD
- 차량용 이더넷
- many-to-one
- 크로스 엔트로피
- SOME/IP
- 로지스틱회귀
- AVTP
- 단순선형회귀
- 논문 잘 쓰는법
- PCA
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |