资源共享吧|易语言论坛|逆向破解教程|辅助开发教程|网络安全教程|www.zygx8.com|我的开发技术随记

 找回密码
 注册成为正式会员
查看: 845|回复: 1

[安卓逆向破解] 零基础安卓逆向学习之旅(二)

[复制链接]

8

主题

8

帖子

0

精华

新手上路

Rank: 1

资源币
19
积分
16
贡献
0
在线时间
2 小时
注册时间
2020-2-20
最后登录
2020-5-2
发表于 2020-2-20 13:20:08 | 显示全部楼层 |阅读模式
零基础安卓逆向学习之旅(二)

0x00 前言

     上期小狼跟大伙儿分享了如何检测安卓逆向环境,大伙儿是否有遇到问题呢?其实,小狼在上期中没有特别指出来哦,今天就跟大伙儿说说困扰小狼些时日的问题。

   今天跟大家分享的是安卓逆向之初步检查APP安全,准备好了吗?要开始啦~~~

0x01 正文

    上期文章没有特别指出不能更新SDK的问题哦,聪明的小伙伴们是否自己找到解决方法了呢?其实可以挂代理咧,操作步骤如下:

    Tools—>options

    mirrors.neusoft.edu.cn

    80

1.jpg
2.jpg

解决了上次的问题,接下就开始我们今天的正文啦~

1、检查APP证书及其签名

     APP证书是开发者用来确保用户对他们在APP市场上发布的应用程序的信任,证书中通常包括开发者的认证信息及对APP的相关加密算法。每个APP在被安装之前都必须是通过证书签名过的,通过签名可以确保APP的完整性及有效防止“盗版”。

① 创建并启动AVD

      创建 [path-to-your-sdk-install]/androidcreate avd –n [your avdname] –t [system image target] -b [target/adis]


3.jpg

启动 [path-to-your-sdk-install]/emulator –avd [your avdname] –no-boot-anim


4.jpg


② 从设备中拷贝apk到本地

      shell设备,查看apk的相应路径



5.jpg


将apk拷贝到本地
6.jpg


③ 查看APP证书及签名

    apk文件实际上是zip格式的压缩包,只是被更改了文件名而已,先将apk转变为zip格式压缩包,再进行解压 。

7.jpg

解压后会新增相应文件及目录。
8.jpg

查看META-INF下文件的内容 ,CERT.RSA是包含有公钥证书的文件,使用keytool进行查看:keytool –printcert –file META-INF/CERT.RSA

9.jpg


关联app内容的签名的文件是META-INF,可以通过cat/vim查看其内容
10.jpg


其中SHA1-Digest-manifest是app每个资源文件所对应的摘要信息,所显示的是通过base64编码过的。

④ 解剖包含有公钥证书和签名的目录META-INF

    CERT.RSA:是app证书,需要通过keytool查看其信息,其中包含有公钥持有者、发行人的基本信息,证书的有效期限,证书指纹等。

    CERT.SF:这是包含有app每个资源文件摘要信息的文件,这些摘要信息是通过私钥进行加密签名的,需要使用公钥才能解密;在app安装过程中,每个资源文件都会生成摘要信息与这里解密后的摘要进行对比,从而确保app的完整性。

    MANIFEST.MF:与CERT.SF保存着相似的资源摘要信息,但未用私钥进行加密签名。

⑤ 可以使用OpenSSL查看完整的公钥证书

    openssl pcks7 –inform DER –in META-INF/CERT.RSA–noout –print_certs –text

11.jpg

2、Android app签名

① 移除META-INF目录

    rm -r [path-to-unzipped-apk]/META-INF

②创建一个密钥库(keystore),从而持有私钥用于签名app

    keytool –genkey –v -keystore [nameofkeystore]–alias

    [your_keyalias] –keyalg RSA –keysize 2048 –validity

    [numberofdays]

    –genkey:用于告知keytool生成key

    -v:信息输出,可选择

    -keystore:密钥库名

    -alias:别名

    –keyalg:加密算法

      过程需要设定密码及确认基本信息 。

12.jpg


③ app签名

    jarsigner –verbose –sigalg MD5withRSA –digestalgSHA1 –

    keystore [name of your keystore] [your .apk file][your keyalias]

    –sigalg:提供签名过程的算法;

    –digestalg:提供在计算apk文件中每个资源签名的算法;

      用于添加包含有证书及签名的META-INF目录。

④ 检查app签名

    jarsigner –verify –verbose [path-to-your-apk]

3、检查AndroidManifest.xml文件

    AndroidManifest.xml文件包含了app中的所以许可信息及app中包含的各个组成成分。

① 安装apktool

    访问http://ibotpeaches.github.io/Apktool/install/

13.jpg

② 下载apktool.jar文件及其script,将两个文件放置在/sdk/platform-tools/目录下尝试执行./apktool -help,确定是否安装成功

14.jpg

③利用apktool生成AndroidManifest.xml文件

    /[path-to-apktool]/apktool d -f –s [apk file] -odecode/

15.jpg

④ 通过cat/vim查看AndroidManifest.xml文件内容,包含app安装信息
16.jpg


Android app清单是以XML语言的格式保存在.xml文件中的,其中各个标签及标签中的属性都代表着app的各个配置信息。

    第一行则是表明该.xml文件的语言版本及编码格式:

    <manifest>:是XML文件的根标签,也是app清单的开始标签;

     package:是该app包内java主程序包的包名,它也是一个应用进程的默认名称;

    <uses-permission>:为了保证Android应用的安全性,应用框架制定了比较严格的权限系统,一个应用必须声明了正确的权限才可以使用相应的功能,例如我们需要让应用能够访问网络就需要配置“android.permission.INTERNET”,而如果要使用设备的相机功能,则需要设置 “android.permission.CAMERA”;

    <permission>:权限声明标签,定义了供给<uses-permission>使用的具体权限,当需要给其他应用程序提供可调用的代码或者数据,则需要使用<permission>标签;

       android:description:权限描述;

       android:icon:权限图标;

       android:name:权限名;

       android:protectionLevel:代表着不同级别的权限;

       dangerous:允许获取敏感用户数据及操作系统配置信息;

       normal:获取正常数据及服务;

       signature/signatureOrSystem:用于同一证书签名的应用间自动获取信息

通常可以通过查看该标签确定其权限是否适当,同时涉及到dangerous/normal权限在安装时会询问用户是否允许,而后两个则不会显示相关用户确认的信息;

    <application>:声明一个应用的开始;

       debuggable:当设置为true时,表明该APP在手机上可以被调试,默认为false;

       enabled:是否能够实例化该应用程序的组件,如果为true,每个组件的enabled属性决定那个组件是否可以被enabled。如果为false,它覆盖组件指定的值;所有组件都是disabled;

       allowClearUserData:是否能选择自行清除数据,默认为true;

       android:exported:Activity是否可以被另一个Application的组件启动,true允许被启动;false不允许被启动,如果被设置为了false,那么这个Activity将只会被当前Application或者拥有同样user ID的Application的组件调用。在没确定exported 的默认值时,还需要根据Activity中是否有intent filter(过滤器) 来定。没有任何的filter意味着这个Activity只有在详细的描述了他的class name后才能被唤醒。这意味着这个Activity只能在应用内部使用,因为其它application并不知道这个class的存在。所以在这种情况下,它的默认值是 false。从另一方面讲,如果Activity里面至少有一个filter的话,意味着这个Activity可以被其它应用从外部唤起,这个时候它的默认值是true;

       android:name:明确包含有java代码的class file;

       android:permission:是否允许请求与该组件交互;

       android:enabled:是否允许系统启动、实例化该组件;

    <service>:服务组件,程序运行在后台中;

       android:isolateProcess:在没有许可下,服务是否可以在分离的进程运行;

    <receiver>:广播接受器组件;

    <provider>:内容提供者组件;

       android:writePermission:对相应组件授予可写权限;

       android:readPermission:对相应组件授予可读权限。

4、通过ADB与app活动管理者交互

① 通过shell连接设备并运行pm list packages查看设备程序包列表


17.jpg

ADB启动app活动组件(am start <package name>/<activityname>)

  启动小米Email欢迎界面


18.jpg


③ 启动服务组件(am startservice <package name>/<servicename>)

  更多:可通过am查看其功能的使用

5、利用ADB获取app的资源

① 前提:实体设备应将其rooted,取得root权限

② 在/data/data目录,保存着各个程序包的资源

19.jpg

③ ls –alR */databases/ 查看数据库资源

    ls –alR*/files/ 查看文件资源

20.jpg

④ 利用sqlist3工具查看.db数据库文件的信息

    从设备中拷贝.db文件


21.jpg


利用[path ofplatform-tools]目录下的sqlite3工具查看数据库信息


22.jpg

结语:今天跟大伙分享的是如何检查APP的证书与签名、查看Mainfest及本地数据库等文件

回复

使用道具 举报

2

主题

302

帖子

0

精华

终身高级VIP会员

Rank: 7Rank: 7Rank: 7

资源币
4
积分
309
贡献
0
在线时间
37 小时
注册时间
2020-8-14
最后登录
2023-2-6

终身VIP会员

发表于 2020-9-19 09:07:29 | 显示全部楼层
祝资源共享吧越来越火!
回复 支持 反对

使用道具 举报

 点击右侧快捷回复  

本版积分规则

小黑屋|资源共享吧 ( 琼ICP备2021005790号-1 )

GMT+8, 2024-3-29 08:34 , Processed in 0.053632 second(s), 15 queries , MemCached On.

Powered by Discuz! X3.4 Licensed

Copyright © 2001-2021, Tencent Cloud.

快速回复 返回顶部 返回列表