Android framework

简介: Android framework

技术框架

JNI

JNI是Java Native Interface的缩写,通过使用 Java本地接口书写程序,可以确保代码在不同的平台上方便移植。从Java1.1开始,JNI标准成为java平台的一部分,它允许Java代码和其他语言写的代码进行交互

jni的主要功能,从jdk1.1开始jni标准就成为了java平台的一部分,它提供的一系列的API允许java和其他语言进行交互,实现了在java代码中调用其他语言的函数。通过jni的调用,能够实现这些功能:

1.当java无法独立完成时,可借助其他的语言,保证了跨平台的的同时对底层的控制

2.直接调用其他语言已经完成的一些现成功能

3.使用更加底层的语言实现程序对时间敏感性或对性能的要求

参考

NDK

NDK定义:Native Development Kit,是 Android的一个工具开发包

NDK是属于 Android 的,与Java并无直接关系

作用:快速开发C、 C++的动态库,并自动将so和应用一起打包成 APK

即可通过 NDK在 Android中 使用 JNI与本地代码(如C、C++)交互

应用场景:在Android的场景下 使用JNI

即 Android开发的功能需要本地代码(C/C++)实现

参考

app反调试加固

0x00 时间相关反调试

通过计算某部分代码的执行时间差来判断是否被调试,在Linux内核下可以通过time、gettimeofday,或者直接通过sys call来获取当前时间。另外,还可以通过自定义SIGALRM信号来判断程序运行是否超时。

0x01 检测关键文件

(1)/proc/pid/status、/proc/pid/task/pid/status

在调试状态下,Linux内核会向某些文件写入一些进程状态的信息,比如向/proc/pid/status或/proc/pid/task/pid/status文件的TracerPid字段写入调试进程的pid,在该文件的statue字段中写入t(tracing stop):

(2)/proc/pid/stat、/proc/pid/task/pid/stat

调试状态下/proc/pid/stat、/proc/pid/task/pid/stat文件中第二个字段是t(T):

(3)/proc/pid/wchan、/proc/pid/task/pid/wchan

若进程被调试,也会往/proc/pid/wchan、/proc/pid/task/pid/wchan文件中写入ptrace_stop。

0x02 检测端口号

使用IDA动态调试APK时,android_server默认监听23946端口,所以通过检测端口号可以起到一定的反调试作用。具体而言,可以通过检测/proc/net/tcp文件,或者直接system执行命令 netstat -apn 等。

0x03 检测android_server、gdb、gdbserver

在对APK进行动态调试时,可能会打开android_server、gdb、gdbserver等调试相关进程,一般情况下,这几个打开的进程名和文件名相同,所以可以通过运行状态下的进程名来检测这些调试相关进程。具体而言,可以通过打开/proc/pid/cmdline、/proc/pid/statue等文件来获取进程名。当然,这种检测方法非常容易绕过――直接修改android_server、gdb、gdbserver的名字即可。

0x04 signal

信号机制在apk调试攻防中有着非常重要的作用,大部分主流加固厂商都会通过信号机制来增加壳的强度。在反调试中最常见的要数SIGTRAP信号了,SIGTRAP原本是调试器设置断点时发出的信号,为了能更好的理解SIGTRAP信号反调试,先让我们看看一下调试器设置断点的原理:

参考

代码混淆 加固方法

1、字符串加密:

现状:对于字符串来讲,程序里面的明文字符串给静态分析提供了极大的帮助,好比说根据界面特殊字符串提示信息,从而定义到程序代码块,或者获取程序使用的一些网络接口等等。

加固:对程序中使用到字符串的地方,首先获取到使用到的字符串,固然要注意哪些是能加密,哪些不能加密的,而后对字符串进行加密,并保存加密后的数据,再在使用字符串的地方插入解密算法,这样就很好的保护了明文字符串。

2、类名方法名混淆

现状:目前市面上的IOS应用基本上是没有使用类名方法名混淆的,因此只要咱们使用class-dump把应用的类和方法定义dump下来,而后根据方法名就可以判断不少程序的处理函数是在哪。从而进行hook等操做。

加固:对于程序中的类名方法名,本身产生一个随机的字符串来替换这些定义的类名和方法名,可是不是全部类名,方法名都能替换的,要过滤到系统有关的函数以及类,能够参考下开源项目:https://github.com/Polidea/ios-class-guard

3、程序代码混淆

现状:目前的iOS应用找到可执行文件而后拖到Hopper Disassembler或者IDA里面程序的逻辑基本一目了然。

加固:能够基于Xcode使用的编译器clang,而后在中间层也就是IR实现本身的一些混淆处理,好比加入一些无用的逻辑块啊,代码块啊,以及加入各类跳转可是又不影响程序原有的逻辑。能够参考下开源项目:https://github.com/obfuscator-llvm/obfuscator/ 固然开源项目中也是存在一些问题的,还需本身再去作一些优化工做。

4、加入安全SDK

现状:目前大多数IOS应用对于简单的反调试功能都没有,更别说注入检测,以及其它的一些检测了。

加固:加入SDK,包括多处调试检测,注入检测,越狱检测,关键代码加密,防篡改等等功能。并提供接口给开发者处理检测结果。

参考

代码加壳

什么是加固加壳

对App资源代码进行保护,使其不容易被反编译工具解开。

加固的核心在于保证软件正常运行的同时又能保证源码的安全性。

为什么要加固加壳

若应用不做任何安全防护,极易被病毒植入、广告替换、支付渠道篡改、钓鱼、信息劫持等,严重侵害开发者的利益。

加固的方向有哪些

从对抗静态分析入手
资源文件保护
dex文件保护
AndroidManifest.xml文件的保护
从对抗动态分析入手
反调试
反hook
从对抗重打包入手
Apk签名校验
安装包文件完整性校验

加固具体思路

dex和elf文件是加固的重心

为了避免dex文件被直接还原成java文件被读出核心逻辑,一般会把dex写到so文件里面。

而elf文件本身是so文件,一般会通过混淆加反调试等操作

几代加固方案对比

针对dex/elf的加固发展出不同的方案,一般分为5代或者四代。但是说实话这种分代的说法也是一种个人说法,不算是一种标准。

参考

热修复

当一个产品上线后,如果出现了bug,传统的方式是,收集bug,修复,重新发布新版本。这样用户还得重新下载apk,在这介绍的是不用重新安装apk修复bug,这样的技术就称之为热修复技术。

参考

逆向工具

(1)反汇编工具

反汇编工具是逆向分析中,最重要的工具,它不仅仅能够将可执行文件的.二进制代

码翻泽成汇编代码,同时还可以根据软件内部的互相调用关系分析软件的结构,识别

软件的函数调用。反汇编工具在逆向分析中作为前期的处理者,能够极大的减少人工

工作。我们主要使用的反汇编工具有:

Ollydbg l.10(自由软件,功能强大,结合静态反汇编与动态调试的分析器)

Win32Dasml (自由软件,静态分析工具)

IDA pr0 5.0 (商业软件,最强大的静态反汇编工具)

(2)动态调试工具

动态调试工具是人工逆向分析中所用到的主要工具,在经过反汇编工具的处理之

后,我们可以获得人量的软件信息,但是软件的行为和许多细节,必须在运行过程中

才能寻找出来,因此我们需要结合动态调试上具进行分析。我们主要使用的动态调试

工具有:

Ollydbg l.10(自由软件,功能强大,结合静态反汇编与动态调试的分析器)

Windbg 6.7【8】(免费软件,Microsoft公司的内核级调试工具)

(3)软件信息识别和修改工具

软件信息识别和修改工具,是软件信息分析的重要辅助工具,通过这些工具灼帮

助我们能够方便的获取软件的内部资源信息,问时还可以修改一砦细节,方便调试。

我们常州的软件信息识别和修改工具有:

Hedit l.0(共享软件,16进制编辑器)

PEiD 0.94(免费较件,软件信息和编写语言分析工具)

(4)系统监视工具

作为黑箱分析的重要辅助手段,对于软件的各方面进行监视的工具是必不可少

的,我们将其分成网络监视,进程监视,文件监视和注册表监视网个方面:

Wireshark l.0 (免费软件,网络监视和包分析类软件)

Outpost Firewall 4.01 (共享软件,使用hook技术的Windows防火墙)

ProcExp 10.21 (免费软件,强人的进程分析软件)

FileMon 7.04 (免费软件,强大的文件读写监视软件)

RegMon 7.04 (免费软件,强大的注册表读写监视软件)

(5)专用反保护工具

LordPE (Win32 PE文件修改,转存工具)

ImportREC (Win32 PE文件结构修复软件)

AIl versions ASPack unpacker (免费软件,ASPack压缩壳脱壳工具)

UnPECompact2.02[19](免费软件,PECompact压缩壳脱壳工具)

UPX 3.0[20](自由软件,UPX压缩壳加壳和脱壳工具)

相关文章
|
8月前
|
编解码 Ubuntu Java
Android学习framework及搭建环境
Android学习framework及搭建环境
105 0
“framework必会”系列:Android Input系统(一)事件读取机制
曾经在开发的很长一段时间内,笔者对点击事件的认知只存在于自定义View中的`onTouchEvent`等方法的处理。 后来慢慢的接触到`Android的事件分发机制`,但也只是在**Activity->ViewGroup->View**层面的分发逻辑
|
1天前
|
安全 Linux Android开发
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
Android最强保活黑科技的最强技术实现,2024年最新阿里资深Android开发带你搞懂Framework
|
4天前
|
API Android开发
Android Framework增加API 报错 Missing nullability on parameter
Android Framework增加API 报错 Missing nullability on parameter
15 1
|
API Android开发
Android11.0(R) framework 新增类 lint 编码检查问题
Android11.0(R) framework 新增类 lint 编码检查问题
992 0
|
XML 存储 设计模式
Android Framework知识整理:WindowManager体系(上)
本篇是Android framework的第一讲《WindowManager体系-上》,重在讲解Window在被添加到WindowManagerService前的流程。
|
监控 Android开发 索引
“framework必会”系列:Android Input系统(二)事件分发机制
对于目前应用开发已经饱和的大环境下,作为一个多年Android开发,逼迫我们Android开发往更深层次的framework层走,于是就有了这么个系列
|
监控 Android开发
[RK3568 Android11]Framework层获取和处理按键事件流程总结
[RK3568 Android11]Framework层获取和处理按键事件流程总结
95 0
[RK3568 Android11]Framework层获取和处理按键事件流程总结
|
前端开发 Java Linux
内存泄露,OOM,ANR ,Devik 进程,Framework原理,Activity 生成一个 view,Android 中的动画,SurfaceView和V
内存泄露,OOM,ANR ,Devik 进程,Framework原理,Activity 生成一个 view,Android 中的动画,SurfaceView和V
204 0
|
Java Linux API
Framework笔记 | Android Framework用到了哪些IPC方式,分别在哪里用到
Framework笔记 | Android Framework用到了哪些IPC方式,分别在哪里用到