吾爱破解 - LCG - LSG |安卓破解|病毒分析|破解软件|www.52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

领取今日签到奖励
查看: 4732|回复: 55

[Android 原创] 《乐活兔》详细+多方法破解教程(可以用于破解U3D--Il2打包的游戏参考)

  [复制链接]
发表于 2019-1-6 01:07 | 显示全部楼层
本帖最后由 lzc090 于 2019-1-17 12:57 编辑

1.今天看到我发的游戏有人反映金币出现负数,我干脆从新修改一下

2.MOMO和Il2的修改方式论坛都有精华帖也写的非常详细,我就不打算再发了,除非可以写的比他好,不过有点难!

3.本游戏是coscos2dx游戏,和U3D  IL2的打包的游戏修改方式差不多,对想修改I2L游戏的人也是一个很好的参考

4.IL2的so文件里面ARM都是size 4 ,本游戏的size 是2,也是一大的区别,所以这游戏的修改方式也有限制(请注意留意进制)

5.部分修改方式我会用多方法进行修改,来扩宽新手的修改思维

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
科普

怎么判断打包方式呢,最简单的就是放入Killer里面会提醒。

coscos2dx lib里面有一个 libMyGame.so 文件

IL2打包--lib文件夹里面有libccp.so

他和Il2的打包方式其实是一样的就是把脚本放到so文件里面,本游戏你能再so文件看到这游戏的函数头,而IL2是看不到的!

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
准备:
将libMyGame.so直接丢进IDA进行分析,和IL2少了一部dump

------------------------------------------------------------------------------------------------------------------------------------------------------------------------
一.金币修改

1.直接搜索coin你会发现或者搜索DataManager所有需要的都可以找到

11.PNG

红线部分的DataManager::getCoin其实就是我们要修改的地方

看到DataManager也就知道数据管理,所有修改也是修改这里面的。

伪代码:

int __fastcall DataManager::getCoin(DataManager *this)
{
  return *((_DWORD *)this + 10);
}

ARM:
[Asm] 纯文本查看 复制代码
DataManager::getCoin(void)
.text:0024E19A 80 6A                         LDR             R0, [R0,#0x28]
.text:0024E19C 70 47                          BX  LR


以前正常人看到会修改成这样

LDR       R0, [R0,#0x28] ; 正常看到马上会给他修改成  MOV    R0,#fffffff

但请看下图
33.PNG 22.PNG
[Asm] 纯文本查看 复制代码
.text:0024E19A 80 6A                       LDR             R0, [R0,#0x28] 
.text:0024E19C 70 47                       BX              LR


会将 80 6A 70 47   修改成了   6F F0 70 41

你修改成MOV  R0,#fffffff,是SIZE 4,你会吧BX    LR也修改掉    最终造成游戏闪退而已

2.再说说我的修改出现的问题,怎么有负数或者正数

其实我一开始是将
[Asm] 纯文本查看 复制代码
.text:0024E19A 80 6A                       LDR             R0, [R0,#0x28]

修改成了   
[Asm] 纯文本查看 复制代码
.text:0024E19A 00 A0                       ADR             R0, 0x24E19C


这方法也是是从别人那里看来的。

上面的两个是意思是:

LDR-将地址,RO加#0x28值的地址的值放入R0

ADR-将0x24E19C地址放入R0

一个是具体数字,另一个是一个地址,是什么值就不知道了,就造成了部分正数,部分负数的问题(我模拟器测试是正数,手机就负数了)

我个人的修改方法:

[Asm] 纯文本查看 复制代码
.text:0024E19A 80 6A                       LDR             R0, [R0,#0x28]

修改成了

[Asm] 纯文本查看 复制代码
 .text:0024E19A FF 20                       MOVS            R0, #0xFF


也是SIZE 2  ,不过最大的数值也就255根本就不够花,因此我修改了另一个地方。

44.PNG

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

二.金币修改2

修改方法1:


在上面coin的搜索中其实我们还搜索到了一个就是addcoin

ARM:
[Asm] 纯文本查看 复制代码
1.text:0024E1A0 82 6A                       LDR             R2, [R0,#0x28]     将R0,#0x28地址的值给R2
2.text:0024E1A0 11 44                       ADD             R1, R2                 R1+R2
3.text:0024E1A2 81 62                       STR             R1, [R0,#0x28]      将R1的值存入R0,#0x28的地址
4.text:0024E1A4 70 47                       BX              LR


伪代码:      *(_DWORD *)(result + 40) += a2;

看到R0=R2=(_DWORD *)(result + 40)=当前总金币,R1=a2=增加的金币

那么我修改是这样的:

[Asm] 纯文本查看 复制代码
1.text:0024E19E 6F F0 70 41                 MOV             R1, #0xFFFFFFF              给R1给#0xFFFFFFF  值
2.text:0024E1A2 81 62                       STR             R1, [R0,#0x28]             将R1的值存入R0,#0x28地址    R0就是总金币
3.text:0024E1A4 70 47                       BX              LR


解释下:

MOV        R1, #0xFFFFFFF    的进制---  6F F0 70 41      SIZE 4

我直接将上面的代码的1=82 6A 、2=11 44替换成了MOV=6F F0 70 41 而已

就是将

[Asm] 纯文本查看 复制代码
1.text:0024E1A0 82 6A                       LDR             R2, [R0,#0x28]     将R0,#0x28地址的值给R2
2.text:0024E1A0 11 44                       ADD             R1, R2                 R1+R2


替换成了:

[Asm] 纯文本查看 复制代码
1.text:0024E19E 6F F0 70 41                 MOV             R1, #0xFFFFFFF       


替换后其实就是每次增加金币,将存入总金币不过不相加,是替换,因为+号删掉了。

修改方法2:

ARM:
[Asm] 纯文本查看 复制代码
1.text:0024E1A0 82 6A                       LDR             R2, [R0,#0x28]     将R0,#0x28地址的值给R2
2.text:0024E1A0 11 44                       ADD             R1, R2                 R1+R2
3.text:0024E1A2 81 62                       STR             R1, [R0,#0x28]      将R1的值存入R0,#0x28地址
4.text:0024E1A4 70 47                       BX              LR


伪代码:      *(_DWORD *)(result + 40) += a2;

修改后:

ARM:
[Asm] 纯文本查看 复制代码
1.text:0024E1A0 82 6A                       LDR             R2, [R0,#0x28]     将R0,#0x28地址的值给R2
2.text:0024E1A0 51 43                       MULS             R1, R2                 R1*R2
3.text:0024E1A2 81 62                       STR             R1, [R0,#0x28]      将R1的值存入R0,#0x28的地址
4.text:0024E1A4 70 47                       BX              LR


伪代码:      *(_DWORD *)(result + 40) *= a2;

获得的金币和本金相乘也是一个巨大的数值,也等于无限金币
-------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
三.星星修改

[Asm] 纯文本查看 复制代码
DataManager::addStar(int)
.text:0024E18A                                                     ; DATA XREF: LOAD:000046B0↑o ...
.text:0024E18A 42 6A                       LDR             R2, [R0,#0x24]
.text:0024E18C 11 44                       ADD             R1, R2
.text:0024E18E 41 62                       STR             R1, [R0,#0x24]
.text:0024E190 70 47                       BX              LR


int __fastcall DataManager::addStar(int result, int a2)
{
  *(_DWORD *)(result + 36) += a2;
  return result;
}

方法和金币的修改方式也是一样的

------------------------------------------------------------------------------------------------------------------------------------------------------------------------------

四:体力修改

1.修改方式一

DataManager::decLife   体力扣除
66.PNG 222.PNG
[Asm] 纯文本查看 复制代码
.text:0024E11E A0 F1 01 00                 SUB.W           R0, R0, #1     

   
改后:

[Asm] 纯文本查看 复制代码
text:0024E11E A0 F1 00 00                 SUB.W           R0, R0, #0


这样体力就不会扣除,等于无限体力

2.修改方式二

在修改体力扣除的同时,我们知道了总体力的位置,那么我们直接给总体力赋值5,不就也无限体力了

77.PNG 88.PNG

修改处1:

需要NOP几个比较麻烦                              

[Asm] 纯文本查看 复制代码
.text:0024E0A2 81 12                       ASRS            R1, R0, #0xA
.text:0024E0A4 01 EB D0 70          ADD.W           R0, R1, R0,LSR#31
.text:0024E0A8 10 44                       ADD             R0, R2
.text:0024E0AA 05 28                       CMP             R0, #5
.text:0024E0AC B8 BF                       IT LT
.text:0024E0AE 05 46                       MOVLT           R5, R0


修改后:

[Asm] 纯文本查看 复制代码
.text:0024E0A2  00 BF                      NOP
.text:0024E0A4 00 F0 20 E3             NOP
.text:0024E0A8 10 44                       MOVS            R0, 4
.text:0024E0AA 05 28                       CMP             R0, #5
.text:0024E0AC B8 BF                       IT LT
.text:0024E0AE 05 46                       MOVLT           R5, R0


当体力不满时,赋予体力V8=R0=4  直接给予到结果,修改够就是无限体力4

修改处2:修改跳转指令

1处:体力不满的判断          2处:体力满的判断              3处:结果


意思是当R1和R0的对比,当R1≥R0时直接跳到3处结果,当R1≤R0时,跳转到1处,判断体力是不是满

[Asm] 纯文本查看 复制代码
.text:0024E086 81 42                       CMP             R1, R0                                
.text:0024E088 12 DC                       BGT             loc_24E0B0  
   

修改成了:

[Asm] 纯文本查看 复制代码
.text:0024E086 81 42                       CMP             R1, R0
.text:0024E088 12 E0                       B               loc_24E0B0 


意思是直接执行2处的体力是满的,将体力满数字5直接跳转到3处的结果


99.PNG

修改处3:也是最简单的方法


[Asm] 纯文本查看 复制代码
.text:0024E0B0 28 46                       MOV             R0, R5


修改后:

[Asm] 纯文本查看 复制代码
.text:0024E0B0 05 20                       MOVS            R0, #5    
        

直接修改结果,不管上面的代码怎么运行,最后的结果直接给5  

----------------------------------------------------------------------------------------------------------------------------------------------------------------------------------
五:无限时间修改
游戏一开始有给予30分钟的时间,在这段时间中,使用的体力是不会减少的,现在告诉大家的就是修改无限时间

111.PNG

v1 = *((_DWORD *)this + 12);      这是总时间

return v1 - time(0);    这是总时间-当前时间=30分钟

那么我们就只需要将time(0)删除或者变成0就是无限时间了

[Asm] 纯文本查看 复制代码
.text:0024E308 00 20                       MOVS            R0, #0  ; timer          ---------这是(0)
.text:0024E30A BB F7 3C ED           BLX             time----------------------这是time(只要把这句NOP就可以了)


修改之后就是return v1 - 0   其实就是return v1

BB F7 3C ED   修改成  00  BF   00  BF

MuMu20190106003605.png

六.无限签到

不过好像没什么意义

11.PNG
看伪代码就知道这函数其实就是bool

只要将
[Asm] 纯文本查看 复制代码
.text:0024E1DA 00 21                       MOVS            R1, #0                   v3 = 0;


的0修改成1,那么意思都是可签到状态

[Asm] 纯文本查看 复制代码
.text:0024E1DA 01 21                       MOVS            R1, #1                 v3 = 1;


MuMu20190106022041.png

七.无限道具

121.PNG

[Asm] 纯文本查看 复制代码
.text:0024E17E 9A 1A                       SUBS            R2, R3, R2


*(result + 4 * a2) -= a3;        现有道具数-使用数=剩下数

那么只需要将a3直接改成0,就是不消耗道具,等于无限道具了

修改后:

[Asm] 纯文本查看 复制代码
.text:0024E17E 1A 1E                       SUBS            R2, R3, #0 



破解加整理教程花费了点时间,希望对大家有帮助,有错的地方也请大家指教。

免费评分

参与人数 20吾爱币 +23 热心值 +19 收起 理由
花魔 + 1 + 1 热心回复!
xiaoxi2011 + 1 + 1 谢谢@Thanks!
葡萄demo + 1 + 1 谢谢@Thanks!
qq244321232 + 1 + 1 谢谢@Thanks!
foxdog + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
spirtime + 1 谢谢@Thanks!
纸鸢King + 1 + 1 顶你,继续加油出好东西
谎言i + 1 + 1 谢谢@Thanks!
特百惠 + 1 + 1 这么好的教程,不评分,算是白在论坛呆着了。。。。
chenjingyes + 1 + 1 很适合逆向初学者 谢谢楼主分享
peter_king + 1 谢谢@Thanks!
stars-one + 1 + 1 很强,有点难学,可以当教程
凹TOO曼 + 1 + 1 谢谢@Thanks!
oranges + 1 + 1 我很赞同!
dongmie + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
平凡的飞鸟 + 1 + 1 我很赞同!
cxfzaysb + 1 + 1 我很赞同!
qaz003 + 1 + 1 谢谢@Thanks!
赖哥 + 3 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
CrazyNut + 3 + 1 膜拜大佬深夜发教程贴,明天再来学习一下!

查看全部评分

本帖被以下淘专辑推荐:

发帖求助前要善用论坛搜索功能,那里可能会有你要找的答案;

如果你在论坛求助问题,并且已经从坛友或者管理的回复中解决了问题,请把帖子分类或者标题加上【已解决】

如何回报帮助你解决问题的坛友,一个好办法就是给对方加【热心】,加分不会扣除自己的积分,做一个热心并受欢迎的人!

发表于 2019-1-6 03:01 | 显示全部楼层
本帖最后由 kenorizon 于 2019-1-6 03:03 编辑

这个游戏不是使用 Unity3D 引擎制作的游戏,而是使用 cocos2d-x 引擎制作的游戏(特征是 lib 里面有一个 libMyGame.so 文件,脚本就在这个文件里面)
自然是找不到 Mono / il2cpp 的相关文件的。

点评

感谢指正,这游戏我把他丢进Android killer 反编译完,它提醒的是U3D游戏,所以我就认为了。  详情 回复 发表于 2019-1-6 08:49

免费评分

参与人数 1热心值 +1 收起 理由
CrazyNut + 1 热心回复!

查看全部评分

发表于 2019-1-6 08:41 | 显示全部楼层
这个游戏不是使用 Unity3D 引擎制作的游戏,而是使用 cocos2d-x 引擎制作的游戏(特征是 lib 里面有一个 libMyGame.so 文件,脚本就在这个文件里面)
自然是找不到 Mono / il2cpp 的相关文件的。
 楼主| 发表于 2019-1-6 08:49 | 显示全部楼层
kenorizon 发表于 2019-1-6 03:01
这个游戏不是使用 Unity3D 引擎制作的游戏,而是使用 cocos2d-x 引擎制作的游戏(特征是 lib 里面有一个 li ...

感谢指正,这游戏我把他丢进Android killer 反编译完,它提醒的是U3D游戏,所以我就认为了。
发表于 2019-1-6 01:13 | 显示全部楼层
前排膜拜一下
发表于 2019-1-6 01:17 | 显示全部楼层
膜拜一下
发表于 2019-1-6 05:55 来自手机 | 显示全部楼层
谢谢楼主分享
发表于 2019-1-6 08:01 来自手机 | 显示全部楼层
和大佬学习
发表于 2019-1-6 09:13 | 显示全部楼层
感谢几个小时的付出,学习大佬的知识
发表于 2019-1-6 09:27 | 显示全部楼层
这个太牛了,看看去
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则


免责声明:
吾爱破解所发布的一切破解补丁、注册机和注册信息及软件的解密分析文章仅限用于学习和研究目的;不得将上述内容用于商业或者非法用途,否则,一切后果请用户自负。本站信息来自网络,版权争议与本站无关。您必须在下载后的24个小时之内,从您的电脑中彻底删除上述内容。如果您喜欢该程序,请支持正版软件,购买注册,得到更好的正版服务。如有侵权请邮件与我们联系处理。

Mail To:Service@52PoJie.Cn

快速回复 收藏帖子 返回列表 搜索

RSS订阅|手机版|小黑屋|联系我们|吾爱破解 - LCG - LSG ( 京ICP备16042023号 | 京公网安备 11010502030087号 )

GMT+8, 2019-1-24 04:49

Powered by Discuz!

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表