跟着鬼哥学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();

这两个方法的添加,可以继续在我们上一篇文章的基础上进行补充即可,当然,为了熟练创建ndk工程,也可以重新创建工程的。

然后我们在shell下切换到工程根目录:

这样成功生成so文件。

然后我们简单在xml定义下布局,简单的,直接在layout下

<TextView

android:id="@+id/coin"

android:layout_width="wrap_content"

android:layout_height="wrap_content"

android:text="" />

添加一个TextView,设置id为coin,然后就可以在主类进行引用。

这样我们运行一下程序,查看一下效果。

0x2:任务明确

我们现在需要做一个任务,就是修改上文程序中的金币数量。

我们直接在工程的bin目录下拿出来未签名的apk,分析时可以先不管签名,我们把lib/armeabi下的so文件拿出来,拖进IDA进行分析。

0x3:挂起IDA,进行分析

(假设,当前我们的状态是不知道程序源码)

通过上文运行的截图,我们可以分析到,有关键字“Current Coin ”,我们在对反编译后的程序分析搜索,发现只存在于so文件中,这样,我们就直接在IDA中搜索字符串去。

快捷键 Shift + F12

找到它的引用

这个没啥好解释的,加载字符串而已,没啥重要信息,发现不出来金币在哪里定义了,那么我们就看下引用。

发现在so文件中,并没有函数对此方法进行调用,那么我们就返回java中,看看java语句中是怎么对它进行的调用,其上下文都是什么东西。

经过查看printhello方法在JniGg.smali中是定义,在MainActivity是调用,我们详细看下代码:

贴上简单的说明,大家就可以看的清楚了。

我们在这里发现一个关键函数,getCoin方法,通过向上追寻,发现也是在so文件中的,那么现在我们再次回到IDA中:

在Options打开General,也就是第一个选项,设置如下:

然后我们可以看到:

这个是Thumb的指令,那么我们修改,也要使用Thumb。

一个字节来定义数值,我们只能用最大ff了,即255,那么在16进制编辑器打开,跳转到c04的位置,修改为FF 20,然后放回程序,签名,运行。

好了,说明我们的修改成功。

0x4:反思一下

既然我们是自己写的源码,那么我们就可以很好的来对比思考了,这个过程留给同学们自己来思考,请花上10分钟时间,对比一下代码里面编写的方法,与在so中反汇编的代码的联系,增强一下熟悉的感觉。

另:

上面的apk,还有其他破解方法,即我们找到java层的调用了,那么直接修改java层调用方法的返回值,效果也一样,可以修改为无限大的数值。

相关附件地址:

http://pan.baidu.com/s/1i3wzetf

文章同时也交由www.pd521.com 首发,转载请注明出处。

时间: 2024-11-10 14:02:34

跟着鬼哥学so修改,二,进行篇的相关文章

跟着鬼哥学so修改,四,实例第一篇

跟着鬼哥学so修改,四,实例第一篇 图/文  听鬼哥说故事 ---------------------------------------------分割线-------------------------------------------- 这篇文章是前段时间的文章,最近这个系列的so分析刚好可以做为一个实例教程,所以就补充拿回来了. 前三篇没看的,请继续关注博客,看完前面三篇. 趁热打铁,加深对so的分析过程,于是就有了这篇文章的补充························ 另,此

跟着鬼哥学so修改,一,准备篇

图/文 听鬼哥说故事 闲话少说,so的修改,重要性大家都知道,这里从头编写so文件,分析so文件,修改so文件,打算做一个系列的教程,当然,主要是看时间允许. android的sdk配置以及ndk环境下载,请同学们自行google即可. 翻墙也不会,工具也不会用,搜索也懒得搞,请直接略过本文即可. 0x1:新建立一个安卓工程 0x2:编写调用so代码和方法定义 在MainActivity.java同目录下创建一个JniGg.java文件,用于调用so 0x3:生成文件头.h文件 在这个目录可以看

跟着鬼哥学so修改,三,答案篇

几篇分析好的文章: http://www.pd521.com/thread-114-1-1.html     xxoo http://www.pd521.com/thread-113-1-1.html    myoldid  (回复,1,2,3) 进行软件的分析,这个过程就不需要多说了,大家自己看就是了,下面是分析完毕后的思路进行. 细节方面不再叙述: smali层关键点: native层关键点: 0x1: 修改smali层,将传入参数v0设置为int数值 1. 0x2: 针对这个apk来说,搜

跟着鬼哥学so修改,三,作业篇

作业: 通过前面两篇文章的学习,请自行分析此应用,将当前用户类型修改为Gold Vip 用户. 有两种以上的方式可以修改的,有兴趣的同学请进行分析,写一下分析记录,可另起文章发布其过程与思路. 明天或者后天,再发布一下分析过程,以及原代码,大家再对比学习一下即可. -------------------------------------------------------- 下载地址: http://pan.baidu.com/s/1jG22HMY

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

图/文  听鬼哥说故事 继续上文的内容---------------------------------- 0x1:測试文件的编写 经过上一篇文章的基础学习,如今我们開始进行是用的部分. 既然我们能够在so中定义String字符串了,那么我们当然也能够定义int类型的数据了.那么.我们在此定义一个getCoin方法,返回值为int类型. 例如以下: JNIEXPORT jint JNICALL Java_com_ggndktest1_JniGg_getCoin (JNIEnv * env, jo

跟着鬼哥学PyQtPart.2

<span style="font-family: Arial, Helvetica, sans-serif;">0x1:</span><span style="font-family: 宋体;">简述</span> 经过第一篇的简单布局以后,我们来考虑是否可以放上一个按钮,来执行相关的动作呢?答案是肯定可以的,经过测试,已经简单整理一个按钮的点击事件响应,来执行反编译动作.这里将学习过程记录一下. 0x2:思考过程

跟着鬼哥学PyQt Part.1

中秋几天不出去玩了,留在家里把PyQt的相关资料学习一下,这里仅记录一下学习的相关记录,留下存档,便于以后翻阅.主要的目的是编写一个反编译和回编译的工具,稍后可以慢慢随着需求补充上一些搜索和修改的功能,处理一些游戏的自动破解,类似MM和一些其他支付都有特征可参考. 感觉可能会对初学者有一些参考,于是就整理一下发到博客里面.文中都是学习中的留下的笔记,所以肯定会有很多书籍中的代码,在此感谢那些作者,让后学者少走弯路. 0x1:PyQt的介绍: PyQt是一个创建GUI应用程序的工具包,它是Pyth

跟着鬼哥学PyQtPart.4

中秋假期转眼已经过去两天了,我们的学习也在不断向前,经过前面三篇文章的学习,我们已经可以做出来一个简单的反编译apk的工具了. 为了更方便的使用我们自己编写的工具,所以我们对于第三篇文章中的search_file button来进行处理,我们使用拖拽文件到QLineEdit控件上面来显示文件路径,而不用打开window来选择了,这样对我们的操作来说更加方便一点. 0x1:拖拽事件的处理 拖拽事件,经过一晚上的查询以及翻看Java已经写好的工具,终于找到dragEnterEvent和dropEve

CSDN学院“跟着龙哥学JavaWeb”的笔记

笔记内容都来源于""跟着龙哥学JavaWeb"课程中的讲解. 其实很多年前有接触,只是重新看看有什么更值得学习的. 既想搭建个服务器,又想做个APP端,那还是工作挺多的. 1 Web概述 C/S VB,VC++,Java,C# 特点: 在服务器端主要就是一个数据库,把所有业务逻辑以及界面的渲染操作交给客户端完成. 优点:较安全,用户节目很丰富,用户体验不错等. 缺点:每次升级都需要重新安装,针对于不同的操作系统开发,可移植性差. B/S JSP,ASP,PHP,基于浏览器访问