跟随鬼哥伦比亚科学so变化,四。第一章的例子

图纸/文化  听鬼哥说故事

---------------------------------------------切割线--------------------------------------------

这篇文章是前段时间的文章,近期这个系列的so分析刚好能够做为一个实例教程。所以就补充拿回来了。

前三篇没看的。请继续关注博客,看完前面三篇。

趁热打铁,加深对so的分析过程,于是就有了这篇文章的补充························

另,此文章须要对android反编译逆向有一定基础。简单了解so的作用。有不论什么疑惑。可去群里和论坛或自行google搜索解决。

文章受www.pd521.com 站长邀请。首发在其论坛,大家能够过去关注,非常多基础资料。方便新手学习。

请大家自己动手去练习!

!!

!!

!。!

。。。!。。!。!!

!。!

!!

!!

!。!。!

---------------------------------------------切割线--------------------------------------------

今天我们来分析的是小黄人快跑,小黄人的形象从电影上面一直都蛮好的。如今都拍到了第二部了,所以我们找到这个游戏来进行分析。

第一层次分析:



拿到游戏,首先我们得先安装看看有什么地方是值得破解的。

通过观察。我们发现游戏中基本的消费方式在香蕉和金币上面,既然这样,那么我们就先看看支付上面能否够直接破解内购。购买截图例如以下图所看到的:

和游戏支付的方式,那么就查询相关资料,比如曾经我的教程中对onPayFailed方法的改动,对onBillingFinish方法的改动,在这里可能是对移动支付进行了升级,没法直接那样操作。既然这样。那么我们就查看下Logcat,看看有无有价值的信息。

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

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

搜索找到我们发现的特征字符,例如以下:

搜索找到我们发现的特征字符,例如以下:

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


好了。到了这个类,依据接口名称,我们能够猜到,这个是支付的回调函数。回调函数的意思,也就是推断是否支付了,然后返回相关数据,由其它算法来进行香蕉或金币数量的添加。


Game.nativeBillingDone,看到这个native方法。我们就须要对so文件进行分析操作了,我们找到Game类,看看是调用的哪个so文件。搜索system.loadlibrary:


晓得了so的名称。那么我们就挂起ida。java能够直接调用使用的肯定都是export导出函数。所以我们在export中搜索nativeBillingDone:

然后看到这种方法:

B是调用方法的意思,这里调用addCash方法,所以我们更清楚的明确。这个就是添加金币阿。名字都这么通俗易懂了,再猜不到就对不起人家作者了。


先大致浏览一下方法是干什么的:


好,大致看懂第一段代码后。我们往下翻翻:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

通过图片中的文字说明。我们也简单可以明确,我们须要做的,就是先測试一下。将这个addcash(int)方法的传入參数设置为8会怎么样,是不是会添加金币。所以我们回到最初分析的时候,看这里:

通过图片中的文字说明。我们也简单可以明确,我们须要做的。就是先測试一下,将这个addcash(int)方法的传入參数设置为8会怎么样,是不是会添加金币。所以我们回到最初分析的时候,看这里:

阿门,感谢作者,看到这行输出。这个是我们点击支付界面的返回button产生的。由于支付过程中会将游戏声音暂停。所以才会产生这个情况,方便开发人员观察数据。


起来,我们是能够通过自己在主类Game.smali中自己寻找其它地方的。能看到log仅仅是更加方便了我们的分析速度而已,我们手动寻找代码也是能够的。所以没有发现log。仅仅是在时间上面花费会多一点。其它影响是不大的。
好。那么我们就直接找到这行log的打印地方,在它上面调用nativeBillingDone方法:


第一行,设置v1=8,第二行,调用我自己的方法打印int数据看是否赋值成功,同学们能够忽略掉的,第三行调用natveBillingDone方法。

然后回编译。打包測试.....................
发现初始化金币真的为18888,然后点击商店,支付页面,按返回键:

好了。到了这里,我们的第一层次的目的就完毕了。

须要说明的是。IDA的使用,同学们自己查资料,ARM语法。自己查资料就可以,网上有非常多教程的,自己动手,掌握更深入。






第二层次分析:

进行完第一层次分析后。我们知道已经分析对了位置。So文件里的算法也找对了,那么。我们初始化多添加点金币多好,于是,我们继续開始分析

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

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

仅仅有四个字节,通过这4个字节实现将18888赋值给R1,4个字节最大的数字为0xffff,要看这个函数接收的是无符号。还是有符号类型的int16,如今最大数值可能就是0xffff相应换算到十进制为65535。

好,那么我们就看看怎么来改动数据吧,马上数,我们就能够直接操作改动字节了。

C8 19 04 E3  。这行代码原本为MOV R1, #0x49C8
关于指令命令本人也不太熟悉。所以直接慢慢试着改一下












由于那个本身的马上数,通过观察发现原本的指令刚好反过来为E3 04 19 C8  ,那么对比0x49C8。我直接改动为如上图所看到的:

watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">

发现直接改动成功了,好了,这样就更给力了。我们直接使用010Editor或者UE。操作so文件

前面蓝色部分为内存地址,我们使用ctrl + g
命令跳转地址,直接相应改动这四个字节码就可以。
然后又一次打包,測试。

结果自己能够看到。一切正常。初始化65535。。
支付页面,返回。添加金币。。

我们这次測试的是香蕉的添加方式,所以还有金币的添加噢,这个就留给感兴趣的同学们自己尝试了。自己动手,多多练习~~~
此文仅供交流,请勿做其它商业使用。。

排版看的不舒服的。直接看文档就可以。相关附件地址:

链接:http://pan.baidu.com/s/1eQILJkI password:7kyr

事实上此游戏还有非常多方式去破解的。这里仅仅是介绍一两种而已,大家能够自行补充~

转载请注明出处~~~~~~~~~~

按照鬼哥学so变化,四,第一章的例子的更多相关文章

  1. 跟着鸟哥学Linux系列笔记3-第11章BASH学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...

  2. 跟着鬼哥学so改动,二,进行篇

    图/文  听鬼哥说故事 继续上文的内容---------------------------------- 0x1:測试文件的编写 经过上一篇文章的基础学习,如今我们開始进行是用的部分. 既然我们能够 ...

  3. 跟着鬼哥学so改动,一,准备篇

    图/文 听鬼哥说故事 闲话少说,so的改动,重要性大家都知道,这里从头编写so文件,分析so文件,改动so文件,打算做一个系列的教程,当然,主要是看时间同意. android的sdk配置以及ndk环境 ...

  4. 跟着鸟哥学Linux系列笔记2-第10章VIM学习

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...

  5. 跟着鬼哥学so改动,三,作业篇

    作业: 通过前面两篇文章的学习.请自行分析此应用,将当前用户类型改动为Gold Vip 用户. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V ...

  6. 快学Scala习题解答—第一章 基础

    1 简介 近期对Scala比较感兴趣,买了本<快学Scala>,感觉不错.比<Programming Scala:Tackle Multi-Core Complexity on th ...

  7. 路飞学城-Python开发-第一章

    # 基础需求: # 让用户输入用户名密码 # 认证成功后显示欢迎信息 # 输错三次后退出程序 username = 'pandaboy' password = ' def Login(username ...

  8. PRML第一章读书小结

    PRML第一章读书小结     第一章用例子出发,较为简单的引入了概率论.模型.决策.损失.信息论的问题,作为机器学习从业者,读PRML除了巩固已有基础,还受到了很多新的启发,下面将我收到的启发总结如 ...

  9. [老老实实学WCF] 第四篇 初探通信--ChannelFactory

    老老实实学WCF 第四篇 初探通信--ChannelFactory 通过前几篇的学习,我们简单了解了WCF的服务端-客户端模型,可以建立一个简单的WCF通信程序,并且可以把我们的服务寄宿在IIS中了. ...

随机推荐

  1. poj 2482 Stars in Your Window(扫描线)

    id=2482" target="_blank" style="">题目链接:poj 2482 Stars in Your Window 题目大 ...

  2. (大数据工程师学习路径)第四步 SQL基础课程----修改和删除

    一.准备 在正式开始本内容之前,需要先从github下载相关代码.该代码可以新建两个数据库,分别名为test_01和mysql_shiyan ,并在mysql_shiyan数据库中建4个表(depar ...

  3. OpenGL于MFC使用汇总(三)——离屏渲染

    有时直接创建OpenGL形式不适合,或者干脆不同意然后创建一个表单,正如我现在这个项目,创建窗体不显示,它仅限于主框架.而我只是ActiveX里做一些相关工作,那仅仅能用到OpenGL的离屏渲染技术了 ...

  4. 基于Haar特征Adaboost人脸检测级联分类

    基于Haar特征Adaboost人脸检测级联分类 基于Haar特征Adaboost人脸检测级联分类,称haar分类器. 通过这个算法的名字,我们能够看到这个算法事实上包括了几个关键点:Haar特征.A ...

  5. Group By去除重复数据

    今天在写一个sql,目的是去除表里某一个字段相同的数据,只保留最新的一条.之前group by 用的少.特此记录一下. SELECT * FROM litb_approval_task SELECT ...

  6. 简单的工具LogUtil、Toast

    简单的工具LogUtil.Toast     能够用了 import android.content.Context; import android.util.Log; import android. ...

  7. 微软发布Win10开发者指南视频

    假设你是一个开发者,推荐你看看微软今天推出了一系列视频,标题是Win10开发人员指南,总体长度6时,多达22章内容,介绍很广泛.其实,即使你是编程新手或仅有兴趣,也值得一看. 开发人员Jerry Ni ...

  8. JQuery之初探

    软考过后又进入了紧张的B/S学习阶段,因为自己的进度比較慢,所以更要加进学习.如今就来总结下JQuery的一些基础知识: JQuery定义 jQuery是一套跨浏览器的JavaScript库,简化HT ...

  9. Hdu 3962 Microgene (AC自己主动机+矩阵)

    标题效果: 构造一个字符串,使得有两个和两个以上的目标串.长短L这一系列有多少串都. IDEAS: 只有全款减有1一些字符串,没有目标就是答案. 假定数据是非常小的,够用dp解.dp[i][j][k] ...

  10. PHP图片等比缩放,并添加Logo水印特定代码和盯

    <? php //PHP图片等比缩放,并添加Logo水印 --->百度 "美日汇" /** * 等比缩放函数(以保存的方式实现) * @param string $pi ...