티스토리 뷰
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;
}
void Employee::Test()
{
printf("Test fuction\n");
return;
}
// Employee kang;
int main(int argc, char* argv[])
{
Employee kang;
printf("size: %X\n", sizeof(Employee));
kang.number = 0x1111;
_tcscpy(kang.name, _T("강병탁"));
kang.pay = 0x100;
kang.ShowData();
return 0;
}
위 코드는 간단히 고용인 클래스를 만들고 클래스의 멤버 변수에 다양한 값을 넣었다.
먼저 어셈블리를 확인하기 위해서는 main함수가 어디인지, 함수들의 시작부분이 어딘지 알아야 분석을 할 수 있다.
가장 간단한 부분은 print문 같이 문자열이 확실히 보이는 string을 찾아 main문을 찾는 방법이다.
하지만 main문에서 그저 함수만 호출하고 string을 print하지 않는 경우도 있다. 이럴 땐 컴파일의 순서를 생각해야 한다.
물론 지금처럼 간단한 코드의 경우엔 처음에 헤더를 호출하고 바로 main문으로 넘어가지만 복잡한 경우엔 main문을 도달하기 전에 많은 과정을 거친다.
'리버싱' 카테고리의 다른 글
PinTool Opcode(XOR,AND,SFT) 출력 구현 (0) | 2022.04.10 |
---|---|
리버싱 엔지니어링 바이블-0311 (0) | 2022.03.11 |
리버싱 엔지니어링 바이블 - 0307 (0) | 2022.03.07 |
PinTool BBL 개수 출력 (0) | 2022.02.15 |
Taint Analysis란 (0) | 2022.02.14 |
공지사항
최근에 올라온 글
최근에 달린 댓글
- Total
- Today
- Yesterday
링크
TAG
- 차량 네트워크
- PCA
- Ethernet
- 크로스 엔트로피
- problem statement
- 단순선형회귀
- CAN-FD
- 이상탐지
- SOME/IP
- 회귀
- json2html
- 케라스
- automotive ethernet
- 차량용 이더넷
- AVTP
- many-to-many
- 로지스틱회귀
- automotive
- 논문 잘 쓰는법
- many-to-one
- one-to-many
- porks
- SVM
- AE
- AVB
- HTML
- cuckoo
- 딥러닝
- Python
- 머신러닝
일 | 월 | 화 | 수 | 목 | 금 | 토 |
---|---|---|---|---|---|---|
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 |
글 보관함