0

0

大战2013之二:破解浴火银河2硬盘版

php中文网

php中文网

发布时间:2016-06-07 15:37:06

|

1472人浏览过

|

来源于php中文网

原创

续上文: 破解了IC卡读写器的动态库,实在让人心力交瘁,蛋疼之下,随便找了个游戏玩玩 一不小心,玩上浴火银河2硬盘版(Galaxy On Fire),这个游戏有很多个不同平台的版本 感觉移动好吃力,跑半天都不到目的地,我们这样的人怎么能忍受龟速?更不用说是蜗

续上文:

 

破解了IC卡读写器的动态库,实在让人心力交瘁,蛋疼之下,随便找了个游戏玩玩

一不小心,玩上浴火银河2硬盘版(Galaxy On Fire),这个游戏有很多个不同平台的版本

感觉移动好吃力,跑半天都不到目的地,我们这样的人怎么能忍受龟速?更不用说是蜗牛了!

 

于是抄家伙,疯狂破解!(- -!这家伙,破解上瘾了……)

 

最先破解的是后燃器的加速时间、冷却时间和加速倍率,我改过最高的如下:

加速时间1分钟,冷却1秒,加速1000倍!

 

主要是我想撞一个行星看看是什么样的效果,结果我飞了半天硬是没撞上!

而且,加速太快,摄像机跟不上,直接往后面看了……

 

因此,这一块就不跟大家共享了,只贴一张图证实真相:

大战2013之二:破解浴火银河2硬盘版

 

一次加速就飞了4000多公里,星球还是望尘莫及,于是回头截个图……

md2card
md2card

Markdown转知识卡片

下载

 

破解出来比较实用的是修改飞船仓库容量和装甲等,先上个图:

 大战2013之二:破解浴火银河2硬盘版

我不想破解别人的东西,我只想传播下技术。

 

某人说,某人有些虚荣心,喜欢做些惊世骇俗的小动作,不为建功立业……

下面是动态库各个文件的C/C++源代码(按文件名顺序),编译为DLL即可调用(太累了,主程序不想写了,源码也在有空再上传了)。

 

API.DEF

EXPORTS
ReadShips
GetShip
SetShip
SaveShips


Exports.cpp

#include "Exports.h"
#include "Ship.h"

inline DWORD fnRev(DWORD dwNumber)
{	// 转换字节序
	register DWORD dw1;
	dw1 = dwNumber << 24;
	dw1 |= (dwNumber << 8) & 0xFF0000;
	dw1 |= (dwNumber >> 8) & 0xFF00;
	dw1 |= (dwNumber >> 24) & 0xFF;
	return dw1;
}

// DLL入口函数
BOOL APIENTRY DllMain(HANDLE hModule, DWORD ul_reason_for_call, LPVOID lpReserved)
{	//printf("hModule.%p lpReserved.%p \n", hModule, lpReserved);
	switch(ul_reason_for_call)
	{
	case DLL_PROCESS_ATTACH:
		// 进程装载
		SpaceShips = (PSPACESHIP)malloc(sizeof(SPACESHIP) * 44);
		if(!SpaceShips)
			return FALSE;
		break;
	case DLL_PROCESS_DETACH:
		// 线程卸载
		if(SpaceShips != NULL)
		{	// ...
			free(SpaceShips);
			SpaceShips = NULL;
		}
		break;
	case DLL_THREAD_ATTACH:
		break;
	case DLL_THREAD_DETACH:
		break;
	}
	return TRUE;
}

EXPORT_API LONG __stdcall ReadShips(LPCSTR lpShipFile, DWORD *pHash)
{	return (LONG)fnReadShips(lpShipFile, pHash);
}

EXPORT_API DWORD __stdcall GetShip(DWORD dwIndex, DWORD dwPropId)
{	return fnGetShip(dwIndex, dwPropId);
}

EXPORT_API BOOL __stdcall SetShip(DWORD dwIndex, DWORD dwPropId, DWORD dwValue)
{	return fnSetShip(dwIndex, dwPropId, dwValue);
}

EXPORT_API BOOL __stdcall SaveShips(LPCSTR lpShipFile)
{	return fnSaveShips(lpShipFile);
}


Exports.h

/**/

#ifndef __GAL32_EXP_H_
#define __GAL32_EXP_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

//#define WIN32_LEAN_AND_MEAN
#include <windows.h>
#include <stdio.h>	// FILE

#define EXPORT_API __declspec(dllexport)
#define DESDW(d) ((d << 24) | ((d << 16) & 0xFF0000) | ((d >> 8) & 0xFF00) | ((d >> 24) & 0xFF))

extern inline DWORD fnRev(DWORD);

#endif


Hash.cpp和Hash.h是计算MD5的,可以计算任意内存块的md5,目的是检测玩家是否修改了文件

以确定要修改,还是先做备份……主程序都没写,这个也不发上来了,而且容易泄露大侠我的加密风格……

 

Ship.cpp

//

#include "Exports.h"
#include "Ship.h"
#include "Hash.h"

PSPACESHIP SpaceShips;
DWORD dwShipCount = 0;

BOOL fnReadShips(LPCSTR lpShipFile, DWORD *pHash)
{	// ..
	DWORD dwLoop;
	FILE *pfs = fopen(lpShipFile, "rb");
	if(pfs == NULL)
	{	// ..
		return 0;
	}
	dwShipCount = fread(SpaceShips, sizeof(SPACESHIP), 44, pfs);
	fclose(pfs);
	if(dwShipCount != 44)
	{	// ..
		return -1;
	}
	dwLoop = sizeof(SPACESHIP) * 44;
	// 用Hash判断是否是安全的文件
	fnCalcHash(SpaceShips, dwLoop, (DWORD)pHash);
	//for(dwLoop = 0; dwLoop < 44; dwLoop++)
	//{	// ..
	//	if(SpaceShips[dwLoop].dwIndex != dwLoop)
	//		return -3;
	//}
	// 主调程序自动用fnSaveShips保存一个备份
	return dwLoop;
}

DWORD fnGetShip(DWORD dwIndex, DWORD dwPropId)
{	// 返回值应小于0x3FFFFFFF
	if(dwIndex >= dwShipCount)
		return 0x80000000;
	switch(dwPropId){
	case 1:
		return fnRev(SpaceShips[dwIndex].dwArmor);
		break;
	case 2:
		return fnRev(SpaceShips[dwIndex].dwCargo);
		break;
	case 3:
		return fnRev(SpaceShips[dwIndex].dwPrice);
		break;
	case 4:
		return fnRev(SpaceShips[dwIndex].dwPriWeap);
		break;
	case 5:
		return fnRev(SpaceShips[dwIndex].dwSecWeap);
		break;
	case 6:
		return fnRev(SpaceShips[dwIndex].dwTurret);
		break;
	case 7:
		return fnRev(SpaceShips[dwIndex].dwEquip);
		break;
	case 8:
		return fnRev(SpaceShips[dwIndex].dwHandle);
		break;
	default:
		return fnRev(SpaceShips[dwIndex].dwIndex);
		break;
	}
	return 0x80000001;
}

BOOL fnSetShip(DWORD dwIndex, DWORD dwPropId, DWORD dwValue)
{	// 返回值应小于0x3FFFFFFF
	if((dwIndex >= dwShipCount)||(dwValue >= 0x40000000))
		return FALSE;
	switch(dwPropId){
	case 1:
		SpaceShips[dwIndex].dwArmor = fnRev(dwValue);
		break;
	case 2:
		SpaceShips[dwIndex].dwCargo = fnRev(dwValue);
		break;
	case 3:
		SpaceShips[dwIndex].dwPrice = fnRev(dwValue);
		break;
	case 4:
		SpaceShips[dwIndex].dwPriWeap = fnRev(dwValue);
		break;
	case 5:
		SpaceShips[dwIndex].dwSecWeap = fnRev(dwValue);
		break;
	case 6:
		SpaceShips[dwIndex].dwTurret = fnRev(dwValue);
		break;
	case 7:
		SpaceShips[dwIndex].dwEquip = fnRev(dwValue);
		break;
	case 8:
		SpaceShips[dwIndex].dwHandle = fnRev(dwValue);
		break;
	default:
		SpaceShips[dwIndex].dwIndex = fnRev(dwValue);
		break;
	}
	return TRUE;
}

BOOL fnSaveShips(LPCSTR lpShipFile)
{	// ..
	FILE *pfs = fopen(lpShipFile, "wb");
	if(pfs == NULL)
	{	// ..
		return FALSE;
	}
	dwShipCount = fwrite(SpaceShips, sizeof(SPACESHIP), 44, pfs);
	fclose(pfs);
	//if(dwShipCount != 44)
	return TRUE;
}


Ship.h

/**/

#ifndef __GAL32_SHIP_H_
#define __GAL32_SHIP_H_

#if _MSC_VER > 1000
#pragma once
#endif // _MSC_VER > 1000

typedef struct _tagSpaceShip{
	DWORD dwIndex;
	DWORD dwArmor;
	DWORD dwCargo;
	DWORD dwPrice;
	DWORD dwPriWeap;
	DWORD dwSecWeap;
	DWORD dwTurret;
	DWORD dwEquip;
	DWORD dwHandle;
} SPACESHIP, *PSPACESHIP;

extern PSPACESHIP SpaceShips;
extern DWORD dwShipCount;

extern BOOL fnReadShips(LPCSTR, PDWORD);
extern DWORD fnGetShip(DWORD, DWORD);
extern BOOL fnSetShip(DWORD, DWORD, DWORD);
extern BOOL fnSaveShips(LPCSTR);

#endif


目前只公布修改飞船的代码,看看大家反应如何先,如果都有需要,那我就为人民服务一下下吧%……

 

2013-02-17 22:56:38

妈妈的,明天又要开工了

热门AI工具

更多
DeepSeek
DeepSeek

幻方量化公司旗下的开源大模型平台

豆包大模型
豆包大模型

字节跳动自主研发的一系列大型语言模型

通义千问
通义千问

阿里巴巴推出的全能AI助手

腾讯元宝
腾讯元宝

腾讯混元平台推出的AI助手

文心一言
文心一言

文心一言是百度开发的AI聊天机器人,通过对话可以生成各种形式的内容。

讯飞写作
讯飞写作

基于讯飞星火大模型的AI写作工具,可以快速生成新闻稿件、品宣文案、工作总结、心得体会等各种文文稿

即梦AI
即梦AI

一站式AI创作平台,免费AI图片和视频生成。

ChatGPT
ChatGPT

最最强大的AI聊天机器人程序,ChatGPT不单是聊天机器人,还能进行撰写邮件、视频脚本、文案、翻译、代码等任务。

相关专题

更多
Golang 测试体系与代码质量保障:工程级可靠性建设
Golang 测试体系与代码质量保障:工程级可靠性建设

Go语言测试体系与代码质量保障聚焦于构建工程级可靠性系统。本专题深入解析Go的测试工具链(如go test)、单元测试、集成测试及端到端测试实践,结合代码覆盖率分析、静态代码扫描(如go vet)和动态分析工具,建立全链路质量监控机制。通过自动化测试框架、持续集成(CI)流水线配置及代码审查规范,实现测试用例管理、缺陷追踪与质量门禁控制,确保代码健壮性与可维护性,为高可靠性工程系统提供质量保障。

48

2026.02.28

Golang 工程化架构设计:可维护与可演进系统构建
Golang 工程化架构设计:可维护与可演进系统构建

Go语言工程化架构设计专注于构建高可维护性、可演进的企业级系统。本专题深入探讨Go项目的目录结构设计、模块划分、依赖管理等核心架构原则,涵盖微服务架构、领域驱动设计(DDD)在Go中的实践应用。通过实战案例解析接口抽象、错误处理、配置管理、日志监控等关键工程化技术,帮助开发者掌握构建稳定、可扩展Go应用的最佳实践方法。

44

2026.02.28

Golang 性能分析与运行时机制:构建高性能程序
Golang 性能分析与运行时机制:构建高性能程序

Go语言以其高效的并发模型和优异的性能表现广泛应用于高并发、高性能场景。其运行时机制包括 Goroutine 调度、内存管理、垃圾回收等方面,深入理解这些机制有助于编写更高效稳定的程序。本专题将系统讲解 Golang 的性能分析工具使用、常见性能瓶颈定位及优化策略,并结合实际案例剖析 Go 程序的运行时行为,帮助开发者掌握构建高性能应用的关键技能。

37

2026.02.28

Golang 并发编程模型与工程实践:从语言特性到系统性能
Golang 并发编程模型与工程实践:从语言特性到系统性能

本专题系统讲解 Golang 并发编程模型,从语言级特性出发,深入理解 goroutine、channel 与调度机制。结合工程实践,分析并发设计模式、性能瓶颈与资源控制策略,帮助将并发能力有效转化为稳定、可扩展的系统性能优势。

22

2026.02.27

Golang 高级特性与最佳实践:提升代码艺术
Golang 高级特性与最佳实践:提升代码艺术

本专题深入剖析 Golang 的高级特性与工程级最佳实践,涵盖并发模型、内存管理、接口设计与错误处理策略。通过真实场景与代码对比,引导从“可运行”走向“高质量”,帮助构建高性能、可扩展、易维护的优雅 Go 代码体系。

19

2026.02.27

Golang 测试与调试专题:确保代码可靠性
Golang 测试与调试专题:确保代码可靠性

本专题聚焦 Golang 的测试与调试体系,系统讲解单元测试、表驱动测试、基准测试与覆盖率分析方法,并深入剖析调试工具与常见问题定位思路。通过实践示例,引导建立可验证、可回归的工程习惯,从而持续提升代码可靠性与可维护性。

3

2026.02.27

漫蛙app官网链接入口
漫蛙app官网链接入口

漫蛙App官网提供多条稳定入口,包括 https://manwa.me、https

268

2026.02.27

deepseek在线提问
deepseek在线提问

本合集汇总了DeepSeek在线提问技巧与免登录使用入口,助你快速上手AI对话、写作、分析等功能。阅读专题下面的文章了解更多详细内容。

51

2026.02.27

AO3官网直接进入
AO3官网直接进入

AO3官网最新入口合集,汇总2026年可用官方及镜像链接,助你快速稳定访问Archive of Our Own平台。阅读专题下面的文章了解更多详细内容。

430

2026.02.27

热门下载

更多
网站特效
/
网站源码
/
网站素材
/
前端模板

精品课程

更多
相关推荐
/
热门推荐
/
最新课程
CSS3 教程
CSS3 教程

共18课时 | 6.4万人学习

Rust 教程
Rust 教程

共28课时 | 6.5万人学习

PostgreSQL 教程
PostgreSQL 教程

共48课时 | 10万人学习

关于我们 免责申明 举报中心 意见反馈 讲师合作 广告合作 最新更新
php中文网:公益在线php培训,帮助PHP学习者快速成长!
关注服务号 技术交流群
PHP中文网订阅号
每天精选资源文章推送

Copyright 2014-2026 https://www.php.cn/ All Rights Reserved | php.cn | 湘ICP备2023035733号