发新帖

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

[复制链接]
45511 10
图/文  听鬼哥说故事

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




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,设置idcoin,然后就可以在主类进行引用。





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






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 首发,转载请注明出处。










本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x

举报 使用道具

回复

精彩评论10

hzw007    发表于 2014-12-18 18:36:39 | 显示全部楼层
鬼哥出马毕是精华,感谢鬼哥和各位大神的无私奉献!鬼哥啥时候也出个so里面的方法修改,从调用b方法改为调用c方法:lol

举报 使用道具

回复 支持 反对
737672679    发表于 2014-12-18 18:57:41 | 显示全部楼层
鬼哥。。作为一个开发者的角度

来说一个东西的话。当然是很简单。

但是对于其他人?  鬼哥想到也?
基础也?部分?

举报 使用道具

回复 支持 反对
737672679    发表于 2014-12-18 19:08:51 | 显示全部楼层
鬼哥好。

支持:o

举报 使用道具

回复 支持 反对
szs6008    发表于 2014-12-18 19:59:26 | 显示全部楼层
感谢分享精彩教程:lol

举报 使用道具

回复 支持 反对
kanngkai    发表于 2014-12-21 21:02:18 | 显示全部楼层
膜拜鬼哥

举报 使用道具

回复
chenyinxin    发表于 2015-1-25 04:39:10 | 显示全部楼层
看不懂啊,这个软件不会用

举报 使用道具

回复 支持 反对
vickis    发表于 2015-3-29 20:36:39 | 显示全部楼层
继续学习下一个。

举报 使用道具

回复 支持 反对
yanchl    发表于 2015-4-13 11:26:09 | 显示全部楼层
各位大大,我想问下 ida中 加载字符串类似于这样的语句是什么意思,怎么解读啊

R1, =(aCurrentCoinIs - 0xBFA)(见鬼哥文章0x3:挂起IDA,进行分析的第二幅图)

举报 使用道具

回复 支持 反对
Alan    发表于 2016-3-31 15:11:36 | 显示全部楼层
听鬼哥说故事

举报 使用道具

回复 支持 反对
您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

快速回复 返回顶部 返回列表