강의정리/Z0FCourse_Re

[x64] DLL/6.09 ImplementingPlayer + 6.10 Final Notes.md

우와해커 2020. 2. 4. 10:56

OPTIONAL: 6.09 Implementing Player

 

Player 클래스를 반대로 변경 했으므로 Player 클래스를 만들고 클래스와 관련된 함수를 사용하는 자체 프로그램을 작성하겠습니다.
플레이어의 이름은 std :: string 일 필요는 없으며 const * 문자 일 수도 있습니다.

 

~~그림~~

 

Copy&Paste 코드

 

#include <iostream>
#include <Windows.h>

class Player {
public:
	int score;
	float health;
	std::string name;
};

//void __cdecl InitializePlayer(class Player * __ptr64)
typedef void(WINAPI* IInitializePlayer)(Player*); // ?InitializePlayer@@YAXPEAVPlayer@@@Z

//void PrintPlayerStats(Player);
typedef void(WINAPI* IPrintPlayerStats)(Player); // PrintPlayerStats

int main()
{
	Player player;
	HMODULE dll = LoadLibraryA("DLL.DLL");
	if (dll != NULL) 
	{
		//Initialize Player
		IInitializePlayer InitializePlayer = (IInitializePlayer)GetProcAddress(dll, "?InitializePlayer@@YAXPEAVPlayer@@@Z");
		if (InitializePlayer != NULL) {
			InitializePlayer(&player);
		}
		else {
			printf("Can't load the function");
		}

		//PrintPlayerStats
		IPrintPlayerStats PrintPlayerStats = (IPrintPlayerStats)GetProcAddress(dll, "PrintPlayerStats");
		if (InitializePlayer != NULL) {
			PrintPlayerStats(player);
		}
		else {
			printf("Can't load the function.");
		}
	}
}

 

6.10 Final Notes

 

나는 이것이 우리의 첫 번째 진짜 리버싱 프로젝트라고 생각합니다. 상당량의 정보가 포함되었습니다.
혼란스러운 점이 있으면 Twitter에서 문의하십시오. 바보 같은 질문은 없습니다!
DM에게 물어 보는 것만으로 트윗하지 않으면 DM을 만들 수 있습니다.
나는 당신이 당신의 자신의 프로그램을 작성하고 리버싱할 것을 권장합니다.
이것이 이 내용을 배우는 가장 좋은 방법입니다. 이제 리버싱 실행 파일로 넘어갈 것입니다.
아직하지 않았다면 휴식을 취하십시오!