吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 16275|回复: 33
收起左侧

[Android 原创] 新奇,会封号的单机游戏--逆向破解教程

  [复制链接]
digyth 发表于 2020-7-10 21:23
本帖最后由 digyth 于 2020-7-17 12:48 编辑

破解目标

游戏:萌萌塔
各大应用商店均有此单机游戏,可以自行下载,小改怡情大改伤身,虽说是单机却是会封号的哦

{:1_890:}

所需工具

1、IDA
2、apktool或MT管理器
3、AndroidStudio

一、拆包

使用MT管理器工具,将apk安装包反编译,可以得到一系列的资源文件,保险起见,我先用MT把签名校验去掉了


01.jpg

二、IDA反汇编so

打开lib文件夹,找到下面的so文件,可以看到有一堆的so文件,但是游戏的主so文件一般都会异常地大,因此我们可以快速锁定


02.jpg

ida打开so之后,搜索encrypt(英文释义:加密)可以找到数值加密函数Encrypt(之前用GG修改器搜索不到任何数值,所以直接可以判定加密了),不过要加密函数没什么用,我们还可以找到解密函数Decrypt,然后通过hook它来返回我们想要的数值,屏蔽游戏的返回值,实现修改游戏数值


03.png

三、HOOK解密函数

接下来我们使用InlineHook方法来hook解密方法,使其返回我们想要的数值

NDK开发编写注入程序

使用AndroidStudio创建一个NDK项目,包名类名与原Activity相同,将libMyGame.so读取,dlsym得到原Decrypt函数的地址,使用inlineHook将解密函数hook掉,重定向至自己定义的函数,在返回的时候把自己想要的数值传回去

void*  handle=dlopen("libMyGame.so",RTLD_LAZY);
void* (*func_decrypt)(int,int const*,char*,int)=NULL;
int new_decrypt(int a1,int const* a2, int* a3, int a4){
    if(isNumberHook&&*a3==numberHookValue[0]){
        *a3=numberHookValue[1];
    }else{
        return func_decrypt(a1,a2,a3,a4);
    }
    return a1;
}

int main(){
hook((uint32_t)dlsym(handle,"_ZN6Encode7decryptEPKvPvi"),(uint32_t)new_decrypt,(uint32_t**)&func_decrypt);
return 0;
}

之后build项目生成inject.so文件,放入lib目录下面

修改smali代码

通过Manifest.xml找到程序入口Activity为org.cocos2dx.cpp.AppActivity,然后用DEX++编辑器,在这个Acitivty的onCreate方法开头插入smali代码加载用来注入的so

const-string v0,"inject"
invoke-static {v0}, Ljava/lang/System;->loadLibrary(Ljava/lang/String;)V

在开头声明native的main方法并在loadLibrary之后调用

打包运行

接下来我们继续使用MT管理器将apk打包回去并签名,安装好之后运行

四、修复解密函数

然而当我势在必得打开游戏的时候,游戏崩了。。。
之后我尝试了各种方法,就快要放弃的时候。。。
突发奇想(′⊙ω⊙`)!直接F5伪代码,按照解密逻辑一波抄下来,不再去调用原来的解密函数,还真可以用了,挺无语的( ̄o ̄)....

int new_decrypt(int a1,int const* a2, int* a3, int a4){
    int i;
    for(i=0;i<a4;i++)*((byte*)a3+i)=*(byte*)(*((byte*)a2+i)+a1+256);
    if(isNumberHook&&*a3==numberHookValue[0]){
        print("decrypt %d",*a3);
        *a3=numberHookValue[1];
    }
    return a1;
}

五、重大的发现

但是由于某种原因我并不想结束,并且单单是数值修改限制很多,比如不能实现物品的无中生有,于是我想找到添加物品的方法
在我翻了一圈函数表之后,发现了某个特殊的添加物品函数,参数类型中带有lua,于是我怀疑这是个由lua编写逻辑的游戏


04.png

翻了安装包的资源文件,还真找到了各种lua文件,还有游戏物品的数值定义,居然还都没加密!


05.jpg

在这些lua之中我发现了一个特殊的lua脚本,里面写有各种游戏控制方法的详细说明


11.jpg

六、执行lua命令

看到没加密,我就觉得不对,这直接放明文岂不是谁都能改?果然我猜对了,当我在某个事件触发时的执行命令中插入了添加物品命令之后,打包运行,又崩了( ̄o ̄)....
从崩溃报告中可以看出,lua文件加载之前会经过完整性校验,当校验失败之后会产生未捕获的错误导致崩溃。。
这么说我也没法加载自己的lua文件了,肯定找不到对应的校验码,只能继续看看哪里有突破点了
SO文件里面找了下文件校验部分,发现函数都被去符号了,全部都是sub_xxx的形式,万念俱灰的时候,抱着死马当活马医的心态,把lua都翻了一遍,在其中一个lua里面发现了一段供C层动态执行lua代码的接口,哇救星啊


07.jpg

在SO文件中也找到了这个接口函数


08.png

但是光有函数不行,我们还得得到对象,于是继续找引用,然后发现了需要ScriptExecutor


09.png

再往上找,发现来源是ScriptMgr的单例模式,于是至此可以得到一个获取luaState思路


10.png

通过ScriptMgr::singleton()得到ScriptMgr对象,偏移10即可得到luaState对象
在NDK开发中dlsym得到ScriptMgr::singleton函数地址并直接调用,偏移获取luaState并执行函数,成功实现使用lua命令调用游戏内置的API进行各种操作!
ps:不会lua的我也没办法了╮(╯▽╰)╭

七、游戏内广播利用

但是这样还是得慢慢地一层一层打上去,有没有方法能够跳层呢?
继续翻lua文件,发现一个lua内定义了各种各样的广播id,其中有个到下一层,于是我想到可以利用这个消息id跳层


13.jpg

在so中发现了发送广播的函数,用之前的方法溯源到一个sington函数得到对象,然后调用发送广播的函数发送"到下一层"广播,成功跳层!


12.png

八、破解结束

至此破解结束,如有疑问请留言
这是我所实现的功能样例图,可以参考修改破解的方向,无敌功能过于强大就留给大家自行发挥了!


14.jpg

结束语

至于我为什么要破解这个单机游戏,吃相过于难看
提供存档上传下载,等清理垃圾的时候误清存档清了之后,云端存档就无法下载了,客服找回需要提供一串游戏中小小的数字
这就与合同之中拿隐形墨水写了个坑人条款有什么区别,谁会特意去记那玩意?
本来我觉得游戏还行氪金支持了一下,结果告诉我说吞就吞了
既然找不回来了,那就自己动手丰衣足食咯(╯‵□′)╯︵┻━┻

强调

仅提供破解思路,不提供任何成品代码!
文章目的是记录破解思路,仅会破解这个单机游戏没什么意义,要会具体的破解流程*



小白第一次发帖,若有不足请指教,写文不易希望给个好评( ̄▽ ̄)

免费评分

参与人数 4吾爱币 +2 热心值 +3 收起 理由
Ljingwei + 1 谢谢@Thanks!
hgfty1 + 1 欢迎分析讨论交流,吾爱破解论坛有你更精彩!
翟先生 + 1 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩!
withergamer17 + 1 我很赞同!

查看全部评分

发帖前要善用论坛搜索功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。

 楼主| digyth 发表于 2020-7-12 16:53
因为初次接触吾爱论坛,对发帖工具操作不熟悉,所以会出现排版错乱的现象,但是每次都需要等1天审核完之后才能修改,我也很无奈,这篇帖子我会逐渐修缮,也希望知道能如何在审核时重新编辑方法的能告诉我

点评

抱歉,目前新手发帖需要先审核,现在通过了,可以边界了。  详情 回复 发表于 2020-7-14 18:22
 楼主| digyth 发表于 2020-7-17 18:52
wwwgaoxi 发表于 2020-7-17 18:20
有一个打鱼的游戏app 挺小众的,我想玩单机的,大哥 能不能帮我看看可否改成单机的?蛮喜欢玩的,可以有偿~

本质上是单机游戏就行,但是那种几乎完全依赖联网的就不行了,而且我也不一定能成功绕过登录,毕竟我还算新手
 楼主| digyth 发表于 2020-7-15 11:43
Hmily 发表于 2020-7-14 18:22
抱歉,目前新手发帖需要先审核,现在通过了,可以边界了。

这一段标题打上之后一直会重复显示,其它的标题不会出问题,不知道是不是md显示的bug
## 二、IDA反汇编so
img.png

点评

对,是bug,不要管这个了。  详情 回复 发表于 2020-7-15 11:46
一米宽的信仰 发表于 2020-7-11 12:46
大佬,游戏呢
 楼主| digyth 发表于 2020-7-11 13:29
第一次发帖子,图片没处理好,已重新编辑,请等待审核完
Hmily 发表于 2020-7-14 18:22
digyth 发表于 2020-7-12 16:53
因为初次接触吾爱论坛,对发帖工具操作不熟悉,所以会出现排版错乱的现象,但是每次都需要等1天审核完之后 ...

抱歉,目前新手发帖需要先审核,现在通过了,可以边界了。
Hmily 发表于 2020-7-15 11:46
digyth 发表于 2020-7-15 11:43
这一段标题打上之后一直会重复显示,其它的标题不会出问题,不知道是不是md显示的bug
## 二、I ...

对,是bug,不要管这个了。
奇奇小霸王龙 发表于 2020-7-17 11:31
应该很牛逼 但是看不懂
0119 发表于 2020-7-17 17:46
看起来就很高级
wwwgaoxi 发表于 2020-7-17 18:20
有一个打鱼的游戏app 挺小众的,我想玩单机的,大哥 能不能帮我看看可否改成单机的?蛮喜欢玩的,可以有偿~
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 14:59

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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