app(看书)

项目源码与apk的差异:dex文件

(java文件夹中所有的Java类编译而成的二进制文件)

.dex文件是Android系统虚拟机的可执行文件,所有的dex文件存储着APK整体业务逻辑的核心,因此它也是在逆向分析过程中关注的重点

resources.arsc文件,该文件是用于资源文件相关信息的文件

META-INF文件夹主要就是用于存储签名文件的,有利于重打包技术

1
2
3
4
5
6
7
8
9
10
11
12
在安卓平台上,重打包技术通常是指将已有的安卓应用程序(APK)进行修改、重新打包或重新签名,以实现不同的目的,如应用定制、应用破解、应用逆向工程等。下面是几种常见的安卓重打包技术:

反编译和重新编译:使用工具如Apktool、dex2jar和JD-GUI等,可以将APK文件反编译为其源代码(Smali或Java)和资源文件,然后对代码进行修改,最后重新编译成新的APK文件。

修改资源文件:通过解压APK文件,可以修改其中的资源文件,例如图标、布局、字符串等,从而改变应用的外观和用户界面。

修改配置文件:APK文件中的配置文件(如AndroidManifest.xml)包含应用的各种设置和权限信息。通过修改这些配置文件,可以实现一些特定的功能,如去除广告、修改权限等。

动态链接库(Native Library)替换:某些应用程序使用C或C++编写的动态链接库(.so文件)来实现一些高性能或底层功能。通过替换这些动态链接库,可以修改应用的行为或注入自定义的代码。

重新签名:应用程序在发布时通常都会经过签名,以验证应用的完整性和可信性。通过重新签名APK文件,可以修改应用的签名信息,从而绕过某些验证机制或伪装成其他应用。

静态分析防止手段 攻击手法

​ 1 .代码混淆 1.动态调试

​ 2.动态加载

动态分析防止手段

​ 1.运行时检测

1.1例如:如果调用ptrace()函数对进程进行附加,那么会存在相应的特征点,比如/proc//status文件中的TracePid变量在进程被附加后会由0变为附加进程的pid

IDA调试的服务端android_server64 的 进 程 pid 为 18174 , demo02 的 进 程pid 为17887,当使用IDA附加到demo02进程后查看demo02进程的proc//status 文 件 时 , 会 发 现 TracerPid 的 值 变 成 了android_server64的进程pid

image-20231127210645463

1.2 指令执行时间差进行检测

​ 2.事先阻止

2.1 双进程保护

双进程保护是利用一个进程最多只能被一个进程ptrace附加的特性,事先在代码中自己fork一个子进程ptrace,ptrace自己就可以防止再被其他进程ptrace,也就变相地阻止了进程被调试

app加固

1.DEX加固:App加固的核心原理是将DEX整体加密后动态加载

2.代码抽取保护:App加固的关键在于真正的代码数据并不与DEX的整体结构数据存储在一起,就算DEX被完整地从内存中dump(转储)出来,也无法看到真正的函数代码

例子:,某DEX整体加固被dump出来之后,使用Jadx查看关键函数,发现其代码被nop这一无意义的代码填充了。这种加固的核心原理是利用私有函数,通过对自身进程的Hook来拦截函数被调用时的路径,在抽取的函数被真实调用之前,将无意义的代码数据填充到对应的代码区中。

image-20231127214548626

代码抽取保护通常在函数被第一次调用后就不再将函数内容重新置空,这也正是如今依然存在一些从内存中把DEX整体dump出来的方案,因为只需要在App运行时多触发几次程序逻,然后再进行DEX的dump,即可得到更加完整的DEX文件

3.加壳保护手段——VMP与Dex2C

VMP:其核心逻辑是将所有的代码使用自定义的解释器执行。这时的代码不再依赖于系统本身,即使获得了所有的函数内容,也是貌合神离、不知所云。这时唯一的解决方案可能是逆向对应的解释器,以找到与系统解释器的映射关系