跟着鬼哥学so改动,二,进行篇
图/文 听鬼哥说故事
继续上文的内容----------------------------------
0x1:測试文件的编写
经过上一篇文章的基础学习,如今我们開始进行是用的部分。
既然我们能够在so中定义String字符串了,那么我们当然也能够定义int类型的数据了。那么。我们在此定义一个getCoin方法,返回值为int类型。
例如以下:
JNIEXPORT jint JNICALL Java_com_ggndktest1_JniGg_getCoin
(JNIEnv * env, jobject this)
{
int c=100;
return c;
}
同一时候编写java代码:
static public native int getCoin();
这两个方法的加入,能够继续在我们上一篇文章的基础上进行补充就可以,当然,为了熟练创建ndkproject,也能够又一次创建project的。
然后我们在shell下切换到project根文件夹:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
这样成功生成so文件。
然后我们简单在xml定义下布局。简单的,直接在layout下
<TextView
android:id="@+id/coin"
android:layout_width="wrap_content"
android:layout_height="wrap_content"
android:text="" />
加入一个TextView,设置id为coin。然后就能够在主类进行引用。
这样我们执行一下程序,查看一下效果。
0x2:任务明白
我们如今须要做一个任务。就是改动上文程序中的金币数量。
我们直接在project的bin文件夹下拿出来未签名的apk。分析时能够先无论签名。我们把lib/armeabi下的so文件拿出来,拖进IDA进行分析。
0x3:挂起IDA。进行分析
(如果,当前我们的状态是不知道程序源代码)
通过上文执行的截图,我们能够分析到。有keyword“Current Coin ”,我们在对反编译后的程序分析搜索,发现仅仅存在于so文件里,这样,我们就直接在IDA中搜索字符串去。
快捷键 Shift + F12
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
找到它的引用
这个没啥好解释的。载入字符串而已,没啥重要信息。发现不出来金币在哪里定义了,那么我们就看下引用。
发如今so文件里。并没有函数对此方法进行调用,那么我们就返回java中,看看java语句中是怎么对它进行的调用。其上下文都是什么东西。
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
经过查看printhello方法在JniGg.smali中是定义。在MainActivity是调用。我们具体看下代码:
贴上简单的说明,大家就能够看的清楚了。
我们在这里发现一个关键函数。getCoin方法。通过向上追寻,发现也是在so文件里的,那么如今我们再次回到IDA中:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
在Options打开General。也就是第一个选项,设置例如以下:
watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V6aTExMTA=/font/5a6L5L2T/fontsize/400/fill/I0JBQkFCMA==/dissolve/70/gravity/Center" alt="">
然后我们能够看到:
这个是Thumb的指令。那么我们改动,也要使用Thumb。
一个字节来定义数值。我们仅仅能用最大ff了,即255,那么在16进制编辑器打开。跳转到c04的位置,改动为FF 20,然后放回程序,签名,执行。
好了,说明我们的改动成功。
0x4:反思一下
既然我们是自己写的源代码。那么我们就能够非常好的来对照思考了。这个过程留给同学们自己来思考,请花上10分钟时间,对照一下代码里面编写的方法,与在so中反汇编的代码的联系,增强一下熟悉的感觉。
另:
上面的apk,还有其它破解方法。即我们找到java层的调用了。那么直接改动java层调用方法的返回值,效果也一样,能够改动为无限大的数值。
相关附件地址:
http://pan.baidu.com/s/1i3wzetf
文章同一时候也交由www.pd521.com 首发,转载请注明出处。
跟着鬼哥学so改动,二,进行篇的更多相关文章
- 跟着鬼哥学so改动,一,准备篇
图/文 听鬼哥说故事 闲话少说,so的改动,重要性大家都知道,这里从头编写so文件,分析so文件,改动so文件,打算做一个系列的教程,当然,主要是看时间同意. android的sdk配置以及ndk环境 ...
- 跟着鬼哥学so改动,三,作业篇
作业: 通过前面两篇文章的学习.请自行分析此应用,将当前用户类型改动为Gold Vip 用户. watermark/2/text/aHR0cDovL2Jsb2cuY3Nkbi5uZXQvZ3VpZ3V ...
- 跟着鸟哥学Linux系列笔记3-第11章BASH学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 跟着鸟哥学Linux系列笔记2-第10章VIM学习 认识与学习bash 1. ...
- 跟着鸟哥学Linux系列笔记2-第10章VIM学习
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 跟着鸟哥学Linux系列笔记1 常用的文本编辑器:Emacs, pico, nano, joe, vim VI ...
- 跟着鸟哥学Linux系列笔记0-如何解决问题
跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1. 在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...
- 跟着鸟哥学Linux系列笔记1
跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...
- 按照鬼哥学so变化,四,第一章的例子
跟随鬼哥伦比亚科学so变化,四.第一章的例子 图纸/文化 听鬼哥说故事 ---------------------------------------------切割线--------------- ...
- 跟着弦哥学人工智能2—HAND-CRAFTED RULES实现的人工智能及其缺陷
隔壁有个妹纸喷我,好高兴....给她回复了下 哎呀,没想到是个妹纸,其实我就随便那么一说,没合计妹纸还专门写个檄文声讨我,受宠若惊其实你的评论一看就比较专业,所以我就去你博客大概扫了一眼,发现个大问 ...
- 跟着刚哥学Redis
NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL".是对不同于传统的关系型数据库的数据库管理系统的统称.它泛指非关系型的数据库.随着 ...
随机推荐
- Mongoose之 SchemaTypes 数据类型
SchemaTypes 数据类型 SchemaTypes handle definition of path defaults, validation, getters, setters, field ...
- [C#]使用Costura.Fody将源DLL合并到目标EXE
本文为原创文章,如转载,请在网页明显位置标明原文名称.作者及网址,谢谢! 一.本文主要是使用Costura.Fody工具将源DLL合并到目标EXE,因此,需要从以下任一链接下载: ①从Github地址 ...
- java 以a为开头单词的词典查询示例
java中HashMap类表示为字典类,其中key,value一一对应的原则.因此是词典查询的首要工具.(HashMap字典类字面意思也可以看出~~) 程序思路: 程序开始前,应先创建一个字典文本用于 ...
- 面试经典算法题集锦——《剑指 offer》小结
从今年 3 月份开始准备找实习,到现在校招结束,申请的工作均为机器学习/数据挖掘算法相关职位,也拿到了几个 sp offer.经历这半年的洗礼,自己的综合能力和素质都得到了一个质的提升. 实话说对于未 ...
- python 小白(无编程基础,无计算机基础)的开发之路 day1
本节内容 Python介绍 发展史 Python 2 or 3? 安装 Hello World程序 变量 用户输入 模块初识 .pyc是个什么鬼? 数据类型初识 数据运算 表达式if ...else语 ...
- padding-使用必记
前言 说起了padding可谓是盒子模型中最常用的一个属性,你真的了解padding吗?那我请问您设置padding会影响盒子的宽度与高度吗?也许好多人会回答padding会影响到盒子的宽度与高度.在 ...
- 深度学习的异构加速技术(一):AI 需要一个多大的“心脏”?
欢迎大家前往腾讯云社区,获取更多腾讯海量技术实践干货哦~ 作者:kevinxiaoyu,高级研究员,隶属腾讯TEG-架构平台部,主要研究方向为深度学习异构计算与硬件加速.FPGA云.高速视觉感知等方向 ...
- PHP设计模式之工厂模式
工厂模式(Factory pattern)和单例模式一样,是另外一种创建型模式. 和单例模式不同的是,单例模式会创建和管理一个单独的类型的单一对象,工厂模式则是用于创建多种不同类型的类的多个对象. 工 ...
- enote笔记法(2)——why的使用
章节:why的使用 用法: why 概念|词汇(比概念更一般的形式的keyword)|短语|句子 用法1: why 概念|why keyword([比概念更一般的形式的keyword]) “why 概 ...
- Bitmap.Config 说明 ALPHA_8 ARGB_4444 ARGB_8888 RGB_565
这篇文章的目的是了解Bitmap.Config 你可以在使用这个方法的时候会遇到 Bitmap android.graphics.Bitmap.createBitmap(int width, int ...