第八章 Android 原生程序开发与逆向分析(一)(原生程序开发)

Android 原生程序开发与逆向分析

  • Android 平台上的软件复杂多样,仅通过 Android SDK 使用 Java 编写程序已不能满足开发者需求,如:音频、视频播放软件解码器的编写涉及 CPU 的高性能运算;在一些平台开发的游戏,若是采用 C、C++ 编写的,可能因为涉及不同代码的移植问题面临重写所有代码的情况;用传统的 Java 编写的程序易遭逆向破解,需要新的代码保护手段等
  • 为解决上述问题,Google 基于 Java 的 JNI 特性提供了 Android NDK(Native Development Kit)
  • Android NDK
    • 直译:Android 原生开发套件
    • 是一款强大的工具,可将原生 C、C++ 代码的强大功能和 Android 应用的图形界面结合,解决软件跨平台问题
    • 能使一些应用程序通过 JNI 调用与 CPU 打交道,从而使其性能得到提升
    • 能将程序的核心功能封装到基于原生开发套件的模块中,大大提升软件安全性

原生程序开发

  • 逆向分析和正向开发最大的区别:
    • 正向开发:开发人员通常会长时间用同一种或两三种语言开发,语言的使用场合不会发生太大变化
    • 逆向分析:开发人员会接触各种类型和各种系统平台的软件,不同的软件在不同的平台上运行,使用不同的语言开发
  • 一个成熟的逆向工程师,要具备快速学习全新编程语言的能力,和在分析过程中遇到问题时持之以恒的毅力和耐心
  • 在分析使用 Swift、Objective-C、Go 这类语言开发的程序时,逆向工程师首先要快速了解语言的特性和语法,熟悉语言在不同功能场景下常用的 API 接口,理解程序运行时的内存模型,然后寻找合适的分析工具,进行下一步的分析。要想掌握 Android 平台原生程序的逆向分析技术,要对 Android 原生程序的开发流程有所了解
  • Android 平台,除了可用 NDK Toolchain 开发原生程序,还可用第三方提供的开发套件及其他语言开发原生程序。用得较多的第三方开发套件:
    • Qt 库:一款跨平台的开源界面库。最大的特点是跨平台和用 C++ 开发,具有高度的可适配性和较高的运行性能,为众多桌面平台商业软件开发的首选库。用 Qt 开发 Android 原生程序要配合使用 Android SDK 和 Android NDK
    • Xamarin Studio:一款跨平台的编程 IDE,支持用 C# 开发跨平台界面程序,其中包括 Android。类似的 IDE 有 Vistual Studio(微软),也支持用 C# 开发 Android 原生程序
    • Kivy:一款跨平台的开源界面库。支持用 Python 为主流的操作系统开发跨平台的界面程序,包括 Android。类似的界面库有 sl4a,也支持在 Android 上用 Python 开发 APK
    • Crystax-NDK:一款第三方扩展的 NDK 开发套件,不仅提供更多常用的 C/C++ 库,还支持用 Objective-C 编写 Android 原生程序
    • React Native:由 Facebook 开发并开源的一款跨平台程序开发库。具备用 JavaScript 开发跨平台软件的能力,能让 Web 前端开发人员轻松编写 Android 平台界面程序
  • 此处仅围绕 Android NDK 中用 C、C++ 开发的原生程序学习

原生程序工程

  • AS 没提供无界面原生程序的开发入口。AS 中的原生程序开发建立在 Android 常规程序开发的基础上。若只想开发 Android 原生程序,可用 Android NDK 命令行模式
  • AS 创建原生程序工程:
    在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

在这里插入图片描述

  • 如此创建的工程与常规的没有原生支持的工程区别如

  • 1
    点赞
  • 3
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
1. 课程介绍Android开发所需要的比较全面的基础知识,原理。这样在随后的课程里或阅读开源的App时能读懂代码。2. 课时的编排使用Google官方的Android Developer CN的分类,删减了对jetpack(Androidx)的相关课题。因为jetpack并不是核心库,国内大部分App都不会使用它。3. 使用Java作为项目例子代码,要学习Android开发,首先得会Java语言,因为Android API的核心代码是用Java编写的,也可以使用Koltin语言,但是当阅读Android源码时会Java语言是绕不过去的。Java代码可以通过Android Studio的菜单 Code - Convert Java File To Kotlin File来转换为Koltin. 4. 主要介绍Android的核心组件,类库. 但是不会详细介绍jetpack的库,因为这个库使用koltin,而且对AS有强依赖,比如升级了AS不得不升级jetpack(androidx)。或者对于低版本的androidx,新版AS干脆不支持;还有就是依赖GMS核心的都不准备讲,只介绍开源的第三方项目,可以发布到华为,小米等国内Android系统的类库。5. 这里只是介绍Android原生开发,不介绍Flutter,React Native,Hipppy等跨平台框架。选择原生框架的好处就是可以使用系统平台最新的特性,最高的性能,最少的学习成本。当然这些跨平台框架访问系统的一些独有功能还是得通过桥接原生框架调用。Flutter得要学会Dart,Java语言,并且学会它的框架体系API. React Native和Hippy这些H5框架通过JavaScript访问原生功能的框架也得学会JavaScript,还要会Vue,React框架,之后就是Html,Css布局。 这些还需要下载安装开发额外的开发环境。当然它的好处是跨Android,iOS两个平台。童鞋根据自己的项目要求进行取舍。

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

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

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值