android studio native 方法是红色的,Android逆向笔记之AndroidStudio生成so并调用native方法...

AndroidStudio版本: 4.0.1

使用AndroidStudio进行ndk开发很简单,我们的目标是生成一个so文件,里面有一个getSign方法,在Java层调用so文件中的getSign方法获取。

先创建一个NDK项目,创建的时候拉到最下面选择Native C++,然后Next:

c29550b6cd023c218458d272bb586739.png

然后输入项目的名字:

4876d088d53ecaebc5d760a42c917261.png

这一步保持默认即可(反正我也不懂C++...):

c9b7139755c41a4c60af6f8acdf1a737.png

创建完项目之后糟糕红色叹号了,有这么个提示:

f30739c7152fd537ad87531f2bab9c57.png

这是因为创建的项目没有配置NDK,NDK需要单独下载,可以去这个页面选择自己平台对应的NDK下载:

下载完解压到本地即可,注意解压后的路径名中尽量不要包含中文以免无谓踩坑。

然后回到AndroidStudio,为项目设置上刚刚下载的这个NDK,菜单选择File-->Project Structure:

1fb81fde5e7f24910fe7cb0ca9792ce8.png

切换到SDK Location,然后在Android NDK Location那一项选择刚刚下载的NDK解压到的目录,OK之后项目就会自动开始sync。

e6c8ad4fdd5ad68f2fb822cb36fff1e8.png

sync完之后就不会报错了,还显示了个小对号:

401041e29e29a84b3b8c4298db5fd7bd.png

切换到Project视图看下生成的项目结构:

f54d1c396a0ecca39d1e9acf80bbe7e0.png

先看MainActivity自动生成的内容:

自动加载了一个native-lab的so文件,然后还自动声明了一个stringFromJNI的native方法,然后再来看cpp下自动生成的这个native-lib.cpp文件:

看起来跟我们想要的结果已经差不多了,不行,名字不一样,接下来就是修改名字为getSign,先改Java层的MainActivity,注意修改的时候使用重构重命名,Shift+6,改完之后:

会发现native-lib.cpp的名字也自动修改了,都不用我们手动干预,很方便:

然后Run一下看看安装效果:

11f468abf5ca3f48836384e77bb13d06.png

OK,接下来打包成apk,然后反编译观察一下这种方式打包的效果是怎样的:

c603cc0b8926872671d2fc714df0af77.png

选择打包成apk:

64ce6693e3522e5e5fc41b40073bcdd5.png

key可以创建一个新的也可以用老的:

feb7a992fdd54496800c9ba5a67f20fc.png

构建release包,签名版本为V2,然后“Finish”等一段时间:

31ac850e189d433e074c3f0ee9ceb630.png

如果打包成功的话,在app下会多出一个release文件夹,下面有个app-release.apk文件,这就是本次打包成功的apk文件:

672bda031ab07172cf26c0f99ebb8e0d.png

然后启动jeb,把打包好的apk文件拖到jeb中看下,项目结构是这样的:

ee9e38a7d4e6b5f25cc1b1b6f30338b8.png

反编译MainActivity看下:

89176ca861cc85b1a37d9e13f46e98aa.png

然后到lib下,把so文件拿出来:

365bad74e054ab8b581054517a398a58.png

然后拖到IDA64中,在Function name窗口中输入Java搜索我们的JNI方法,因为我们是静态注册的,所以这里是能搜到的,然后双击搜索到的函数名,查看其汇编代码:

1521246d5285dac0069a54d217165cd9.png

然后分析这段汇编的代码就能还原原本逻辑了,其实arm汇编我也没整太明白,就赶紧结束以免露馅,本篇文章到此为止吧。

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值