需要的工具:IDA,APK改之理,八门神器

起因:CatWar2,钻石不够,而且用八门神器修改之后,钻石数会自动清0
 

线索:
 

顺藤摸瓜,搜索bg_sysmsg

发现其被引用于libhelloworld.so文件中

引用:
.so 文件是动态链接库文件,相当于 win下的 .dll 文件
于是操起IDA,ALT+T搜索bg_sysmsg

经过一番观察,根据函数名,来到了
引用:
ShopScene2::init(void)
出现在初始化里,然后在函数列表里找到ShopScene2::ShowSysMsg(int)。
引用:
.text:000E864A                 MOVS    R0, 0x3F800000
.text:000E864E                 BL      _ZN7cocos2d11CCDelayTime18actionWithDurationEf ; cocos2d::CCDelayTime::actionWithDuration(float)
用了延迟,第一张图的提示,也是显示一段时间就消失了了。猜测就是调用这个函数,显示信息。

再次查找引用
 

进入第一个函数,这个函数引用了一个很可疑的函数:WRIntEncrypt::Get(void)

引用:
BL      _ZN12WRIntEncrypt3GetEv ; WRIntEncrypt::Get(void)
看一下这个类的所有函数,目测就是要找的了。
 

来到构造函数:
(PS:R0是this指针)
引用:
.text:000F1260                 PUSH    {R4-R6,LR}
.text:000F1262                 MOVS    R5, #0
.text:000F1264                 STR     R5, [R0]
.text:000F1266                 MOVS    R4, R0
.text:000F1268                 BLX     lrand48
.text:000F126C                 STR     R5, [R4,#8]
.text:000F126E                 STR     R0, [R4,#4]
.text:000F1270                 BLX     lrand48
.text:000F1274                 STR     R0, [R4,#0xC]
.text:000F1276                 STR     R5, [R4,#0x10]
.text:000F1278                 MOVS    R0, R4
.text:000F127A                 POP     {R4-R6,PC}
确定这个类成员有5个,初始化之后
+0     0
+4     随机数1
+8     0
+c     随机数2
+10  0

再看WRIntEncrypt::Set(int)
(PS:R1是参数,就是要设置的数值)
引用:
.text:000F1118                 LDR     R3, [R0,#4]
.text:000F111A                 STR     R1, [R0,#0x10]
.text:000F111C                 EORS    R3, R1
.text:000F111E                 STR     R3, [R0]
.text:000F1120                 LDR     R3, [R0,#0xC]
.text:000F1122                 EORS    R1, R3
.text:000F1124                 STR     R1, [R0,#8]
.text:000F1126                 BX      LR
从这里就看到
+0     未加密值 异或 随机数1
+4     随机数1
+8     未加密值 异或 随机数2
+c     随机数2
+10  未加密值

struct EncryptInt
{
  int eint1;//加密数值
  int key1;//随机密钥
  int eint2;//加密数值
  int key2;//随机密钥
  int realint;//原始数值
};

也就是说,游戏保存了三份数据,二份是加密过,一次是未加密的。

再看看WRIntEncrypt::Get(void)
引用:
.text:000F120C                 PUSH    {R4,LR}
.text:000F120E                 LDR     R3, [R0,#EncryptInt]
.text:000F1210                 LDR     R2, [R0,#EncryptInt.key1]
.text:000F1212                 LDR     R1, [R0,#EncryptInt.key2]
.text:000F1214                 MOVS    R4, R0
.text:000F1216                 EORS    R2, R3
.text:000F1218                 LDR     R3, [R0,#EncryptInt.eint2]
.text:000F121A                 EORS    R3, R1
.text:000F121C                 LDR     R1, [R0,#EncryptInt.realint]
.text:000F121E                 MOVS    R0, #1
.text:000F1220                 CMP     R3, R1
.text:000F1222                 BEQ     loc_F123C
.text:000F1224                 CMP     R2, R3
.text:000F1226                 BEQ     loc_F1246
.text:000F1228
.text:000F1228 loc_F1228                               ; CODE XREF: WRIntEncrypt::Get(void)+38j
.text:000F1228                                         ; WRIntEncrypt::Get(void)+3Ej
.text:000F1228                 MOVS    R0, R4
.text:000F122A                 BL      _ZN12WRIntEncrypt8CheatingEv ; WRIntEncrypt::Cheating(void)
与加密的数值做了比较,不相等就进入作弊处理WRIntEncrypt::Cheating(void)

知道了加密怎么处理,就很容易了。回到手机,八门神器定位到realint

struct EncryptInt
{
  int eint1;
  int key1;
  int eint2;
  int key2;
  int realint;
};

然后eint1,eint2,realint都改为0xFFFFFF,key1,key2清零。任何数值异或0都不变。



不会APKDIY,只能先这样了。最后发现,钻石退出以后,重新进入游戏会清0.可能还有别的地方有验证。不过修改完钻石,把英雄升级之后,基本就无敌了。也算是够用了。

.so文件移动游戏破解范例相关推荐

  1. 《剑魂之刃》游戏破解

    这个游戏很怪, 有的文件加密了, 有的文件没有加密, .so 文件很大, 用 ida 分析了很长时间 但是破解文件 有现成 的函数在 ccfileutils 类中 比较容易解密 下面是 解密的一些图片 ...

  2. AppStore内收费软件和游戏破解方法--证实可行

    AppStore内收费软件和游戏破解方法--证实可行 内容引自CNPDA,国外论坛已经有好多人证实是有效的的.但破解的前提是有一份已购买的能在iPhone上运行的软件. 你需要以下东西- 1.GNU ...

  3. 听鬼哥说故事之U3D游戏破解分析

    平时里,我们休息的时候喜欢玩点休闲小游戏,不过对于游戏发烧友来说,玩点好玩的稍微大型的游戏则是最好的乐趣,好,今天我们对一款Unity 3D引擎开发的跑酷游戏进行破解分析,主要修改方式为dll文件的相 ...

  4. Android游戏破解练习-大圣觉醒

    Android游戏破解练习-大圣觉醒 用Android Skiller搜下关键字看有没有PaySuccess 发现有关键字 那么就用Jadx继续搜索 找到关键字找到它对应类,右键查找引用 看看哪里引用 ...

  5. 推箱子游戏破解方案的MATLAB代码实现

    <推箱子>游戏破解方案的MATLAB代码实现 前言 文件介绍与使用说明 (1)主脚本Sokoban.m (2)函数can_box() (3)函数find_can_boy() (4)函数ha ...

  6. 视频教程-C语言编程入门/C二级神器/游戏破解-C/C++

    C语言编程入门/C二级神器/游戏破解 云知梦创始人,国际架构师,11年互联网培训和开发经验,曾在港电讯盈科.北大青鸟集团.远大教育.北京易第优教育等公司任职曾获得美国红帽RHCA构架师和RHCDS数据 ...

  7. 基于NMAP日志文件的暴力破解工具BruteSpray

    基于NMAP日志文件的暴力破解工具BruteSpray 使用NMAP的-sV选项进行扫描,可以识别目标主机的端口对应的服务.用户可以针对这些服务进行认证爆破.为了方便渗透测试人员使用,Kali Lin ...

  8. 使用JohnTheRipper对有密码加密的ZIP压缩包文件进行暴力破解

    背景 对加密的ZIP压缩包进行密码破解的方式有很多,网上也有很多文章,今天只介绍一种--JohnTheRipper. JohnTheRipper 摘自百度百科: John the Ripper,是一个 ...

  9. 常见Andriod游戏破解搜索关键字

    Andriod游戏破解相关: 爱游戏支付破解: 关键方法名:paysuccess paySuccess 支付成功 PayCancel 支付取消 payFailed 支付失败 onFinished 支付 ...

最新文章

  1. 一b变频器说明书参数一览表_电工常见的23个变频器问题整理,附专业解答
  2. 实现Evernote的OAuth授权
  3. 深入浅出HTTPS工作原理
  4. 通过ProGet搭建一个内部的Nuget服务器
  5. Java学习笔记_身份验证机制
  6. Typecho 动漫单栏主题First
  7. 我对java的理解(二)——反射是小偷的万能钥匙
  8. 基于Docker的开发模式驱动持续集成落地实施
  9. 拓端tecdat|R语言群组变量选择、组惩罚group lasso套索模型预测分析新生儿出生体重风险因素数据和交叉验证、可视化
  10. oracle8i数据库修复,用ORACLE8i修复数据库坏块的三种方法
  11. 线上幽灵:世界头号黑客米特尼克自传改
  12. bada千字文应用程序简介
  13. 调停者模式 java_《JAVA与模式》之调停者模式
  14. 清华大学MOOC《操作系统》第1讲:“操作系统概述”总结(转)
  15. 网站运维:git工具(10):GitLab安装和使用
  16. 接口测试 — 使用Requests库发送POST请求
  17. 计算机专业考MBA有优势吗,工作后考mba有什么好处
  18. 智慧旅游建设包含了哪些内容?
  19. ffprobe获取视频的分辨率帧数等信息
  20. (附源码)springboot高校二手教材管理平台 毕业设计 231057

热门文章

  1. C++ API 设计 10 第五章 设计风格
  2. Qt之界面实现技巧——包括任务栏不显示,自定义窗体,最大化最小化按钮等等全面总结
  3. RHCE 7.0 考试命令整理
  4. cf修改游戏客户端是什么意思_cf封号原因是非法篡改游戏客户端是什么意思
  5. 苹果手机白屏_安卓用久了卡顿 苹果用久了闪退 究竟是因为啥?
  6. Python实现消息发送
  7. Python_删除TXT文件中不想要的内容
  8. 手机IMSI码规则更新-通过IMSI判断运营商的方法
  9. 榆熙电商:拼多多商家怎样开通电子面单服务?有何优势?
  10. K8S 完全安装手册