在Android中,开发者可以自由实现SSL通信,然而很多企业出于业务性能的考虑以及安全意识的欠缺,软件在实现https通信时忽略了证书校验或证书校验不严格,致使用户的敏感数据在传输过程中有可能遭受中间人攻击而泄露。

Android中SSL通信的不安全实现一般来源于下面5处:

1.自定义TrustManager,接管了系统原有的证书校验,checkServerTrusted()函数却是空实现。
2.自定义hostnameVerifier,verify()函数却总是返回true。
3.使用AllowAllHostnameVerifier进行实例化,信任任意的hostname。
4.使用不安全的SSLSocketFactory来禁用所有的SSL安全校验。
5.WebView遇到证书错误直接使用proceed()函数忽略继续。
来源:京东手机APP下个单彻底丧失账号控制权(需中间人环境)

常用路径

来源:https://blog.csdn.net/a910626/article/details/51470866
https://blog.csdn.net/losefrank/article/details/53464646
Context.getExternalFilesDir()方法和Context.getExternalCacheDir()方法获得的两个目录分别对应 设置->应用->应用详情里面的”清除数据“与”清除缓存“选项。

Environment.getDataDirectory() = /data
Environment.getDownloadCacheDirectory() = /cache
Environment.getExternalStorageDirectory() = /mnt/sdcard
Environment.getExternalStoragePublicDirectory(“test”) = /mnt/sdcard/test
Environment.getRootDirectory() = /system
getPackageCodePath() = /data/app/com.my.app-1.apk
getPackageResourcePath() = /data/app/com.my.app-1.apk
getCacheDir() = /data/data/com.my.app/cache
getDatabasePath(“test”) = /data/data/com.my.app/databases/test
getDir(“test”, Context.MODE_PRIVATE) = /data/data/com.my.app/app_test
getExternalCacheDir() = /mnt/sdcard/Android/data/com.my.app/cache
getExternalFilesDir(“test”) = /mnt/sdcard/Android/data/com.my.app/files/test
getExternalFilesDir(null) = /mnt/sdcard/Android/data/com.my.app/files
getFilesDir() = /data/data/com.my.app/files

查看某app的签名版本

adb shell pm dump com.example|grep apkSigningVersion

命令行查看系统版本号

adb shell getprop ro.build.version.release

根据界面元素id定位代码

uiautomatorviewer

获取机器wlan0无限网卡的MAC地址:

adb shell cat /sys/class/net/wlan0/address

查看WIFI密码

root@hammerhead:/data/misc/wifi # cat wpa_supplicant.conf

列出所有的包名

$ adb shell pm list packages

拨打电话

$ adb shell am start -a android.intent.action.CALL -d tel:10086

打开网页

$ adb shell am start -a android.intent.action.VIEW -d https://www.baidu.com

查看后台service列表

$ service list

从已安装的包中得到其入口Activity

这种情况适用于apk已安装在设备上,不方便将其提取到本地,直接在adb shell中操作。

$ adb shell dumpsys package  com.example.cctf|head -6
Activity Resolver Table:Non-Data Actions:android.intent.action.MAIN:25d58f8 com.example.cctf/.MainActivity filter 1e3f12b9Action: "android.intent.action.MAIN"Category: "android.intent.category.LAUNCHER"

从apk的AndroidManifest.xml中提取入口Activity

这种情况适用于apk文件直接在本地,直接对其分析

方法一:python脚本

其实就是用Python的zipfile读取其AndroidManifest.xml文件然后用一个jar包工具解析二进制的manifest文件,从所有activity中找到属性为android.intent.action.MAIN的Activity。
参考:
https://github.com/DrizzleRisk/BUnpacker/blob/8e92b42b0e02c0721656c870612cd1482bea73c2/bunpacker.py

import os, sys
import zipfile  # 用于解压apk包
from xml.dom import minidom # 用于xml解析操作PACKAGE_NAME = ''       # 应用包名
START_ACTIVITY = ''     # 启动的Activity
APK_PATH = sys.argv[1]  # apk文件所在路径为从命令行传入的第一个参数
nxml = open('tmp/nxml.xml','w') # 打开空的xml文件待写入manifest信息
zf = zipfile.ZipFile(APK_PATH, 'r')
content = zf.read('AndroidManifest.xml') # 读取manifest文件内容
nxml.write(content)   将读取到的manifest文件写入xml中
nxml.close()
content = os.popen('java -jar ext-tools/AXMLPrinter2.jar tmp/nxml.xml').read()
mfest = minidom.parseString(content)  # 使用minidom解析manifest内容
manifest = mfest.getElementsByTagName('manifest') # 得到根
activities = mfest.getElementsByTagName("activity") # 得到所有的activity
for node in manifest:PACKAGE_NAME = node.getAttribute("package") # 遍历manifest的各个节点,找到package名for activity in activities:# 找到入口Activityfor sitem in activity.getElementsByTagName("action"):val = sitem.getAttribute("android:name")if val == "android.intent.action.MAIN" :START_ACTIVITY = activity.getAttribute("android:name")

还挺好用的。

方法二:使用Android的SDK自带的build-tools/aapt工具

不过其实用build-tools/aapt工具就可以了,基本信息就可以一目了然了。

[~/Downloads/apk/lanxin_v3.4.1_from_apkpure]$ aapt dump badging lanxin_v3.4.1.apk|head -1     [22:58:16]
package: name='com.unicom.gudong.client' versionCode='52508' versionName='3.4.1' platformBuildVersionName=''
[~/Downloads/apk/lanxin_v3.4.1_from_apkpure]$ aapt dump badging lanxin_v3.4.1.apk|grep "launchable-activity"
launchable-activity: name='com.comisys.gudong.client.LoadActivity'  label='「蓝信」' icon=''

然后将两个命令通过 && 合起来即可。

可以将其写成脚本。

$ mv apk_info.sh /usr/local/bin/apk_info
$ which apk_info                             [0:10:59]
/usr/local/bin/apk_info

查看当前前台Activity

[~/GitProjects]$ adb shell dumpsys activity top |head -2                                       [1:07:34]
TASK cn.nubia.launcher id=23520ACTIVITY cn.nubia.launcher/com.android.launcher3.Launcher 6b836aa pid=1819

可显示pid,比下面的要好

[~/GitProjects]$ adb shell dumpsys window windows | grep -E 'mCurrentFocus'                    [1:07:02]mCurrentFocus=Window{6ddf61 u0 cn.nubia.launcher/com.android.launcher3.Launcher}

使用jadx以反混淆的方式dump出apk

这里将unpack_demo.apk以反混淆的方式dump到./jadx-gui目录。

[~/Downloads/android]$ jadx unpack_demo.apk -d ./jadx-gui --deobf                              [0:00:40]
00:01:42 INFO  - loading ...
00:01:42 WARN  - Unknown 'R' class, create references to 'loading.androidmanual.R'
00:01:42 INFO  - processing ...
00:01:49 INFO  - done

结果为:

Android小代码相关推荐

  1. Android小项目之--前台界面与用户交互的对接 进度条与拖动条(附源码)

    都知道水果公司(苹果)是己尊重用户体验著称的公司,其设计的产品人性化十足,不得不令后来者赞叹,竞相模仿.iphone的成功就是其典型的案例,做为其移动系统的死对头 Google 想要在市场上分得一杯羹 ...

  2. android库项目管理,一个android工程代码多个差异化项目管理方法探讨

    一个android工程代码多个差异化项目管理方法探讨 核心提示: 1.工程代码中尽量不要使用产品名称.设备名称之类的东西来区分,尽量以功能名称来区分,在工程独立的配置文件中再去配置这个文件: 2.在c ...

  3. 美团外卖Android Lint代码检查实践

    概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...

  4. Android 小项目之--数据存储【Files】(附源码)

    继上篇数据存储,现在我们来讲讲另外一种数据存储,Files.本篇讲述步骤如下: 1.温故而知新,复习四种数据存储的区别. 2.什么是 Files 数据存储. 3.什么是 Properties ? 4. ...

  5. android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题

    解决Android Studio 代码无提示无颜色区分问题 一.问题 ①java代码没有颜色区分,统一黑色 ②代码不会联想提示,原来打前几个字母便会联想到后面的内容 二.解决 打开File,将Powe ...

  6. 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结

    用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...

  7. Android小項目之---ListView实现论坛管理效果(附源碼)

    在android系統中,ListView的用法稍微複雜一點,配置Adpater就有幾種方法,如ArrayAdapter,SimpleAdapter等.查了一些網上的相關例子,有很多都是用ListAct ...

  8. Android小知识10则(上)(2018.8重编版)

    Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...

  9. android小游戏模版—重力感应

    好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感应.重力感应是指如今手 ...

最新文章

  1. Centos6.5安装python2.7与pip
  2. p3295 [SCOI2016]萌萌哒
  3. C语言-链表的创建头插法和尾插法(有无头节点)
  4. 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )
  5. 计算机语言低下限高上限,原神双雷阵容厉不厉害
  6. 8K 星!这可能是最适合你的 TensorFlow 教程
  7. NAACL 2019 | 怎样生成语言才能更自然,斯坦福提出超越Perplexity的评估新方法
  8. java c s是什么_Java在C/S
  9. 侵犯著作权法定赔偿额上限提高至500万元
  10. git github gitlib gitlab
  11. 《网管员必读——网络组建》(第2版)导读
  12. h5网站服务器配置,h5的web服务器配置
  13. gitbub 上删除仓库
  14. 数据迁移方案-云迁移
  15. 计算机高程知识点,工程测量重点全部知识点(中国矿业大学)
  16. 全球最大湾区|微信大数据:《粤港澳大湾区智慧生活圈报告》
  17. 马士兵 java内存_学习笔记-马士兵java-JAVA的面向对象与内存解析
  18. 基于java+ssm+mysql的网上二手车交易系统
  19. OSChina 周二乱弹 ——程序员吹完牛逼 都自己加班去了
  20. 基于深度卷积神经网络分割的飞机类型识别

热门文章

  1. 如何在微信小程序中使用ECharts图表
  2. 矩阵位移法是用于求解杆系结构的计算机方法,结构力学的教学思路
  3. 开源之道解读 Liunx 基金会开源办公室调查报告
  4. Linux下Fluent运行脚本及PBS脚本、Fluent TUI指令和Tecplot的一些操作
  5. 云重磅 |央视专访任正非;拼多多被薅上亿羊毛;甲骨文对云未来的10项技术预测...
  6. Data + AI Summit 2022 超清视频下载
  7. python interpolate_[转载]python插值
  8. Java Apache Commons Collection3.2.1 理解Transformer 接口
  9. Linux 中用 dd 命令来测试硬盘读写速度
  10. [Go WebSocket] 为什么我选用Go重构Python版本的WebSocket服务?