跟着鬼哥学so修改,四,实例第一篇
来源:互联网 发布:ip mac绑定 编辑:程序博客网 时间:2024/05/29 03:55
跟着鬼哥学so修改,四,实例第一篇
图/文 听鬼哥说故事
---------------------------------------------分割线--------------------------------------------
这篇文章是前段时间的文章,最近这个系列的so分析刚好可以做为一个实例教程,所以就补充拿回来了。
前三篇没看的,请继续关注博客,看完前面三篇。
趁热打铁,加深对so的分析过程,于是就有了这篇文章的补充························
另,此文章需要对android反编译逆向有一定基础,简单了解so的作用,有任何疑惑,可去群里和论坛或自行google搜索解决。
文章受www.pd521.com 站长邀请,首发在其论坛,大家可以过去关注,很多基础资料,方便新手学习。
请大家自己动手去练习!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!!
---------------------------------------------分割线--------------------------------------------
今天我们来分析的是小黄人快跑,小黄人的形象从电影上面一直都蛮好的,现在都拍到了第二部了,所以我们找到这个游戏来进行分析。
第一层次分析:
拿到游戏,首先我们得先安装看看有什么地方是值得破解的。
通过观察,我们发现游戏中主要的消费方式在香蕉和金币上面,既然这样,那么我们就先看看支付上面是否可以直接破解内购。购买截图如下图所示:
和游戏支付的方式,那么就查询相关资料,例如以前我的教程中对onPayFailed方法的修改,对onBillingFinish方法的修改,在这里可能是对移动支付进行了升级,没法直接那样操作。既然这样,那么我们就查看下Logcat,看看有无有价值的信息。
通过多次测试,我们发现在点击进入游戏支付的时候有这行输出,那么好,我们就跟进观察这行代码,这行代码后面肯定是启动支付流程的相关代码。
对于smali代码不熟悉的同学,那么直接使用jd-gui打开jar文件查看吧,如下:
搜索找到我们发现的特征字符,如下:
搜索找到我们发现的特征字符,如下:
晓得了so的名称,那么我们就挂起ida,java可以直接调用使用的肯定都是export导出函数,所以我们在export中搜索nativeBillingDone:
然后看到这个方法:
好,大致看懂第一段代码后,我们往下翻翻:
通过图片中的文字说明,我们也简单能够明白,我们需要做的,就是先测试一下,将这个addcash(int)方法的传入参数设置为8会怎么样,是不是会增加金币。所以我们回到最初分析的时候,看这里:
通过图片中的文字说明,我们也简单能够明白,我们需要做的,就是先测试一下,将这个addcash(int)方法的传入参数设置为8会怎么样,是不是会增加金币。所以我们回到最初分析的时候,看这里:
进行完第一层次分析后,我们知道已经分析对了位置。So文件中的算法也找对了,那么,我们初始化多增加点金币多好,于是,我们继续开始分析
关键点就在addcash方法中的这一行对R1复制的代码上面,我们打开16进制看一眼:
因为那个本身的立即数,通过观察发现原本的指令刚好反过来为E3 04 19 C8 ,那么对照0x49C8,我直接修改为如上图所示:
发现直接修改成功了,好了,这样就更给力了,我们直接使用010Editor或者UE,操作so文件
排版看的不舒服的,直接看文档即可,相关附件地址:
链接:http://pan.baidu.com/s/1eQILJkI 密码:7kyr
其实此游戏还有很多方式去破解的,这里只是介绍一两种而已,大家可以自行补充~
转载请注明出处~~~~~~~~~~
- 跟着鬼哥学so修改,四,实例第一篇
- 跟着鬼哥学so修改,五,实例第二篇
- 跟着鬼哥学so修改,一,准备篇
- 跟着鬼哥学so修改,二,进行篇
- 跟着鬼哥学so修改,三,作业篇
- 跟着鬼哥学so修改,三,答案篇
- 第一篇: 安装CentOS 5.6----跟着鸟哥安装linux
- 论文修改内容,第一篇
- FFmpeg第一篇之Android平台上的so编译
- 第一篇,抱怨一下ID不能修改
- 初识lunix,第一篇,修改IP地址
- 第一篇 Oracle数据库体系结构之实例
- 跟着廖雪峰的git教程学习(2)时光机穿梭(四)撤销修改
- 来自四楼机房的第一篇博客
- C语言学习——第一篇博客(四)
- Python爬虫入门(四)PhatomJS+Selenium第一篇
- 跟着实例学习OpenLayers(二)
- 第一篇博客:Delphi中修改ODBC数据源
- 3Sum -- Leetcode
- Android虚拟机调优
- Android中在代码中动态(用事物)添加Fragment
- 众多Android 开源项目推荐
- HBase总结(二十)HBase常用shell命令详细说明
- 跟着鬼哥学so修改,四,实例第一篇
- Tomcat配置多个端口号或多个应用
- linux源码编译安装mongodb
- 数据库查询分页
- Android3.1 init进程启动源码分析
- error LNK2001: 无法解析的外部符号 __imp__MessageBoxA@16
- OC语言--SEL
- Lua 粘合的 Nginx 生态环境
- 记录一下这个地方