大战2013之二:破解浴火银河2硬盘版
续上文: 破解了IC卡读写器的动态库,实在让人心力交瘁,蛋疼之下,随便找了个游戏玩玩 一不小心,玩上浴火银河2硬盘版(Galaxy On Fire),这个游戏有很多个不同平台的版本 感觉移动好吃力,跑半天都不到目的地,我们这样的人怎么能忍受龟速?更不用说是蜗
续上文:
破解了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 > 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 > 8) & 0xFF00) | ((d >> 24) & 0xFF)) extern inline DWORD fnRev(DWORD); #endif</stdio.h></windows.h>
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 = 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 도구

Undresser.AI Undress
사실적인 누드 사진을 만들기 위한 AI 기반 앱

AI Clothes Remover
사진에서 옷을 제거하는 온라인 AI 도구입니다.

Undress AI Tool
무료로 이미지를 벗다

Clothoff.io
AI 옷 제거제

Video Face Swap
완전히 무료인 AI 얼굴 교환 도구를 사용하여 모든 비디오의 얼굴을 쉽게 바꾸세요!

인기 기사

뜨거운 도구

메모장++7.3.1
사용하기 쉬운 무료 코드 편집기

SublimeText3 중국어 버전
중국어 버전, 사용하기 매우 쉽습니다.

스튜디오 13.0.1 보내기
강력한 PHP 통합 개발 환경

드림위버 CS6
시각적 웹 개발 도구

SublimeText3 Mac 버전
신 수준의 코드 편집 소프트웨어(SublimeText3)

뜨거운 주제











하드디스크 일련번호는 하드디스크 포장 상자나 하드디스크 케이스를 통해 확인할 수 있으며, Win11 시스템에서는 그 방법을 모르는 경우가 있습니다. 이 사이트를 통해 귀하에게. 하드 드라이브 일련 번호의 자릿수는 무엇입니까? 컴퓨터 하드 드라이브 일련 번호는 특정 하드 드라이브를 식별하는 고유 식별자입니다. 이는 하드 드라이브 제조업체에서 제공하며 사용자가 수정할 수 없습니다. 하드디스크 일련번호는 일반적으로 10~20자리 숫자와 문자로 구성되며, 물론 일반적으로 12자리로 구성됩니다. 하드디스크 용량, 로딩 모드, 읽기 및 쓰기 속도 등 하드디스크 매개변수를 기록하는 데 사용할 수 있습니다. 컴퓨터 시스템에서 하드 드라이브 일련 번호는 일반적으로 다양한 하드 드라이브를 식별하고 구별하는 데 사용되며 경우에 따라 비밀번호 보호, 소프트웨어 인증 등에 사용됩니다. 통과하다

VirtualBox에서 디스크 이미지를 열려고 하면 하드 드라이브를 등록할 수 없다는 오류가 발생할 수 있습니다. 이는 일반적으로 열려고 하는 VM 디스크 이미지 파일이 다른 가상 디스크 이미지 파일과 동일한 UUID를 가질 때 발생합니다. 이 경우 VirtualBox는 오류 코드 VBOX_E_OBJECT_NOT_FOUND(0x80bb0001)를 표시합니다. 이 오류가 발생하더라도 걱정하지 마세요. 시도해 볼 수 있는 몇 가지 해결 방법이 있습니다. 먼저 VirtualBox의 명령줄 도구를 사용하여 디스크 이미지 파일의 UUID를 변경하면 충돌을 피할 수 있습니다. 'VBoxManageinternal' 명령을 실행할 수 있습니다.

Linux에서 하드 드라이브를 강제 포맷하는 방법 Linux 시스템을 사용할 때 하드 드라이브의 데이터를 다시 분할하거나 삭제하기 위해 하드 드라이브를 포맷해야 하는 경우가 있습니다. 이 문서에서는 Linux 시스템에서 하드 디스크를 강제 포맷하는 방법을 소개하고 구체적인 코드 예제를 제공합니다. 1. 하드디스크 장치 확인 먼저, 포맷할 하드디스크 장치를 결정하기 위해 하드디스크 장치 정보를 확인해야 합니다. 다음 명령을 사용하여 볼 수 있습니다: #fdisk-l 이 명령은 시스템의 모든 하드 디스크 장치를 나열합니다.

컴퓨터를 구입할 때 반드시 대용량 하드 드라이브를 선택할 필요는 없습니다. 이때 win11에 새 하드 드라이브를 추가하려면 먼저 구입한 새 하드 드라이브를 설치한 다음 컴퓨터에 파티션을 추가하면 됩니다. win11에서 새 하드 드라이브 추가에 대한 튜토리얼: 1. 먼저 호스트를 분해하고 하드 드라이브 슬롯을 찾습니다. 2. 찾은 후 일반적으로 쉽게 사용할 수 있는 "데이터 케이블"을 먼저 연결합니다. 삽입할 수 없는 경우 방향을 반대로 하세요. 3. 그런 다음 새 하드 드라이브를 하드 드라이브 슬롯에 삽입합니다. 4. 삽입 후 데이터 케이블의 반대쪽 끝을 컴퓨터 마더보드에 연결합니다. 5. 설치가 완료되면 호스트에 다시 넣고 켤 수 있습니다. 6. 부팅 후 "이 컴퓨터"를 마우스 오른쪽 버튼으로 클릭하고 "컴퓨터 관리"를 엽니다. 7. 연 후 왼쪽 하단에서 "디스크 관리"를 클릭합니다. 8. 그런 다음 오른쪽에서 다음을 수행할 수 있습니다.

Linux 하드 디스크 포맷을 취소하는 방법 및 코드 예 소개: Linux 운영 체제를 사용할 때 하드 디스크 포맷 작업을 취소해야 하는 경우가 있습니다. 이 문서에서는 Linux 하드 드라이브의 포맷을 해제하는 방법과 특정 코드 예제를 제공합니다. 1. 하드디스크 포맷이란? 하드디스크 포맷이란 하드디스크에 있는 데이터를 특정 포맷으로 정리하고 관리하는 작업을 말합니다. Linux 시스템에서는 일반적으로 파일 시스템을 사용하여 하드 드라이브를 포맷합니다. 일반적인 파일 시스템에는 ext4, NTFS 등이 포함됩니다. 둘,

4K 정렬은 하드 디스크에서 매우 중요한 매개변수이지만 일반적으로 새 하드 디스크에는 파티션과 정렬이 없습니다. 오늘은 DiskGenius 파티션 도구를 사용하여 4K를 정렬하는 방법을 가르쳐 드리겠습니다. 파티션 유형으로 mbr을 선택하는 것이 좋습니다. 이 설치 시스템이 더 쉽기 때문입니다. 그런 다음 3개의 파티션을 선택하고 구체적인 작업 과정을 살펴보겠습니다. DiskGenius 파티션 도구를 사용하여 하드 디스크를 4K 정렬하는 세부 단계 1. 솔리드 스테이트 드라이브를 다른 컴퓨터에 삽입하고 그림 1의 소프트웨어를 엽니다. 사용할 수 없는 경우 다운로드한 다음 솔리드 스테이트 드라이브를 클릭합니다. 바로 회색입니다. 새 하드 드라이브는 회색이며 파티션이 없습니다. 그런 다음 이 빠른 파티션을 클릭하세요. 2. 시스템 설치가 더 쉽기 때문에 파티션 유형으로 mbr을 선택하는 것이 좋습니다. 그런 다음 선택

Windows 7 시스템에서 하드 디스크 파티션 아이콘을 충분히 보셨나요? 오늘은 마음에 드는 하드 디스크 아이콘을 DIY해 보겠습니다. 다음은 자세한 단계입니다. 모든 사람에게 도움이 되기를 바랍니다. 먼저 하드 디스크나 즐겨 사용하는 아이콘 파일을 준비해야 합니다. 여기서는 ico 형식의 아이콘이 사용됩니다. 1. 하드디스크 파티션 아이콘을 수정하고 싶은 디스크를 연 뒤, 루트 디렉터리에 ico 파일을 넣어주세요. 여기서는 D 드라이브를 수정하겠습니다. 2. D 드라이브의 루트 디렉터리를 마우스 오른쪽 버튼으로 클릭하고 autorun이라는 빈 텍스트를 만든 다음 확장자 txt를 inf로 변경합니다. 3. 파일을 열고 다음 내용을 입력한 후 저장합니다: [autorun]icon=favicon.ico. 4. 컴퓨터를 정상적으로 다시 시작한 후 D 드라이브

요즘 하드 드라이브는 더 쉽게 사용할 수 있고 더 빠르지만 여전히 많은 전력을 소비합니다. 특히 랩톱에서는 더욱 그렇습니다. 하드 드라이브는 더 많은 전력을 소비하고 노트북 배터리를 원래보다 더 빨리 소모하므로 사용자는 유휴 시간이 지나면 하드 드라이브를 끄는 것을 선호합니다. 이 기능은 Windows 10의 전원 관리 옵션에 도입되었으며 노트북의 배터리 수명을 연장하는 데 도움이 됩니다. 균형 잡힌 전원 계획 또는 절전 계획이 있는 시스템에서는 자동으로 활성화될 수 있지만 이 기능을 수동으로 켤 수도 있습니다. 그러면 선택한 시간 동안 PC가 유휴 상태일 때마다 하드 드라이브가 종료됩니다. 그러면 자동으로 전력 소모가 줄어들어 노트북의 배터리 수명이 절약됩니다. 그러나 PC를 다시 사용하고 싶을 때에는
