图/文  听鬼哥说故事

继续上文的内容----------------------------------

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改动,二,进行篇的更多相关文章

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

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

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

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

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

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

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

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

  5. 跟着鸟哥学Linux系列笔记0-如何解决问题

    跟着鸟哥学Linux系列笔记0-扫盲之概念 在发生问题怎么处理: 1.  在自己的主机.网络数据库上查询How-To或FAQ -Linux 自身的文件数据: /usr/share/doc -CLDP中 ...

  6. 跟着鸟哥学Linux系列笔记1

    跟着鸟哥学Linux系列笔记0-扫盲之概念 跟着鸟哥学Linux系列笔记0-如何解决问题 装完linux之后,接下来一步就是进行相关命令的学习了 第五章:首次登录与在线求助man page 1. X ...

  7. 按照鬼哥学so变化,四,第一章的例子

    跟随鬼哥伦比亚科学so变化,四.第一章的例子 图纸/文化  听鬼哥说故事 ---------------------------------------------切割线--------------- ...

  8. 跟着弦哥学人工智能2—HAND-CRAFTED RULES实现的人工智能及其缺陷

    隔壁有个妹纸喷我​,好高兴....给她回复了下 哎呀,没想到是个妹纸,其实我就随便那么一说,没合计妹纸还专门写个檄文声讨我,受宠若惊其实你的评论一看就比较专业,所以我就去你博客大概扫了一眼,发现个大问 ...

  9. 跟着刚哥学Redis

    NoSQL 简介 NoSQL(NoSQL = Not Only SQL ),意即"不仅仅是SQL".是对不同于传统的关系型数据库的数据库管理系统的统称.它泛指非关系型的数据库.随着 ...

随机推荐

  1. AngularJS学习篇(二)

    AngularJS 指令 AngularJS 通过被称为 指令 的新属性来扩展 HTML. AngularJS 通过内置的指令来为应用添加功能. AngularJS 允许你自定义指令. Angular ...

  2. Ajax 跨域 异步 CORS

    HTTP access control (CORS) 核心在于使用定制(添加新的header)HTTP header让浏览器和服务器有更多的相互了解,从而决定一个请求或者响应成功还是失败   对于一个 ...

  3. python 3---if判断成绩练习

    需求根据用户输入的成绩分档,要求如下: 1. 如果成绩大于60分,输出"及格"2. 如果成绩大于70分,输出"良"3. 如果成绩大于80分,输出"好& ...

  4. linux中安装Python3.x

    首先了解几句Linux命令是必须的.例如 ls, vi, wget, rm, mv, cd, su, sudo, chmod, tar等等一些常用的语句命令是有必要知道它的用法的. 安装Python3 ...

  5. eclipse中导入jsp等工程使用过程中常遇问题

    1.导入的工程JSP文件出现报错的情况 这个一般不怎么影响文件的执行,这些文件飘红主要是因为eclipse的校验问题. 具体错误信息:Multiple annotations found at thi ...

  6. [LeetCode] BFS解决的题目

    一.130  Surrounded Regions(https://leetcode.com/problems/surrounded-regions/description/) 题目: 解法: 这道题 ...

  7. php多个文件上传

    表单如下 <form class="form-horizontal" action="{:U('System/addAdvert')}" method=& ...

  8. vue新手入门——vue-cli搭建

    首先说明,以下内容vue官网都有文档,如果觉得麻烦啰嗦,请移步至 安装-vue.js . 准备工作: 1.下载并安装node环境,一般情况下安装好node之后,npm也会安装好.具体安装的话,百度大概 ...

  9. 2017年当下最值得你关注的前端开发框架,不知道你就OUT了!

    近几年随着 jQuery.Ext 以及 CSS3 的发展,以 Bootstrap 为代表的前端开发框架如雨后春笋般挤入视野,可谓应接不暇. 在这篇分享中,我将总结2017年当下最值得你关注的前端开发框 ...

  10. org.springframework.web.filter.DelegatingFilterProxy的作用

    一.类结构 DelegatingFilterProxy类继承GenericFilterBean,间接实现了Filter,故而该类属于一个过滤器.那么就会有实现Filter中init.doFilter. ...