Android小代码

23 篇文章 0 订阅

在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 1e3f12b9
          Action: "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:
   # 找到入口Activity
            for 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=23520
  ACTIVITY 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

结果为:
这里写图片描述

  • 0
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值