求助,使用了ASM存档修改器器后存的档无法读

后使用快捷导航没有帐号?
查看: 2304|回复: 7
UID268028帖子精华0积分575银契222 张星币774 枚BP0 点风帆贝壳1059 枚人气28 点储藏箱2 个阅读权限60注册时间最后登录
追逐水王的传说
Lv.6 口袋高级训练员, 积分 575, 距离下一级还需 625 积分
UID268028帖子精华0积分575BP0 点阅读权限60注册时间
神奇宝贝信息
&神奇宝贝图鉴:204 (GT 126)
&双子宝贝图鉴:5 (GT 0)
&宝贝养成成就:33 (440 Pts)
RT~高手们来看看。。开了游戏后,直接黑屏。。用的是模拟器
UID22890帖子精华1积分4233银契1869 张星币8997 枚BP112 点风帆贝壳7098 枚人气207 点储藏箱21 个阅读权限100注册时间最后登录
^●⊖●^←杯葛
UID22890帖子精华1积分4233BP112 点阅读权限100注册时间
神奇宝贝信息
&神奇宝贝图鉴:626 (GT 585)
&双子宝贝图鉴:127 (GT 5)
&宝贝养成成就:144 (6339 Pts)
lz在模拟器中讀檔了??
UID268028帖子精华0积分575银契222 张星币774 枚BP0 点风帆贝壳1059 枚人气28 点储藏箱2 个阅读权限60注册时间最后登录
追逐水王的传说
Lv.6 口袋高级训练员, 积分 575, 距离下一级还需 625 积分
UID268028帖子精华0积分575BP0 点阅读权限60注册时间
神奇宝贝信息
&神奇宝贝图鉴:204 (GT 126)
&双子宝贝图鉴:5 (GT 0)
&宝贝养成成就:33 (440 Pts)
读档后就黑了
UID250503帖子精华8积分5124银契5046 张星币71731 枚BP0 点风帆贝壳234 枚人气208 点储藏箱11 个阅读权限200注册时间最后登录
UID250503帖子精华8积分5124BP0 点阅读权限200注册时间
神奇宝贝信息
&神奇宝贝图鉴:328 (GT 328)
&双子宝贝图鉴:5 (GT 3)
&宝贝养成成就:22 (561 Pts)
存档被修改得坏了吧
如果没有备份存档,只能重新玩了
UID256198帖子精华0积分552银契187 张星币13286 枚BP0 点风帆贝壳1096 枚人气20 点储藏箱4 个阅读权限60注册时间最后登录
Lv.6 口袋高级训练员, 积分 552, 距离下一级还需 648 积分
UID256198帖子精华0积分552BP0 点阅读权限60注册时间
神奇宝贝信息
&神奇宝贝图鉴:133 (GT 47)
&双子宝贝图鉴:26 (GT 0)
&宝贝养成成就:22 (332 Pts)
用修改器就是有副作用……
UID268028帖子精华0积分575银契222 张星币774 枚BP0 点风帆贝壳1059 枚人气28 点储藏箱2 个阅读权限60注册时间最后登录
追逐水王的传说
Lv.6 口袋高级训练员, 积分 575, 距离下一级还需 625 积分
UID268028帖子精华0积分575BP0 点阅读权限60注册时间
神奇宝贝信息
&神奇宝贝图鉴:204 (GT 126)
&双子宝贝图鉴:5 (GT 0)
&宝贝养成成就:33 (440 Pts)
不能修复吗
UID226683帖子精华0积分2349银契2139 张星币0 枚BP0 点风帆贝壳632 枚人气55 点储藏箱1 个阅读权限70注册时间最后登录
I love chaochao
Lv.7 口袋职业训练员, 积分 2349, 距离下一级还需 151 积分
UID226683帖子精华0积分2349BP0 点阅读权限70注册时间
神奇宝贝信息
&神奇宝贝图鉴:358 (GT 76)
&双子宝贝图鉴:51 (GT 0)
&宝贝养成成就:8 (140 Pts)
修改器弄坏了存档
没有备份的话,不好意思,只能重玩了
看看看你妹~
UID224881帖子精华0积分589银契248 张星币11617 枚BP0 点风帆贝壳1025 枚人气49 点储藏箱6 个性别男阅读权限60注册时间最后登录
Lv.6 口袋高级训练员, 积分 589, 距离下一级还需 611 积分
UID224881帖子精华0积分589BP0 点阅读权限60注册时间
神奇宝贝信息
&神奇宝贝图鉴:306 (GT 141)
&双子宝贝图鉴:34 (GT 2)
&宝贝养成成就:14 (241 Pts)
有可能修改后与游戏冲突了……
要不试试修改回以前的样子……
修改也要适度……
Continuamente cadono dal cielo criniera del sole
Lasciate che le orme lasciate dai ghiacci stanno scomparendo
Non abbiate paura di essere ingannati
Perché questo mondo è costruito su inganno
[公众徽章]垂死挣扎
鲤鱼王徽章
[荣誉徽章]秩序徽章
[荣誉徽章]秩序徽章
[荣誉徽章]人气徽章
[荣誉徽章]人气徽章
[荣誉徽章]助人徽章
[荣誉徽章]助人徽章
[荣誉徽章]原创徽章
[荣誉徽章]原创徽章
[荣誉徽章]贡献徽章
[荣誉徽章]贡献徽章
[原创评选第二季]第十八期(2010-06)游戏区优秀训练师
[原创评选第二季]第十八期(2010-06)游戏区优秀训练师
[原创评选第二季]第十九期(2010-07)游戏区优秀训练师
[原创评选第二季]第十九期(2010-07)游戏区优秀训练师
[原创评选第二季]第二十二期(2010-10)游戏区优秀训练师
[原创评选第二季]第二十二期(2010-10)游戏区优秀训练师
Powered by求助,用了存档修改器,然后游戏就崩溃了什么鬼【三国志13吧】_百度贴吧
&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&&签到排名:今日本吧第个签到,本吧因你更精彩,明天继续来努力!
本吧签到人数:0可签7级以上的吧50个
本月漏签0次!成为超级会员,赠送8张补签卡连续签到:天&&累计签到:天超级会员单次开通12个月以上,赠送连续签到卡3张
关注:207,290贴子:
求助,用了存档修改器,然后游戏就崩溃了什么鬼
有的不能修改,比如有的古代武将不能出场我就让他登录了,结果……后来设置回死亡就好了……
别乱用修改器,已经没救了。
蓝色的最好别改
重开一个档,把这个坏掉的覆盖了就行了,别乱改,要不然玩游戏多没意思,50万金钱开局就行了
贴吧热议榜
使用签名档&&
保存至快速回贴[原创]游戏修改的常用方法之一——远程读写内存(asm源码详注)
comment *-----------------------------------------------------------------------
  前几日,几个朋友在局域网中玩红警对战,常因游戏中无钱而使战斗长时间不能结束,
有人就想到用游侠修改金钱来作弊,无奈在网络对战中用游侠修改游戏是要暂停游戏的,一
人停下大家都停了,作弊就被人发现了。能不能整它个一键锁定,神不知鬼不觉,不被人发
现?于是我就编写了这个“傻瓜式RA2游戏修改器”。为什么没有去破解游戏或做补钉呢?那
样的话别人玩这个机子的RA2游戏也能享受作弊待遇了,且钱数不变易被人发现作弊了:)
  ①把本程序拷到RA2游戏目录中,运行本程序,游戏程序被启动了
  ②开始一场战斗,切记,等游戏界面显示的钱数“不变”时,按下数字键盘上的星号键
第一遍搜索开始了,也许要好几秒时间,这段时间内你可以点兵派将,但不可使钱数增减。
  ③当你听到提示音且鼠标被置于屏幕左上角时,第一遍搜完了。现在赶紧让你的钱数变
化,比如建一座电站,最好是钱数再次“不变“时,可以按下数字键盘上的星号键进行第二
遍搜索了,这次是极极极的快,鼠标没有被置于左上角,说明找到正确地址并已自动锁定钱
数了。什么?钱数在变化没有锁定?非也!五秒之内你用钱了自然要减少挣钱了自然要增加
不然旁观者看到钱数不变就知道你作弊了:),这是不同于游侠的地方,要的就是这个效果。
  当一场战斗终了,要开始下一场战斗时,你只要按一下“-”键,然后重复上述步骤即
可。为什么要重新搜索?因为每一盘游戏的金钱数地址都不同。
  本程序在WinXP/SP2、ra2之1.006英文版(有中国超牛机器人的那个)运行通过且稳定
无误。如果是其他版本,只要用十六进制编辑工具搜索数值“008373cch”,改为你想要的
地址值即可,共有两处要改。这个地址值是怎么得来的?最简单的方法是用游侠了。有游侠
为啥还要用我这个破玩意儿?因为游侠的界面和暂停会让别人发现你作弊的。用游侠搜索到
的地址一般有三个,有两个地址值相差4,取较小的那个即可,最大的也是最另类的那个每
盘游戏都会变,它才是正直的金钱数保存地址,本程序就是要找到这个变化的地址并锁定数
  对于那些弹出游侠界面或暂停后就死掉的游戏,用类似的方法就可以修改了吧?!如果
数值地址不是象ra2这样有多个,可在游戏中记下几个数值,然后写入一文件中,搜索时从文
件中读取数值即可。也可用键盘钩子记录按键,进行无界面动态输入。
*-------------------------------------------------------------------------------
.model flat,stdcall
option casemap:none
& &include windows.inc
& &include kernel32.inc
& &include user32.inc
& &include psapi.inc
& &includelib kernel32.lib
& &includelib user32.lib
& &includelib psapi.lib
ADD_DATA1& & equ 008373cch& & ;00883c84h& & ;其他版本要改这个地址值
;ADD_DATA2& & equ h& & ;00883c88h& & ;这个不用
ADD_DATA3_START equ h& & ;搜索范围开始地址,可根据需要改动
ADD_DATA3_END& & equ 0f600000h& & ;搜索范围结束地址,可根据需要改动
MEMSIZE& & equ 10000h& & ;每次读取数据块的大小,不宜太小
;------------------------------------------------------------------------
;取得游戏进程的句柄。游戏中按下“*”号键便来到这里
;有两种常用的方法:进程快照查找法和当前活动窗口法
;------------------------------------------------------------------------
_GetProcessHandle proc
comment *在调试时用这段代码取得游戏进程的句柄为好
& & LOCAL&&info:PROCESSENTRY32
& & LOCAL&&handle:HANDLE
& & invoke CreateToolhelp32Snapshot,TH32CS_SNAPPROCESS,0 ;进程快照
& & mov& & handle,eax
& & mov& & info.dwSize,sizeof PROCESSENTRY32
& & invoke Process32First,handle,addr info
& & .repeat
& && &&&mov& &eax,@F
& && &&&invoke lstrcmpi,addr info.szExeFile,eax ;比较是否为我们要找的进程名,不区分大小写
& && &&&.if !eax
& && && && &invoke CloseHandle,handle
& && && && &;invoke MessageBox,NULL,addr info.szExeFile,NULL,MB_OK
& && && && &invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,info.th32ProcessID
& && && && &jmp EXIT
& && &&&.endif
& && &&&invoke Process32Next,handle,addr info
& & .until !eax
& & invoke CloseHandle,handle
& & xor eax,eax
& & db "Game.exe",0
& & *通常情况下也可以用下面的方法取得游戏进程的句柄,但要注意……
& & LOCAL ProcessId
& & invoke GetForegroundWindow ;你必须确保当前窗口为游戏界面窗口,这样才能正确取得游戏进程ID
& & lea& & edx,ProcessId
& & invoke GetWindowThreadProcessId,eax,edx
& & invoke OpenProcess,PROCESS_ALL_ACCESS,FALSE,ProcessId
_GetProcessHandle endp
;------------------------------------------------------------------------
;第一遍搜索。因是全程搜索,耗时几秒至十多秒(与玩家数多少有关),WinXP中
;凭经验知道本游戏中钱数地址在h至0F600000之间,搜此范围以减少用时
;------------------------------------------------------------------------
_GetDataAddr proc uses esi edi hProcess:DWORD,num:DWORD,hmem:DWORD
& & LOCAL N,ListMemSize,pListMem,ReadSize
& & LOCAL mbi:MEMORY_BASIC_INFORMATION
& & invoke EmptyWorkingSet,hProcess ;减少游戏进程提交内存数,希望能减少搜索量,加快搜索速度
& & invoke SetProcessWorkingSetSize,hProcess,-1,-1 ;不知是否有效?!愿听高手指导
& & invoke GlobalLock,hmem ;锁定保存搜索结果的内存
& & mov&&pListMem,eax
& & invoke GlobalSize,hmem;保存搜索结果的内存大小
& & mov& & ListMemSize,eax
& & invoke ReadProcessMemory,hProcess,ADD_DATA1,addr N,sizeof N,NULL ;不用手输入金钱数,从内存读取金钱数
& & mov edi,N ;保存金钱数,以便后面比较搜索,原理见前文
& & invoke GlobalAlloc,GMEM_FIXED,MEMSIZE ;分配内存,为读取数据做准备
& & mov esi,eax ;保存内存地址
& & mov ecx,ADD_DATA3_START ;设置要搜索的内存地址范围开始处
& & .repeat ;循环搜索游戏内存
@@:& && &&&invoke VirtualQueryEx,hProcess,ecx,addr mbi,sizeof MEMORY_BASIC_INFORMATION ;返回页面虚拟信息
& && &&&.if mbi.State == MEM_COMMIT && mbi.Protect == PAGE_READWRITE ;已提交且为可读写的区域,加速搜索
& && && && &mov&&ReadSize,MEMSIZE ;每次可读取的数据大小
& && && && &.repeat ;循环读取该内存区段中的数据
& && && && && & .if&&mbi.RegionSize&MEMSIZE ;如果剩下的数据块小于MEMSIZE
& && && && && && &&&mov&&eax,mbi.RegionSize
& && && && && && &&&mov&&ReadSize,eax ;读剩下的数据大小
& && && && && & .endif
& && && && && & invoke ReadProcessMemory,hProcess,mbi.BaseAddress,esi,ReadSize,addr N ;读游戏数据
& && && && && & xor&&ecx,ecx ;ecx为相对于区段首的偏移地址
& && && && && & .repeat ;在读取的数据块中搜索金钱数的地址
& && && && && && &&&.if edi==[esi+ecx] ;数值相等,找到了?
& && && && && && && && &mov eax,num ;地址num中记录了搜索结果的个数
& && && && && && && && &inc dword ptr[eax] ;搜索的结果个数加一
& && && && && && && && &mov eax,dword ptr[eax]
& && && && && && && && &shl eax,2h ;保存结果所需的内存大小
& && && && && && && && &.if eax&ListMemSize ;如果搜索到的结果较多,内存用完,要重新分配内存
& && && && && && && && && & push eax
& && && && && && && && && & push ecx
& && && && && && && && && & add&&eax,1000h ;追加4K内存
& && && && && && && && && & invoke GlobalReAlloc,hmem,eax,GMEM_MOVEABLE ;重新分配内存,原来的数据被复制过来
& && && && && && && && && & invoke GlobalLock,eax
& && && && && && && && && & mov&&pListMem,eax ;保存搜索结果的内存首地址
& && && && && && && && && & invoke GlobalSize,hmem
& && && && && && && && && & mov&&ListMemSize,eax ;保存搜索结果的内存大小
& && && && && && && && && & pop&&ecx
& && && && && && && && && & pop&&eax
& && && && && && && && &.endif
& && && && && && && && &add&&eax,pListMem ;相当于pListMem[num]
& && && && && && && && &mov&&edx,mbi.BaseAddress
& && && && && && && && &add&&edx,ecx ;首地址+偏移地址=实际地址
& && && && && && && && &mov&&[eax-4h],edx ;搜索的结果保存起来,pListMem[num-1]=实际地址
& && && && && && &&&.endif
& && && && && && &&&add ecx,4h ;金钱数为DWORD型数值,考虑到内存对齐,这里是不用担心漏掉的
& && && && && & .until ecx&=N ;读取的数据块比较完了吗?
& && && && && & mov&&eax,ReadSize ;准备再读一次
& && && && && & add&&mbi.BaseAddress,eax ;下次从这里开始读
& && && && && & sub&&mbi.RegionSize,eax ;下次要读的大小
& && && && &.until&&mbi.RegionSize&=0h ;下次要读的大小为0了吗?为0则本区段读完,去下一区段
& && &&&.endif
& && &&&mov&&ecx,mbi.BaseAddress
& && &&&add&&ecx,mbi.RegionSize ;下一区段首地址
& & .until ecx&=ADD_DATA3_END ;下一区段在搜索范围之外了吗?是则完成第一遍搜索
& & invoke GlobalFree,esi
_GetDataAddr endp
;------------------------------------------------------------------------
;第二、三……遍的搜索,在第一次的结果中找,速度极快
;第二次按下“*”键便来到这里,一般只要两遍就可锁定。算法:有用地址向前移
;结果个数由num返回,如果num==1就算找到正确的金钱地址了
;------------------------------------------------------------------------
_FindAddrInList proc uses edi esi hProcess:DWORD,num:DWORD,hmem:DWORD
& & LOCAL Data,N
& & LOCAL DD1,DD2
& & invoke ReadProcessMemory,hProcess,ADD_DATA1,addr DD1,sizeof DD1,NULL ;读取金钱数
& & invoke GlobalLock,hmem
& & mov& & edi,eax ;前次搜索结果保存的内存首地址
& & xor& & esi,esi ;指针,指向第一个结果
& & mov& & N,esi ;本次搜索到的个数初始化为0
& & .repeat ;逐个比较
& && &&&mov edx,[edi+esi*4h] ;相当于edx=hmem[esi]
& && &&&invoke ReadProcessMemory,hProcess,edx,addr DD2,sizeof DD2,NULL ;读取数值
& && &&&mov eax,DD1
& && &&&.if eax==DD2 ;等于金钱数吗?等则记录下来
& && && && &push [edi+esi*4h]
& && && && &mov eax,N
& && && && &pop [edi+eax*4h] ;相当于hmem[N]=hmem[esi],即把搜索到的结果向hmem内存前面移
& && && && &inc N ;搜索到的个数加一
& && &&&.endif
& && &&&mov eax,num
& && &&&inc esi ;指针指向下一个结果
& & .until esi&=[eax] ;每个都比较过了吗?是则完成这次搜索
& & mov& & edx,N ;这次搜索到的结果个数
& & mov& & [eax],edx ;修改原来的个数
& & shl& & edx,2h ;个数×4=内存大小
& & invoke GlobalReAlloc,hmem,edx,GMEM_MOVEABLE ;释放多余的内存
_FindAddrInList endp
;------------------------------------------------------------------------
;找到了正确的地址,可以锁定金钱数值了:),每五秒锁定一次,按“-”键停锁
;游戏中钱数看起来有增有减,象未锁定一样,别人不容易发现你作弊
;------------------------------------------------------------------------
_WriteProcessData proc uses edi esi hProcess:DWORD,hmem:DWORD
& & LOCAL DATA,IsRun
& & mov& & esi,2000 ;要锁定的金钱数,别太多,多了是会招贼来偷的:)
& & mov& & DATA,esi
& & invoke GlobalLock,hmem
& & mov& & edi,[eax] ;游戏中真正的保存金钱数的地址
& & .repeat
& && &&&.if esi&=5h ;每五循环锁定一次
& && && && &xor& & esi,esi ;循环次数清0
& && && && &invoke WriteProcessMemory,hProcess,edi,addr DATA,sizeof DATA,NULL ;写入钱数
& && &&&.endif& &
& && &&&invoke Sleep,1000 ;定时一秒
& && &&&inc& & esi ;循环次数加一
& && &&&invoke GetExitCodeProcess,hProcess,addr IsRun ;游戏程序还在运行吗?
& && &&&invoke GetAsyncKeyState,VK_SUBTRACT ;按了“-”键吗?
& & .until eax || IsRun!=STILL_ACTIVE ;如果游戏退出或按了“-”键则结束循环
_WriteProcessData endp
;------------------------------------------------------------------------
;把本程序拷入游戏文件夹,运行本程序,游戏被启动,本程序在后台运行,无界面
;本程序运行后启动“ra2.exe”,再由“ra2.exe”启动游戏程序,之后“ra2.exe”
;无用了,停掉它以节约内存。
;------------------------------------------------------------------------
_StartGame proc
& & LOCAL StartInfo:STARTUPINFO
& & LOCAL PI:PROCESS_INFORMATION
& & invoke RtlZeroMemory,addr StartInfo,sizeof STARTUPINFO
& & mov StartInfo.cb,sizeof STARTUPINFO
& & mov ecx,GAME_NAME
& & xor edx,edx
& & invoke CreateProcess,edx,ecx,edx,edx,edx,edx,edx,edx,addr StartInfo,addr PI ;启动游戏
& & invoke Sleep,10000 ;等10秒,游戏程序应该启动了吧?
& & invoke TerminateProcess,PI.hProcess,0h ;没用了,停掉它
& & invoke CloseHandle,PI.hProcess ;释放内存
GAME_NAME:
& & db "ra2.exe",0
_StartGame endp
MAIN& & proc
& & LOCAL msg:MSG
& & LOCAL num,hmem,hProcess,MutexName
& & invoke _StartGame ;启动游戏
& & mov eax,"2ar"
& & mov MutexName,eax
& & invoke CreateMutex,NULL,TRUE,addr MutexName
& & invoke GetLastError
& & .if eax!=ERROR_ALREADY_EXISTS ;只让本程序的一个实例运行
& && &&&invoke RegisterHotKey,NULL,VK_MULTIPLY,0h,VK_MULTIPLY ;注册热键“*”
& && &&&invoke RegisterHotKey,NULL,VK_SUBTRACT,0h,VK_SUBTRACT ;注册热键“-”
& && &&&invoke RegisterHotKey,NULL,'X',MOD_CONTROL OR MOD_ALT,'X' ;注册热键“Ctrl+Alt+X”
& && &&&invoke GlobalAlloc,GMEM_MOVEABLE,1000h ;预留内存空间,搜索时用来保存结果
& && &&&mov hmem,eax ;搜索结果个数的不确定性需要我们用GlobalReAlloc来重新分配内存大小
& && &&&xor eax,eax
& && &&&mov num,eax ;搜索结果个数初始化为0
& && &&&mov hProcess,eax ;始化为0
& && &&&.while 1
& && && && &invoke GetMessage,addr msg,NULL,NULL,NULL ;等待消息
& && && && &.if msg.message==WM_HOTKEY ;热键消息
& && && && && & .break .if msg.wParam=='X' ;按了热键“Ctrl+Alt+X”则退出本程序
& && && && && & .if msg.wParam==VK_SUBTRACT ;按了热键“-”
& && && && && && &&&mov num,0h ;搜索结果个数置0,表示从未搜索过
& && && && && & .else ;按了热键“*”
& && && && && && &&&.if num==0h ;搜索结果个数为0则从未搜索过,进行第一遍搜索
& && && && && && && && &.if hProcess ;如果在非游戏界面中按了“*”,这样可避免误操作
& && && && && && && && && & invoke CloseHandle,hProcess ;释放内存
& && && && && && && && &.endif
& && && && && && && && &invoke _GetProcessHandle ;取游戏进程句柄
& && && && && && && && &mov hProcess,eax
& && && && && && && && &lea ecx,num ;指针型参数
& && && && && && && && &invoke _GetDataAddr,eax,ecx,hmem
& && && && && && &&&.elseif num&1h ;搜索结果个数非0则至少已搜过一遍且未找到正确地址
& && && && && && && && &invoke _FindAddrInList,hProcess,addr num,hmem&&;再搜它一遍或几遍
& && && && && && &&&.endif
& && && && && &
& && && && && && &&&.if num==1h ;搜索结果为1,说明找到正确地址了
& && && && && && && && &invoke _WriteProcessData,hProcess,hmem ;去锁定它!
& && && && && && && && &.break .if eax==0 ;如果你没按“-”键,那一定是游戏退出了,咱也退出吧
& && && && && && &&&.endif& && && && && &
& && && && && & .endif
& && && && && & invoke MessageBeep,MB_OK ;发声提示游戏者,按键收到,该做的本程序都做过了
& && && && && & invoke SetCursorPos,9h,9h ;把鼠标置于屏幕左上角,提醒游戏者,第一遍搜索时特别有用
& && && && && & invoke GetCurrentProcess
& && && && && & invoke EmptyWorkingSet,eax ;减少自己的内存占用量,不和游戏争内存
& && && && &.endif
& && &&&.endw
& && &&&invoke UnregisterHotKey,NULL,VK_MULTIPLY ;以下为退出前的清理工作
& && &&&invoke UnregisterHotKey,NULL,VK_SUBTRACT
& && &&&invoke UnregisterHotKey,NULL,'X'
& && &&&invoke CloseHandle,hProcess
& && &&&invoke GlobalUnlock,hmem
& && &&&invoke GlobalFree,hmem
& && &&&invoke ExitProcess,NULL
& & .endif
MAIN& & endp
支付方式:
最新回复 (33)
不错,参考一下
代码写得漂亮啊
羡慕中,学习
学习ASM。。。
ASM 很好很强大
非常不错,而且一下三精华
这样做过于麻烦..直接跟踪游戏的基地址.就可以修改了
多次查找.过于麻烦!
很强大 就是看不懂啊
非常不错,而且一下三精华
收藏学习ASM。
好文,收藏。。。。
很牛很牛,高人
楼主研究下星际争霸吧
BS打个游戏还要作弊的。
代码着色的啊, 是用啥写的?&&RADASM 还是MASMPLUS啊.
今天收获不小啊,顶了
楼主和单机游戏干上了,从扫雷到红警。
LZ有没有程序??我现在还在玩红警呢
写的真的很不错
搞不懂为什么不同步这些数据,导致有作B的机会。
漂亮漂亮漂亮
代码写的不错,值得参考一下。
偶也是这么想的!
这样代码很好,谢谢分享
期待 RA3 。
相当不错...很漂亮的代码...
偶喜欢注释,代码看起来好懂。谢谢
不错,代码写的漂亮
功能上还没有去看,但是代码结构绝对属于漂亮,注释也很清晰!
学习,学习,我再学习!!!
喜欢详细的注释,谢谢楼主提供。
很强..学习中...
1.请先关注公众号。
2.点击菜单"更多"。
3.选择获取下载码。如果您喜欢本站 请至评价本站 后可实时查看最新内容
您可以用合作网站帐号登录:
( 07:07)生化危机7 金手指 speedfly & gayfriend PS4CHT v
( 07:07)怪物猎人 世界 金手指 speedfly PS4CHT v
( 07:07)苏菲的炼金工房 不可思议之书的炼金术士 金手指 speedfly PSVC v
文章总数:1681 篇
留言数量:42042 条
分类数量:22 个
标签总数:6361 个
链接数量:11 个
浏览总量:7761081 次
最后更新:日
运行时间:
本站简介七支剑的WP为个人站点 站内评论不代表本站观点 站点内容主要涵盖了个人收集的各主机金手指内容 如果本站内容触犯了您的利益 请联系站长EMAIL:
您可以用合作网站帐号登录:
微信支付支付宝【原创】制作 Yet Another Zombie Defense HD 修改器的收获心得 - 『精品软件区』
- 吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn
后使用快捷导航没有帐号?
只需一步,快速开始
请完成以下验证码
请完成以下验证码
查看: 2791|回复: 9
【原创】制作 Yet Another Zombie Defense HD 修改器的收获心得
阅读权限20
Yet Another Zombie Defense HD(又一个僵尸塔防高清版)
& && &&&《又一个僵尸塔防HDYetAnotherZombieDefenseHD》是一款融合了塔防的第三人称动作射击游戏。该游戏支持多人联机进行,单人难度很高,多人模式之下运用塔防的能力难度一般般,是一款老游戏的重制高清版了
QQ截图31.png (1.46 MB, 下载次数: 1)
19:08 上传
QQ截图53.png (23.28 KB, 下载次数: 6)
19:10 上传
& && &&&* 记录本次制作修改的的心得和收获
& && &&&1、游戏采用的是Unity3d引擎开发,即便是找到“基址”也是白费力气。(因为Unity是类似方式解析执行代码的,也就是触发某个函数才“释放”这个函数的汇编代码到内存)
& && &&&2、游戏有多处共享代码,例如:修改一击必杀时,虽然玩家攻击敌人是一击必杀,但是敌人攻击玩家也是一击必杀
& && &&&3、制作修改器一共学习了:CE编写Lua脚本去修改某些数值、共享代码的处理方法、动态搜索基址
CE脚本及注释
1、物品不减
[Lua] 纯文本查看 复制代码[ENABLE]aobscan(SubGoods,83 C4 10 C6 46 48 00 8B 47 1C 48 89 47 1C) // should be unique
SubGoods:// 直接以字节数组方式写入到“SubGoods”这个地址
db 83 C4 10 C6 46 48 00 8B 47 1C 90 89 47 1C
db 48 89 47 1C 8B 05 A8 CC 1B 01
2、武器不减
[Lua] 纯文本查看 复制代码[ENABLE]
aobscan(SubWeapon,00 00 00 00 55 8B EC 56 83 EC 04 8B 75 0C 8B 45 08 8B 40 08 83 EC 08 56 50 39 00) // should be unique
SubWeapon+30:
SubWeapon+30:
3、弹药不减
[Lua] 纯文本查看 复制代码[ENABLE]
aobscan(SubBullet,00 00 00 00 55 8B EC 56 83 EC 04 8B 75 0C 8B 45 08 8B 40 08 83 EC 08 56 50 39 00) // should be unique
SubBullet+39:
SubBullet+39:
4、一击必杀
* 前面都基本都搜索特征码然后修改汇编代码,也就没太多的知识点
* 这个共享代码主要是区分/处理“玩家扣血”和“敌人扣血”
[Lua] 纯文本查看 复制代码[ENABLE]
// 先根据特征码找到扣血的汇编代码
aobscan(OneShotKill,8B 80 88 00 00 00 3D 02 00 00 00 74 11 D9 86 A8 00 00 00 D9 45 0C DE E9 D9 9E A8 00 00 00) // should be unique
// 分配内存
alloc(newmem,$1000)
// 定义俩标签
label(code)
label(return)
// 【重点】比较对象标志,0x41是玩家,否则是敌人或建筑...(取敌人和玩家血量附近的数据进行比较,最终得出的标志,应该是不会改变的值)
cmp byte ptr [esi+DB],0x41
// 如果这个标志是玩家就跳到 nothing
je nothing
// 否则就把对象的血量压入到浮点寄存器
fld [esi+]
// 这里是跳到正常扣血处
jmp origin
// 压入攻击对象的伤害值
fld [ebp+0C]
// 计算对象扣血
fsubp st(1),st(0)
// 跳回游戏原本的汇编代码继续执行
jmp return
OneShotKill+13:
// 跳到我们注入的代码
registersymbol(OneShotKill)
OneShotKill+13:
// 还原我们注入的代码
db D9 45 0C DE E9
unregistersymbol(OneShotKill)
dealloc(newmem)
5、增加百万
[Lua] 纯文本查看 复制代码[ENABLE]
// 开启Lua脚本的标签
// local:定义一个变量
// AOBScan:扫描字节数组并返回一个“StringList”,一开始也很懵这个到底是什么,直接输出什么也没有,搞半天原来是类似数组的数据类型
// 金钱基址的固定偏移
local GetMoneys = AOBScan(&55 8B EC 57 81 EC 84 00 00 00 D9 EE D9 5D A0 D9 EE D9 5D 9C&)
// 当前金钱值
local nowMoney
// 代码地址
local codeAddr
// 金钱基址
local baseAddr
// 金钱地址(基址+偏移)
local moneyAddr
// 如果找到了这个金钱基址的固定偏移就修改金钱的值
if GetMoneys.Count == 1 then
// 先将地址转为10进制方式储存到codeAddr
codeAddr = tonumber(GetMoneys[0],16)
// codeAddr + 0x16 就是金钱基址的固定偏移汇编地址
codeAddr = codeAddr + 0x16
// 金钱基址的固定偏移
baseAddr = readInteger(codeAddr)
// 金钱基址的固定偏移减去 0x2F8 得到金钱的基址
baseAddr = baseAddr - 0x2F8
baseAddr = readInteger(baseAddr)
// 金钱的地址 = 金钱基址 + 0x10
moneyAddr = baseAddr + 0x10
// 读取当前的金钱
nowMoney = readFloat(moneyAddr)
// 将金钱加上一百万
nowMoney = nowMoney + 1000000
// 然后写回内存
writeFloat(moneyAddr, nowMoney)
// 结束 if 判断
// 关闭Lua脚本的标签
// 这个是禁用做的事,这里我们什么也不做,只需要开启脚本时增加一百万金钱的操作
另提供相关资源
游戏下载地址:
修改器、CT表、FRM等下载地址:
链接:https://pan.baidu.com/s/1miW0d9e 密码:nmp4
谢谢@Thanks!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
图呢???
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
厉害厉害!支持原创软件!我的cb用完了,不能评分
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限30
玩游戏不要用任何辅助才有意思。
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
玩游戏不要用任何辅助才有意思。
那要看什么游戏,拿钱买装备和开挂有什么本质区别?
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
支持原创软件!佩服佩服!
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
英文不好看不懂标题进来的,发现好像还不错,支持
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限10
游戏怎么玩啊&&我进去全屏过几秒就退出来了
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
阅读权限20
游戏怎么玩啊&&我进去全屏过几秒就退出来了
应该是缺少组件,百度找找闪退的解决办法
发帖求助前要善用【】功能,那里可能会有你要找的答案;如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】;如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!
免责声明:吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。
( 京ICP备号 | 京公网安备 87号 )
Powered by Discuz!
Comsenz Inc.

我要回帖

更多关于 ps4存档修改器 的文章

 

随机推荐