Android逆向笔记之APK查壳工具PKID
一、 壳是什么东西
Android上的应用安装文件是apk格式的,这个apk文件其实就是个归档文件压缩包,把应用相关的源码、资源文件、配置文件等等乱七八糟的东西都简单粗暴的归档打包,直接解压之后就能得到app的dalvik指令集dex文件,然后再反编译为smali,还可以再反编译为Java,这样就几乎等同于拿到了app就能拿到可读性还蛮清晰的源码,导致逆向破解的门槛几乎很低,有手点点鼠标就行,门槛之低像我这样的阿猫阿狗都可以捣鼓逆向了 :)
没有做防范措施的app几乎等同于在裸奔,因此后来演变出来一些保护措施,这是从PC端的逆向攻防中得到的启示方案,就是在apk外面再套一层壳,在运行的时候这层壳才会把真正的apk的dalvik指令集释放出来,为apk加壳是目前主流的防护方案。
为了培养开发者的安全意识,现在很多应用平台都是要求开发者在上传应用之前要先加固,很多应用平台也提供了自己的加固方案,开发者也可以自行研究加壳方案,对于开发者来说,为apk文件加壳是一件非常简单的事情,所以现在市面上的应用大部分都是被加过壳的,但是对于逆向者来说,真正的源码是隐藏在壳之下的,要想拿到源码研究其逻辑就要先想办法将壳脱掉,所以我们拿到一个apk要逆向的第一步就是用查壳工具看下这个apk文件是否加壳,以及加了什么壳,然后想办法把壳脱掉,拿到dex文件再去分析。查壳工具其实是有很多的,知道原理我们自己也可以写,只是没什么必要,本篇文章就是介绍一个查壳工具PKID。
二、 PKID的下载
PKID有两个版本,最开始是只有Windows版本的,后来有位大佬用Mac,觉得每次用的时候都要开虚拟机太麻烦了于是写了个Java版的,读者请根据自己的情况下载不同的版本。
https://www.secpulse.com/archives/68886.html
Windows版下载地址:https://www.jb51.net/softs/603472.html#downintro2
Java版的看雪论坛下载地址:https://bbs.pediy.com/thread-225120.htm
三、 PKID的使用
Windows版的:
直接拖动apk文件到窗口上松开:
PKID的使用非常简单,只需要将apk拖放到窗口上松开即可,比如下面是查壳识别结果,这个游戏app用了360的壳:
查壳是我们破解一个app的第一步,通常情况下我们要先知道一个app有没有加壳,加了什么壳要找到对应的脱壳方法,想办法得到真正的源码之后才开始分析源码开始破解。
四、 识别原理简介
对于加了壳的apk,包里面会有一些符合特定特征的文件,比较简单的方式就是通过检测apk是否符合这些特征,当然随着各大加固平台不断的迭代,其特征也可能会不断的迭代。
我们只需要知道大概原理就可以了,常见的特征判断是判断lib下是否存在特定的so文件,比如看雪上有人总结过的:
https://bbs.pediy.com/thread-223248.htm
Android逆向笔记:练手crackme之num1r0的几个apk
Android逆向笔记之AndroidStudio生成so并调用native方法
Android逆向笔记之AndroidKiller报错:Exception in thread "main" x.x.x.x: resource spec: 0x01010543
Android逆向笔记之ctflearn上的几道Android RE题目练手
Windows环境下ARM汇编练习环境的搭建(CodeWarrior for ARM Developer Suite)
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 10年+ .NET Coder 心语,封装的思维:从隐藏、稳定开始理解其本质意义
· .NET Core 中如何实现缓存的预热?
· 从 HTTP 原因短语缺失研究 HTTP/2 和 HTTP/3 的设计差异
· AI与.NET技术实操系列:向量存储与相似性搜索在 .NET 中的实现
· 基于Microsoft.Extensions.AI核心库实现RAG应用
· 10年+ .NET Coder 心语 ── 封装的思维:从隐藏、稳定开始理解其本质意义
· 地球OL攻略 —— 某应届生求职总结
· 提示词工程——AI应用必不可少的技术
· Open-Sora 2.0 重磅开源!
· 周边上新:园子的第一款马克杯温暖上架