续上文:

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

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

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

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

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

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

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

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

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

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

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

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

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

下面是动态库各个文件的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

妈妈的,明天又要开工了

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

  1. 浴火银河星际跳跃(并查集)

    codevs--1365 浴火银河星际跳跃  时间限制: 1 s  空间限制: 128000 KB  题目等级 : 黄金 Gold 题解 题目描述 Description 小 K 又在玩浴火银河了.. ...

  2. Exchange server 2013(十二)IRM故障排除

    Exchange server 2013 (十二)IRM故障排除 我们做完exchange 2013和IRM集成后,具体做法请参考第十章,顺利使用一段时间,后面由于服务器迁移的原因,就把exchang ...

  3. 1365 浴火银河星际跳跃 (并查集)

    1365 浴火银河星际跳跃 时间限制: 1 s 空间限制: 128000 KB 题目等级 : 黄金 Gold 题目描述 Description 小 K 又在玩浴火银河了...不过这次他的目的不是跑运输 ...

  4. 计算机2013最新未来教学计划,2013计算机二维动画制作教学计划1.doc

    2013计算机二维动画制作教学计划1.doc 百色市财经职业技术学校百色市民族旅游学校授课计划表授课专业 2013 级计算机 授课名称 二维动画制作授课教师 梁武卷 教务负责人 王国政 学校负责人 马 ...

  5. 2013年06月电脑公司GHOSTXPSP3装机版◆年中推荐◆

    2013年06月电脑公司GHOSTXPSP3装机版◆年中推荐◆ [img]http://120.jiasuba.com/DNGSZJB201206/0.jpg[/img] [img]http://12 ...

  6. 百度音乐2013 8.2.8 去广告VIP绿色版|zd423作品

    软件大小:5.82 MB 软件语言:简体中文 软件类型:国产软件 软件授权:免费软件 软件类别:音乐播放 应用平台:Win2003,WinXP,Win7,Win8 软件介绍 百度音乐2013 8.2. ...

  7. 国产操作系统之银河麒麟服务器版V10安装

    一.银河麒麟操作系统简介   银河麒麟是目前国内国产化操作系统主流产品之一.银河麒麟高级服务器操作系统V10是针对企业级关键业务,适应虚拟化.云计算.大数据.工业互联网时代对主机系统可靠性.安全性.性 ...

  8. CCNP-第二篇-SLA扩展+EIGRP高级版(上)

    CCNP-第二篇-SLA扩展+EIGRP高级版 还是这个环境的SLA 我们想一个问题哈,如果会有抖动呢? 比如左边是主线路,右边是备用的,那如果左边的时候只是偶尔断了一个包,然后他就跳到备用了,然后b ...

  9. 微信扫描普通二维码调起体验版与已发布版的小程序

    文章转自: 微信扫描普通二维码调起体验版与已发布版的小程序_baozaobenren的博客-CSDN博客 公司有这样一个需求,就是用微信扫描二维码直接调起我们的小程序,前期不知道,直接扫描二维码,调起 ...

最新文章

  1. poco vs Boost
  2. 2015浙江财经大学ACM有奖周赛(一) 题解报告
  3. Serverless 架构下的服务优雅下线实践
  4. 并发模型之——基本概念
  5. 【译】Construction of a Plasma Chain 0x1
  6. 卧式储罐液位体积计算公式excel_ELL外测式液位计在氢氟酸储罐上的实际应用
  7. 清空文件夹_回收站不小心被清空?简单3步即刻找回丢失文件,值得收藏!
  8. fpga驱动oled iic显示代码_【接口时序】6、IIC总线的原理与Verilog实现
  9. 差速齿轮原理_差速器和差速锁的区别
  10. oracle date 隐式转换,PL/SQL中的数据类型隐式转换规则
  11. 隐藏版本信息号返回服务器名,Apache服务器隐藏版本号和系统
  12. 游戏的发动机——数值设计
  13. vue element 调用后台下载文件
  14. 怎么升级Android Studio版本,Android studio 2 版本升级 Android studio 3 版本注意事项
  15. 零基础学UI设计教程之图标的设计形式讲解
  16. python sklearn包中的主成分分析_sklearn主成分分析 NBA球队数据PCA降维可视化
  17. POJ 3674 Super Assassin 笔记 动态规划
  18. 2021年人工智能(AI)的五大发展方向
  19. gcov的实现原理简介
  20. 国外问卷调查为什么这么热门?

热门文章

  1. Only one ConfirmCallback is supported by each RabbitTemplate
  2. webx3学习之旅——webx项目的创建(maven命令创建)
  3. kettle中止是怎么用的_kettle是什么意思_kettle怎么读_kettle翻译_用法_发音_词组_同反义词_(烧水用的)壶-新东方在线英语词典...
  4. 【计算几何】Delaunay 三角剖分原理与实现
  5. KY129简单计算器
  6. android工作资料已锁定,Android的锁定屏幕使用Android无法正常工作
  7. js校验json格式
  8. css在div块添加背景图片为何不显示呢?
  9. 微信小程序 - 实现左右菜单联动功能
  10. Mac使用技巧总结-如何独立设置Mac触摸板方向和鼠标滚轮方向?