吾爱破解 - 52pojie.cn

 找回密码
 注册[Register]

QQ登录

只需一步,快速开始

查看: 40700|回复: 82
收起左侧

[Android 分享] 听鬼哥说故事之对于so文件的简单分析

  [复制链接]
听鬼哥说故事 发表于 2014-6-17 11:57
本帖最后由 听鬼哥说故事 于 2014-6-20 17:27 编辑

游戏名称:小黄人快跑
测试类型:修改香蕉数量(类似金币)
主要方式:IDA进行分析,修改so文件

此文,仅献与同我一样刚开始学习so文件的朋友共勉~
今天我们来分析的是小黄人快跑,小黄人的形象从电影上面一直都蛮好的,现在都拍到了第二部了,所以我们找到这个游戏来进行分析。
第一层次分析:
拿到游戏,首先我们得先安装看看有什么地方是值得破解的。
通过观察,我们发现游戏中主要的消费方式在香蕉和金币上面,既然这样,那么我们就先看看支付上面是否可以直接破解内购。购买截图如下图所示:
图片3.png
和游戏支付的方式,那么就查询相关资料,例如以前我的教程中对onPayFailed方法的修改,对onBillingFinish方法的修改,在这里可能是对移动支付进行了升级,没法直接那样操作。既然这样,那么我们就查看下Logcat,看看有无有价值的信息。
图片4.png

通过多次测试,我们发现在点击进入游戏支付的时候有这行输出,那么好,我们就跟进观察这行代码,这行代码后面肯定是启动支付流程的相关代码。
图片5.png

对于smali代码不熟悉的同学,那么直接使用jd-gui打开jar文件查看吧,如下:
图片6.png

搜索找到我们发现的特征字符,如下:
图片7.png

这样,我们直接查看x()类:
图片8.png

我们可以发现,doBilling方法,按照名称来想,我们也感觉就是购买的时候使用的,所以我们追寻它去。
全文搜索doBilling效果不太理想,所以我们可以直接找GameInterface这个类的相关调用方式了。
图片9.png

好了,到了这个类,根据接口名称,我们可以猜到,这个是支付的回调函数。回调函数的意思,也就是判断是否支付了,然后返回相关数据,由其他算法来进行香蕉或金币数量的增加。
Game.nativeBillingDone,看到这个native方法,我们就需要对so文件进行分析操作了,我们找到Game类,看看是调用的哪个so文件,搜索system.loadlibrary
图片10.png

晓得了so的名称,那么我们就挂起idajava可以直接调用使用的肯定都是export导出函数,所以我们在export中搜索nativeBillingDone:
图片11.png

然后看到这个方法:
图片12.png

B是调用方法的意思,这里调用addCash方法,所以我们更清楚的明白,这个就是增加金币阿,名字都这么通俗易懂了,再猜不到就对不起人家作者了。
先大致浏览一下方法是干什么的:
图片13.png

好,大致看懂第一段代码后,我们往下翻翻:
图片14.png

通过图片中的文字说明,我们也简单能够明白,我们需要做的,就是先测试一下,将这个addcash(int)方法的传入参数设置为8会怎么样,是不是会增加金币。所以我们回到最初分析的时候,看这里:
图片15.png

我们通过查找可以知道Game.m就是一个int类型的数据,那么,我们就明白了,我们可以直接操作Game.m的数值,将其设置为8即可,同时将这行Game.nativeBillingDone调用方法放到一个我们明显能用按钮控制的位置。
图片16.png

阿门,感谢作者,看到这行输出,这个是我们点击支付界面的返回按钮产生的,因为支付过程中会将游戏声音暂停,所以才会产生这个情况,方便开发者观察数据。
起来,我们是可以通过自己在主类Game.smali中自己寻找其他地方的,能看到log只是更加方便了我们的分析速度而已,我们手动寻找代码也是可以的。所以没有发现log,只是在时间上面花费会多一点,其他影响是不大的。
好,那么我们就直接找到这行log的打印地方,在它上面调用nativeBillingDone方法:
图片17.png

第一行,设置v1=8,第二行,调用我自己的方法打印int数据看是否赋值成功,同学们可以忽略掉的,第三行调用natveBillingDone方法。
然后回编译,打包测试.....................
发现初始化金币真的为18888,然后点击商店,支付页面,按返回键:
图片18.png

好了,到了这里,我们的第一层次的目的就完成了。
需要说明的是,IDA的使用,同学们自己查资料,ARM语法,自己查资料即可,网上有很多教程的,自己动手,掌握更深入。
第二层次分析:
进行完第一层次分析后,我们知道已经分析对了位置。So文件中的算法也找对了,那么,我们初始化多增加点金币多好,于是,我们继续开始分析。
图片19.png

关键点就在addcash方法中的这一行对R1复制的代码上面,我们打开16进制看一眼:
图片20.png

只有四个字节,通过这4个字节实现将18888赋值给R1,4个字节最大的数字为0xffff,要看这个函数接收的是无符号,还是有符号类型的int16,现在最大数值可能就是0xffff对应换算到十进制为65535
好,那么我们就看看怎么来修改数据吧,立即数,我们就可以直接操作修改字节了。
C8 19 04 E3  ,这行代码原本为MOV R1, #0x49C8
关于指令命令本人也不太熟悉,所以直接慢慢试着改一下
图片21.png

因为那个本身的立即数,通过观察发现原本的指令刚好反过来为E3 04 19 C8  , 那么对照0x49C8,我直接修改为如上图所示:
图片22.png

发现直接修改成功了,好了,这样就更给力了,我们直接使用010Editor或者UE,操作so文件
图片23.png

前面蓝色部分为内存地址,我们使用ctrl + g 命令跳转地址,直接对应修改这四个字节码即可。
然后重新打包,测试。。
结果自己可以看到,一切正常,初始化65535。。
支付页面,返回,增加金币。。
我们这次测试的是香蕉的增加方式,所以还有金币的增加噢,这个就留给感兴趣的同学们自己尝试了,自己动手,多多练习~~~
此文仅供交流,请勿做其他商业使用。。

排版看的舒服的,直接看文档即可,地址:
链接:http://pan.baidu.com/s/1eQILJkI 密码:7kyr
爱生活,爱鬼哥·······
听鬼哥说故事


免费评分

参与人数 12热心值 +12 收起 理由
wnagzihxain + 1
1372_7 + 1 谢谢@Thanks!
BattleCall + 1 谢谢@Thanks!
暗夜∮孤星 + 1 谢谢@Thanks!
ylf + 1 来听鬼哥说故事,学习详细破解教程!
yutao531315 + 1 如此高端.............
yAYa + 1 Nice.
101 + 1 感谢发布原创作品,吾爱破解论坛因你更精彩.
codelive + 1 谢谢@Thanks!
Dlan + 1 已答复!
my1229 + 1 来听鬼哥说故事,学习详细破解教程!
zhigaows + 1 我很赞同!

查看全部评分

本帖被以下淘专辑推荐:

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

 楼主| 听鬼哥说故事 发表于 2014-6-19 18:03
索马里的海贼 发表于 2014-6-19 16:02
一些字符串被加密 以前可以搜索的现在无法搜索了而且 smali里面的好像看不到了 只有xml文件..

你遇到的情况,是被加固了,如梆梆,爱加密这类东西加固过后,会将原本的dex处理,游戏运行调用他们自己的类,调用so,然后在内存中将原本的dex文件重新释放出来,让游戏正常去加载这个dex的。
目前,网上流传的方法,多数都是gdb调试,然后dump出内存,然后恢复dex,可以搜索相关资料看看。
56766876 发表于 2014-6-19 16:32
索马里的海贼 发表于 2014-6-19 16:02
听鬼哥说故事 发表于 2014-6-19 15:08
被混淆的也只是部分代码,混淆也是基于一定规则的。
在分析游戏破解的时候,一般都是根据游戏中各类信息 ...

一些字符串被加密 以前可以搜索的现在无法搜索了而且 smali里面的好像看不到了 只有xml文件..
tangwei99 发表于 2014-6-19 09:50

非常精彩!
warfid 发表于 2014-6-19 08:59
膜拜大神
D13 发表于 2014-6-19 07:29
听鬼哥说故事~感谢分享!
tony2526 发表于 2014-6-19 07:08
支持楼主发贴,谢谢楼主分享
a10168 发表于 2014-6-21 15:29
膜拜大神~
moodykeke 发表于 2014-6-17 12:07
很精彩,感谢分享。
ONES 发表于 2014-6-17 12:41
希望有更精彩的作品。
cyw 发表于 2014-6-17 12:42
我记得铁血独立营里面有一个日本军官叫鬼谷次郎!跟楼主的名字好像啊。谢谢楼主分享技术文章!
zhigaows 发表于 2014-6-17 16:08
学习了……………………
喜欢你是寂静的. 发表于 2014-6-18 13:44
很不错的学习资源
my1229 发表于 2014-6-18 20:11
来听鬼哥说故事,学习详细破解教程!
codelive 发表于 2014-6-18 21:29
非常精彩!
101 发表于 2014-6-18 23:16
看着好像很厉害的样子,但是完全看不懂。不过请问若想要看懂这些则需要先学会什么?
Bds1r 发表于 2014-6-19 00:32
CSDN鬼哥?
您需要登录后才可以回帖 登录 | 注册[Register]

本版积分规则

返回列表

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

GMT+8, 2024-11-24 11:29

Powered by Discuz!

Copyright © 2001-2020, Tencent Cloud.

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