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을 만들 수 있습니다.
나는 당신이 당신의 자신의 프로그램을 작성하고 리버싱할 것을 권장합니다.
이것이 이 내용을 배우는 가장 좋은 방법입니다. 이제 리버싱 실행 파일로 넘어갈 것입니다.
아직하지 않았다면 휴식을 취하십시오!
'강의정리 > Z0FCourse_Re' 카테고리의 다른 글
[x86-64] Chapter 7 - Windows/7.1 Virtual Memory.md (0) | 2020.02.05 |
---|---|
CURRENTLY IN DEVELOPMENT (Chapter 7 - Windows) (0) | 2020.02.04 |
[x64] Chapter 6 - DLL/6.08 MysteryFunc.md (0) | 2020.02.03 |
[x64] Chapter 6 - DLL/6.7 PrintPlayerStats.md (0) | 2020.01.31 |
[x64] Chapter 6 - DLL/6.6 InitializePlayer.md (0) | 2020.01.30 |