ce修改unity游戏_游戏安全逆向(CE修改器学习2)

怎么秒杀

  1. 提升植物攻击力,达到一击扣完僵尸血量
  2. 使僵尸血量直接归0

什么是CALL指令

按照我的理解

汇编中的CALL指令,就像C语言调用函数一样

豌豆攻击函数(攻击伤害,攻击对象)
0053186D - 7E 08                 - jle 00531877
0053186F - 53                    - push ebx        0
00531870 - 50                    - push eax        14
00531871 - 56                    - push esi        1AC252E0
00531872 - E8 59FAFFFF           - call 005312D0   豌豆攻击CALL

如果要使用豌豆攻击call,首先就要先传入他的三个值。

怎么看一个CALL要传入几个值,我是通过这个CALL上面 push 指令,比如上面那个

CALL 005312D0 上面 先是三个push ,然后才有 jle 这些其他指令,所以这个call 是有三个值的。

其余的可以通过百度搜索。

了解CE内存浏览器按键功能

850afca8a77df00c22f587ca08bde789.png
  • Toggle Breakpoint :下断点
  • 运行:断下的地方继续运行
  • Step Into:步入
  • 步过:跳过,比如你跟数据时候,跟到了有CALL的地方,你不想跟进去,就可以点这个
  • Step Out:跳出CALL,比如你跟数据时候,你觉得这个CALL里面没你想要的东西了。你就可以点一下直接跳过这个CALL。

僵尸血量寻找

打开CE,附加游戏。

先查找僵尸血量

第一步

等僵尸出现 --》选择数据类型四字节 --》 搜索未知值

d504147266f2fff9a45c9f13a9d598ca.png

第二步

在豌豆攻击到僵尸后,搜索减少的数值。因为我们现在不知道豌豆攻击一次扣多少血量,所以不能选择精确的减少数值。

052f6f597c3fcead55d5979e0d374cef.png

第三步

重复第二步,直到搜索出来的值比较少,往下拉,查看哪个值比较像血量

fbf7171af6e706a55a65e525208d75b4.png

尽量避免不要让僵尸那么快死亡,不然后续就比较麻烦。通常血量就是红框框柱的地方,但没打到僵尸时候,他不会是动态的,只有僵尸被攻击到,才会发生变化。

秒杀功能实现1

将这个地址添加到列表中,对其进行查找访问,可以使用快捷键F5

005312FE - 8B BD C8000000  - mov edi,[ebp+000000C8]
0052D71B - 8B B0 C8000000  - mov esi,[eax+000000C8]
00531319 - 89 BD C8000000  - mov [ebp+000000C8],edi
0052A527 - 39 8B C8000000  - cmp [ebx+000000C8],ecx
00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00   比较血量

b98a02cd5b0180c56e7a78f3d5301429.png

会出现两个CMP, 我们重点关注

00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00   比较血量

这一个,因为他是在判断现在的血量是否等于 0.我们选择他,显示反汇编程序进入内存浏览器。

点击 CMP 那一段 ,快捷键F5对其下断

7238d33b23b5ddd73627f72f33c556cc.png

让豌豆攻击一下僵尸,发现游戏断下了,回到CE。

点击 Step Into 跟一下

c9834ac0348aa45756669db492a03095.png

5c02558bbaacb0fb73b0b2ddeaeeb124.png

但你一步一步跟下去时候会发现

 执行到 jg 005317A9 后 
 mov ecx,[esp+24]  这一段会直接跳过,不执行,
 跳到  pop edi 处
 
 jg 005317A9  --》 pop edi

建议修改之前,先复制一下原指令建议修改之前,先复制一下原指令建议修改之前,先复制一下原指令

现在开始,我们可以尝试着让 jg 不跳转 ,就是 nop 掉,转为空地址,看下会怎样。

506f40aeced2762f026694e2b576ac8e.png

Nop 后,等豌豆在攻击到僵尸,游戏断下,在重新 Step Into 跟下去,就会发现,被跳过的代码正常执行了。

把CMP 下了断点那处 在按 F5 取消断点,点击运行,回到游戏中就会发现,普通僵尸已经被秒杀。

头盔僵尸秒杀功能实现1

除了普通僵尸,还有带头盔的僵尸,当头盔僵尸出现时候,就发现秒杀功能失效了。

c8fcba09d6f8fe57b4759bb282b52c77.png

重新对 CMP 那里下断,当豌豆攻击到头盔僵尸时候,会发现断不下来,说明这个CALL里面不是对他血量判断的,我们就跳出去进行跟。

首先等豌豆攻击到普通僵尸时,游戏断下。

在内存浏览器中点击 Step Out

03a4bb0805b780b625a3b1c5c2d81945.png

跳出这个CALL

00531877 - 5F                    - pop edi

来到了这里。先运行游戏。并且把断点取消。

快捷键Ctrl +B 删除断点

e41e5e9aaa903a16ed494c002204d741.png

运行游戏后,在这个CMP 中 按 F5 下断点,看下能不能断下

00531838 - 83 BE D8000000 00     - cmp dword ptr [esi+000000D8],00 { 0 }

当豌豆攻击到头盔僵尸时,会发现断下了。

按 步过 慢慢跟下去。会发现

0053183F - 74 15                 - je 00531856
​
0053186D - 7E 08                 - jle 00531877

这两个地方,都会跳过中间的代码,直接运行到下面,和上面普通僵尸的很像。可以按照刚才处理普通僵尸的试试,对其跳转设置成不跳转。

最后发现

0053186D - 7E 08                 - jle 00531877 

处理这一段才有用

将其Nop 掉

Nop 大法果然好用。

秒杀功能实现2

除了把判断跳转Nop 。

还可以把豌豆攻击力修改实现秒杀功能

回到一开始普通僵尸判断血量的地方

00531783 - 83 BD C8000000 00 - cmp dword ptr [ebp+000000C8],00   比较血量

下断,等豌豆攻击僵尸时,注意右下方堆栈窗口

53c93c80a1cc5baa9b5ca58d602697f4.png

注意返回地址的参数

双击进去

00531872 - E8 59FAFFFF           - call 005312D0
00531877 - 5F                    - pop edi

会来到这个地址

按照上面的经验,也是找一个CMP 指令进行下断分析

0053185A - 83 BE C4000000 00     - cmp dword ptr [esi+000000C4],00 { 0 }

我选了这个。

断下后,按Step Into 一路跟下去,

来到那个CALL时候,观察右方寄存器的值

7370b09c50e4bf39ce6c3cbf5b937019.png

都是十六进制

先看EAX
EAX = 000000014   十六进制转成十进制 = 20

细心的会发现,豌豆攻击普通僵尸,每一下就是扣血20.那不放大胆猜测,这里的EAX就是 豌豆的攻击力。

怎么改

0053186F - 53                    - push ebx
00531870 - 50                    - push eax
00531871 - 56                    - push esi
00531872 - E8 59FAFFFF           - call 005312D0

寄存器的EAX的值,就是通过 push eax 传进去的。

那么熟悉hook 的可以通过 hook 传进去。但是懒人有懒人的法

观察右方寄存器。ESI,EDI等的值都非常大。我们可以 将 push eax 修改成 push esi传进去

84d4a12a581b3d0c3e516a14cba45da2.png

头盔僵尸秒杀功能实现2

继续在CMP处下断

0053185A - 83 BE C4000000 00     - cmp dword ptr [esi+000000C4],00 { 0 }

通过step into 跟进去

00531866 - E8 75F7FFFF           - call 00530FE0   头盔僵尸血量CALL

会跟进这个call里面

9c6512f8ad3266a7da55972d70980cc0.png

继续Step into 跟下去。来到

00530FEF - C7 45 54 19000000     - mov [ebp+54],00000019 { 25 }
00530FF6 - 8B BD D4000000        - mov edi,[ebp+000000D4] { 头盔僵尸最大血量}
00530FFC - 8B 8D D0000000        - mov ecx,[ebp+000000D0] { 头盔僵尸现在的血量}
​

这里。观察右方的寄存器

2b330cccb1627ea66dfa0edcd21c328a.png
EDI = 00000172  十六进制转十进制 = 370
ECX = 0000014A  十六进制转十进制 = 330

既然知道存放头盔僵尸血量的地方,那么就可以进行秒杀处理了

秒杀处理1

可以对僵尸最大血量置0,然后让僵尸现在的血量指向存放最大血量的EDI

8ae9587539ef3e997ee4fa657982bd31.png

这样子只要一攻击,头盔僵尸就会被秒杀

秒杀处理2

第二种比第一种更简单。就是直接把当前血量置0

be7c612fec1c315c1a0d596ec34442c6.png

也可以达到秒杀效果

结尾

植物大战僵尸的却很适合练手,每一次分析都会发现新的玩意,很有意思。

借用一句看到很不错的话:

技术不分对错.人性才分善恶.

学习逆向的人必须身心放正.

身心放正之人手握屠龙刀,也是保家卫民.

  • 7
    点赞
  • 18
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
ENABLE_UNITY_COLLECTIONS_CHECKS是Unity中的一个编译器宏定义,用于启用Unity Collections库中的线程和处置安全检查。这个宏定义可以确保在使用Unity Collections库时,对于线程安全和资源释放的问题进行检查,以避免潜在的错误。\[1\] Unity Collections库提供了一些关键的类数组类型,如NativeArray和NativeSlice,以及一些数据结构,如NativeList和NativeQueue,这些都受到ENABLE_UNITY_COLLECTIONS_CHECKS宏定义的影响。\[2\] 但是需要注意的是,ENABLE_UNITY_COLLECTIONS_CHECKS主要用于单元测试框架中的断言,而不是用于生产代码的测试。因此,在生产代码中使用这个宏定义可能会导致性能下降,因为它会增加额外的检查和开销。\[3\] #### 引用[.reference_title] - *1* *3* [unity断言_Unity断言库](https://blog.csdn.net/culiao6493/article/details/108642656)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] - *2* [[Unity ECS] Unity Collections Package](https://blog.csdn.net/u013716859/article/details/122278432)[target="_blank" data-report-click={"spm":"1018.2226.3001.9630","extra":{"utm_source":"vip_chatgpt_common_search_pc_result","utm_medium":"distribute.pc_search_result.none-task-cask-2~all~insert_cask~default-1-null.142^v91^insertT0,239^v3^insert_chatgpt"}} ] [.reference_item] [ .reference_list ]
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值