续上文:

破解了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. SpringBoot实现通用的接口参数校验
  2. 数据公钥加密和认证中的私钥公钥
  3. File类与FileInfo类的区别
  4. NowCoder小定律
  5. [2018.3.30集训]path-对偶图-最小割
  6. [Web开发] 微软的 PHP+IIS+WinServer 开发培训资料/示例代码
  7. xcode5 delete provisioning profile
  8. 到国外使用wifi悠着点防止天价帐单
  9. 河南多校大一训练赛 C 青蛙的约会
  10. (2)JavaScript书写语法
  11. java string传递_Java,将String从一种方法传递到另一种方法
  12. JAVA读锁不使用效果一样_为什么Java的同步集合不使用读/写锁?
  13. 爬虫404如何跳过_网络推广外包——网络推广外包专员如何从站内优化中提升网站收录...
  14. vrchat模型保存_VRChat简易教程3-往世界里导入模型和VRC接口初探
  15. hbase regionserver挂掉报错has too many store files delaying flush up to 90000ms
  16. 设计思维(Design Thinking)
  17. php文件转换为mp4,PHP转换视频为MP4并获取预览图的实例分享
  18. 【办公自动化Excel】开发工具的使用
  19. pt-table-checksum 使用实践
  20. 【Unity】优化工具Profiler

热门文章

  1. 异常:This application has no explicit mapping for /error, so you are seeing this as a fallback.解决办法
  2. 实现字符串倒序输出(C语言)
  3. 【MySQL】单表获取库存数
  4. 趣味Python-命令行的课程表
  5. JupyterLab 介绍 及简单教程
  6. 复工后从简历被拒,到斩获蚂蚁offer,聊聊功不可没的公众号
  7. 你说,区块链也是一种数据结构?
  8. Java 泛型(generics)详解及代码示例、Java 类型通配符详解及代码示例
  9. 第五届传智杯【初赛】- E-梅莉的市场经济学
  10. 网红考研老师张雪峰被人泼鲱鱼罐头,回应:竞争对手所为!