Android小代码
在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小代码相关推荐
- Android小项目之--前台界面与用户交互的对接 进度条与拖动条(附源码)
都知道水果公司(苹果)是己尊重用户体验著称的公司,其设计的产品人性化十足,不得不令后来者赞叹,竞相模仿.iphone的成功就是其典型的案例,做为其移动系统的死对头 Google 想要在市场上分得一杯羹 ...
- android库项目管理,一个android工程代码多个差异化项目管理方法探讨
一个android工程代码多个差异化项目管理方法探讨 核心提示: 1.工程代码中尽量不要使用产品名称.设备名称之类的东西来区分,尽量以功能名称来区分,在工程独立的配置文件中再去配置这个文件: 2.在c ...
- 美团外卖Android Lint代码检查实践
概述 Lint是Google提供的Android静态代码检查工具,可以扫描并发现代码中潜在的问题,提醒开发人员及早修正,提高代码质量.除了Android原生提供的几百个Lint规则,还可以开发自定义L ...
- Android 小项目之--数据存储【Files】(附源码)
继上篇数据存储,现在我们来讲讲另外一种数据存储,Files.本篇讲述步骤如下: 1.温故而知新,复习四种数据存储的区别. 2.什么是 Files 数据存储. 3.什么是 Properties ? 4. ...
- android studio光标变成黑块,解决Android Studio 代码无提示无颜色区分问题
解决Android Studio 代码无提示无颜色区分问题 一.问题 ①java代码没有颜色区分,统一黑色 ②代码不会联想提示,原来打前几个字母便会联想到后面的内容 二.解决 打开File,将Powe ...
- 用eclipse开发android小程序,【转】Eclipse 开发Android小程序遇到的问题总结
用Eclipse 开发Android小程序遇到些小问题,在一边学习的过程中,将遇到的问题就记录一下,方面挺杂的,有关于程序出错的,关于linux应用的,有eclipse设置等- 1.ERROR: Ap ...
- Android小項目之---ListView实现论坛管理效果(附源碼)
在android系統中,ListView的用法稍微複雜一點,配置Adpater就有幾種方法,如ArrayAdapter,SimpleAdapter等.查了一些網上的相關例子,有很多都是用ListAct ...
- Android小知识10则(上)(2018.8重编版)
Android小知识10则(下) 目录 前言 横竖屏锁定 不同分辨率的图标 将字符串写在资源文件中 为AlertDialog设置点击监听 ProgressDialog了解一下 最后 前言 Androi ...
- android小游戏模版—重力感应
好久没更新博客了,今天来谈谈android小游戏---重力感应,一般在游戏里运用的比較多,比方这类游戏有:神庙逃亡.极品飞车,平衡球.三围重力迷宫,重力赛车等. 首先什么是重力感应.重力感应是指如今手 ...
最新文章
- Centos6.5安装python2.7与pip
- p3295 [SCOI2016]萌萌哒
- C语言-链表的创建头插法和尾插法(有无头节点)
- 【Android 热修复】热修复原理 ( 热修复框架简介 | 将 Java 字节码文件打包到 Dex 文件 )
- 计算机语言低下限高上限,原神双雷阵容厉不厉害
- 8K 星!这可能是最适合你的 TensorFlow 教程
- NAACL 2019 | 怎样生成语言才能更自然,斯坦福提出超越Perplexity的评估新方法
- java c s是什么_Java在C/S
- 侵犯著作权法定赔偿额上限提高至500万元
- git github gitlib gitlab
- 《网管员必读——网络组建》(第2版)导读
- h5网站服务器配置,h5的web服务器配置
- gitbub 上删除仓库
- 数据迁移方案-云迁移
- 计算机高程知识点,工程测量重点全部知识点(中国矿业大学)
- 全球最大湾区|微信大数据:《粤港澳大湾区智慧生活圈报告》
- 马士兵 java内存_学习笔记-马士兵java-JAVA的面向对象与内存解析
- 基于java+ssm+mysql的网上二手车交易系统
- OSChina 周二乱弹 ——程序员吹完牛逼 都自己加班去了
- 基于深度卷积神经网络分割的飞机类型识别
热门文章
- 如何在微信小程序中使用ECharts图表
- 矩阵位移法是用于求解杆系结构的计算机方法,结构力学的教学思路
- 开源之道解读 Liunx 基金会开源办公室调查报告
- Linux下Fluent运行脚本及PBS脚本、Fluent TUI指令和Tecplot的一些操作
- 云重磅 |央视专访任正非;拼多多被薅上亿羊毛;甲骨文对云未来的10项技术预测...
- Data + AI Summit 2022 超清视频下载
- python interpolate_[转载]python插值
- Java Apache Commons Collection3.2.1 理解Transformer 接口
- Linux 中用 dd 命令来测试硬盘读写速度
- [Go WebSocket] 为什么我选用Go重构Python版本的WebSocket服务?