请结合博文
https://blog.csdn.net/ioio_jy/article/details/28142093
中的内容,对游戏《仙剑奇侠传》
链接:https://pan.baidu.com/s/1guSqYNE3kvDsTaY2qKbnTA
提取码:1v18
设计一款修改工具,要求必须有界面,能对人物属性进行显示与修改,最后还需要在实验报告中论述,作为游戏开发商,应当采用何种方式来防止自己的游戏信息被逆向分析。
仙剑游戏修改器:
原理:其实就是找到指定资源的地址,通过修改文件的函数fopen_s打开、fseek找到该地址、fwrite写入、fclose关闭文件。
//金钱数修改
void CXianjianModiferhsb20190625Dlg::OnBnClickedButton2()
{
TODO: 在此添加控件通知处理程序代码
// // TODO: 在此添加控件通知处理程序代码
//char fileName[256];
std::cout << "请输入仙剑奇侠传存档文件路径:";
MessageBox(L"请输入仙剑奇侠传存档文件路径:", L"提示", MB_OK);
//CString str;
IDC_EDIT1 - 路径输入框
//GetDlgItemText(IDC_EDIT1, str);
//int strLength = str.GetLength() + 1;
//const char* fstr = CStringA(str);
//strncpy(fileName, fstr, strLength);
//FILE* fp = 0;
//fopen_s(&fp, fileName, "rb");
//if (!fp)
//{
// MessageBox(L"无法打开指定的仙剑奇侠传存档文件", L"提示", MB_OK);
// //system("pause");
// //state = 0;
//}
//else
//{
// //int fix;
// fseek(fp, 0, SEEK_END);
// int fileSize = ftell(fp);
// rewind(fp);
// char* PalSaveFullP = (char*)malloc(fileSize);
// fread(PalSaveFullP, 1, fileSize, fp);
// fclose(fp);
// unsigned int* PalSavePGold = (unsigned int*)malloc(4);
// memcpy(PalSavePGold, PalSaveFullP + 0x28, 4);
// //IDC_EDIT4 = *PalSavePGold;
// //当前金钱数 - IDC_EDIT2
// SetDlgItemText(IDC_EDIT2, (LPCTSTR)*PalSavePGold);
// //std::cout << "输入要修改的金钱数量(0~16777215):";
// //fix = ;
// //GetDlgItemText(IDC_EDIT2, fix);
// CString str2;
// GetDlgItemText(IDC_EDIT3, str2);
// //fix = str2;
// memcpy(PalSavePGold, &str2, 4);
// memcpy(PalSaveFullP + 0x28, PalSavePGold, 4);
// fopen_s(&fp, fileName, "wb");
// fwrite(PalSaveFullP, 1, fileSize, fp);
// fclose(fp);
// //std::cout << "保存成功,即将返回上级菜单,";
// //GetDlgItemText(IDC_EDIT2, str);
// MessageBox(L"保存成功,即将返回上级菜单:", L"提示", MB_OK);
// //system("pause");
// //state = 0;
//}
//char fileName[256] = {0};
//std::cout << "请输入仙剑奇侠传存档文件路径:";
//std::cin >> fileName;
CString Cpath;
GetDlgItemT