图/文  听鬼哥说故事

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

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. http 500错误怎么解决方法

    出现500错误的原因是很多的,一般来说,如果程序出错,那么在浏览器内会返回给用户一个友好的错误提示,统一称之为服务器500错误. 解决的方法就是您必须在http中能够正确的获得错误信息,方法为:请打开 ...

  2. React Native填坑之旅 -- 使用react-navigation代替Navigator

    Navigator已经被React Native废弃了.也许你可以在另外的一个依赖库里react-native-deprecated-custom-components里找到.不过既然官方推荐的是re ...

  3. PHP基础入门(三)【PHP中的数组】

    PHP数组的分类 按照下标的不同,PHP数组分为关联数组与索引数组: 索引数组:下标从0开始,依次增长: 关联数组: 下标为字符串格式,每个下标字符串与数组的值一一关联对应.(有点像对象的键值对) 关 ...

  4. 比较DataTable中新旧数据

    内容不写了,代码上都做了写注释. 1   /**//// <summary>  2        /// 比较两个数据表,并返回比较结果表  3        /// 比较条件:  4   ...

  5. word,excel,ppt转Pdf,Pdf转Swf,通过flexpaper+swftools实现在线预览

    其实这是我好几年前的项目,现在再用这种方式我也不建议了,毕竟未来flash慢慢会淘汰,此方式也是因为目测大部分人都装了flash,才这么做的,但是页面展示效果也不好.其实还是考虑收费的控件,毕竟收费的 ...

  6. [转载] zookeeper 分布式锁服务

    转载自http://www.cnblogs.com/shanyou/archive/2012/09/22/2697818.html 分布式锁服务在大家的项目中或许用的不多,因为大家都把排他放在数据库那 ...

  7. HTML基础下

    知识点一: HTML5的标准结构: <!DOCTYPE html> <html lang='en'> <head> <meat charset='utf-8' ...

  8. Android Weekly Notes Issue #285

    November 26th, 2017 Android Weekly Issue #285 本周包含好几篇Kotlin的文章,如通过Property Delegate实现SharedPreferenc ...

  9. php条件语句(二)

    switch 语句用于根据多个不同条件执行不同动作. PHP Switch 语句 如果您希望有选择地执行若干代码块之一,请使用 switch 语句. 语法 switch (n){case label1 ...

  10. 【Mysql知识补充】

    一.子查询 1.定义 子查询是将一个查询语句嵌套在另一个查询语句中.内层查询语句的查询结果,可以为外层查询语句提供查询条件.子查询中可以包含:IN.NOT IN.ANY.ALL.EXISTS 和 NO ...