티스토리 뷰
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
- 논문 잘 쓰는법
- 머신러닝
- AVB
- cuckoo
- CAN-FD
- HTML
- 회귀
- 차량용 이더넷
- 케라스
- 로지스틱회귀
- 이상탐지
- Ethernet
- SOME/IP
- Python
- 크로스 엔트로피
- 차량 네트워크
- automotive ethernet
- AVTP
- many-to-one
- AE
- problem statement
- json2html
- 단순선형회귀
- porks
- PCA
- one-to-many
- many-to-many
- 딥러닝
- automotive
- 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 | 31 |
글 보관함