搭建Android开发环境
1.下载最新的sdk包
去官网找下载链接:http://developer.android.com/sdk/index.html
64位版本:https://dl.google.com/android/adt/adt-bundle-windows-x86_64-20140702.zip
32位版本:https://dl.google.com/android/adt/adt-bundle-windows-x86-20140702.zip
有一个小技巧就是,使用百度网盘的“离线下载”,然后“新建链接任务”,就可以快速将文件保存至网盘,然后再从网盘中下载,速度飞快!(同理可以运用到其它的一些被墙掉的下载任务中)
2.解压
然后进入其中的eclipse文件夹,点击其中的“eclipse.exe”运行Eclipse;
点击Windows选项下的“Android SDK Manager”,在创建模拟的Android环境之前,需要先安装对应的Packages,这里给出一些提示,是关于在下载、安装过程中可能会碰到的问题的:
(1)修改hosts文件以提升下载速度(添加文章末尾给出的hosts列表然后刷新一下DNS即可)
(2)清除cache,否则可能还是会出现错误or不出现可用的packages
3.创建一个AndroidVirtualDevice并打开
进入Eclipse界面,点击Windows选项下的“Android Virtual Device Manager”,然后一步步按照提示进行操作即可创建一个avd(提示:多分配一些资源,否则到时候启动了会比较卡,影响学习进度和心情)(上一步中多安装一些packages,这一步选择的余地就多一些,可模拟的场景/环境也会多些)
4.从命令行打开已创建的AndroidVirtualDevice(用于监听流量进行测试)
从命令行打开之前创建的avd,并设置HTTP代理,方便在主机上使用Fiddler进行流量监听:
emulator -avd hi -http-proxy http://localhost:8888
使用命令安装在主机中的apk文件到avd中:
adb install “D:downLodasweixin540android480.apk”
附1:hosts列表
203.208.46.146 www.google.com
74.125.113.121 developer.android.com
203.208.46.146 dl.google.com
203.208.46.146 dl-ssl.google.com
附2:一些环境的提前准备
=====
安装jdk
我的电脑,属性,高级,环境变量,在下面添加三项:
- 变量名:CLASSPATH
- 变量值:.;C:JDK的安装目录libdt.jar;c:JDK的安装目录libtools.jar
- 变量名:JAVA_HOME
- 变量值:JDK的安装目录
- 变量名:PATH
- 变量值:JDK的安装目录bin
参考:
http://hi.baidu.com/ultimatesniper/item/33f1d6f8201d18ca0dd1c8bb
=====
添加系统路径
D:\adt-bundle-windows-x86_64-20140702eclipse D:\adt-bundle-windows-x86_64-20140702sdktools D:\adt-bundle-windows-x86_64-20140702sdkplatform-tools
=====
在开启模拟器的情况下(emulator -avd hi)可以执行下面的命令进行adb相关命令的学习:
android list targets
android list avd
adb get-serialno
adb devices
adb bugreport
adb get-state
adb status-window
从电脑上发送文件到设备(adb push)
D:\downLoads>adb push weixin540android480.apk /data/app 1004 KB/s (24157708 bytes in 23.478s)
从设备上下载文件到电脑(adb pull)
D:\downLoads>adb pull /data/app/ApiDemos.apk . 1044 KB/s (4764083 bytes in 4.452s)
adb shell命令
# date
# cat /proc/cpuinfo
# cat /proc/meminfo
# df
# ps
# logcat -b radio
root@generic:/ # sqlite3 sqlite3 SQLite version 3.7.11 2012-03-20 11:35:50 Enter ".help" for instructions Enter SQL statements terminated with a ";" sqlite> .help .help .backup ?DB? FILE Backup DB (default "main") to FILE .bail ON|OFF Stop after hitting an error. Default OFF .databases List names and files of attached databases .dump ?TABLE? ... Dump the database in an SQL text format If TABLE specified, only dump tables matching LIKE pattern TABLE. .echo ON|OFF Turn command echo on or off .exit Exit this program .explain ?ON|OFF? Turn output mode suitable for EXPLAIN on or off. With no args, it turns EXPLAIN on. .header(s) ON|OFF Turn display of headers on or off .help Show this message .import FILE TABLE Import data from FILE into TABLE .indices ?TABLE? Show names of all indices If TABLE specified, only show indices for tables matching LIKE pattern TABLE. .log FILE|off Turn logging on or off. FILE can be stderr/stdout .mode MODE ?TABLE? Set output mode where MODE is one of: csv Comma-separated values column Left-aligned columns. (See .width) html HTML <table> code insert SQL insert statements for TABLE line One value per line list Values delimited by .separator string tabs Tab-separated values tcl TCL list elements .nullvalue STRING Print STRING in place of NULL values .output FILENAME Send output to FILENAME .output stdout Send output to the screen .prompt MAIN CONTINUE Replace the standard prompts .quit Exit this program .read FILENAME Execute SQL in FILENAME .restore ?DB? FILE Restore content of DB (default "main") from FILE .schema ?TABLE? Show the CREATE statements If TABLE specified, only show tables matching LIKE pattern TABLE. .separator STRING Change separator used by output mode and .import .show Show the current values for various settings .stats ON|OFF Turn stats on or off .tables ?TABLE? List names of tables If TABLE specified, only list tables matching LIKE pattern TABLE. .timeout MS Try opening locked tables for MS milliseconds .vfsname ?AUX? Print the name of the VFS stack .width NUM1 NUM2 ... Set column widths for "column" mode .timer ON|OFF Turn the CPU timer measurement on or off sqlite>
补充一个刚看到的Android逆向分析的工具:ZjDroid,相关说明:Android动态逆向分析工具ZjDroid–脱壳神器 – Android手机病毒分析及研究。
更多的Android ADB命令学习
获取序列号: adb get-serialno 查看连接计算机的设备: adb devices 重启机器: adb reboot 重启到bootloader,即刷机模式: adb reboot bootloader 重启到recovery,即恢复模式: adb reboot recovery 查看log: adb logcat 终止adb服务进程: adb kill-server 重启adb服务进程: adb start-server 获取机器MAC地址: adb shell cat /sys/class/net/wlan0/address 获取CPU序列号: adb shell cat /proc/cpuinfo 安装APK: adb install <apkfile> //比如:adb install baidu.apk 保留数据和缓存文件,重新安装apk: adb install -r <apkfile> //比如:adb install -r baidu.apk 安装apk到sd卡: adb install -s <apkfile> // 比如:adb install -s baidu.apk 卸载APK: adb uninstall <package> //比如:adb uninstall com.baidu.search 卸载app但保留数据和缓存文件: adb uninstall -k <package> //比如:adb uninstall -k com.baidu.search 启动应用: adb shell am start -n <package_name>/.<activity_class_name> 查看设备cpu和内存占用情况: adb shell top 查看占用内存前6的app: adb shell top -m 6 刷新一次内存信息,然后返回: adb shell top -n 1 查询各进程内存使用情况: adb shell procrank 杀死一个进程: adb shell kill [pid] 查看进程列表: adb shell ps 查看指定进程状态: adb shell ps -x [PID] 查看后台services信息: adb shell service list 查看当前内存占用: adb shell cat /proc/meminfo 查看IO内存分区: adb shell cat /proc/iomem 将system分区重新挂载为可读写分区: adb remount 从本地复制文件到设备: adb push <local> <remote> 从设备复制文件到本地: adb pull <remote> <local> 列出目录下的文件和文件夹,等同于dos中的dir命令: adb shell ls 进入文件夹,等同于dos中的cd 命令: adb shell cd <folder> 重命名文件: adb shell rename path/oldfilename path/newfilename 删除system/avi.apk: adb shell rm /system/avi.apk 删除文件夹及其下面所有文件: adb shell rm -r <folder> 移动文件: adb shell mv path/file newpath/file 设置文件权限: adb shell chmod 777 /system/fonts/DroidSansFallback.ttf 新建文件夹: adb shell mkdir path/foldelname 查看文件内容: adb shell cat <file> 查看wifi密码: adb shell cat /data/misc/wifi/*.conf 清除log缓存: adb logcat -c 查看bug报告: adb bugreport 获取设备名称: adb shell cat /system/build.prop 查看ADB帮助: adb help 跑monkey: adb shell monkey -v -p your.package.name 500
《 “搭建Android开发环境 & adb命令的学习” 》 有 12 条评论
Android cheat sheet
https://labs.portcullis.co.uk/blog/android-cheat-sheet/
ADB 用法大全
https://github.com/mzlogin/awesome-adb
Android Vulnerabilities Overview – 研究员 CHEF-KOCH 整理的 Android 已知漏洞的情况总结
https://github.com/CHEF-KOCH/Android-Vulnerabilities-Overview
Android应用审计checklist整理
https://github.com/guanchao/AndroidChecklist
http://01hackcode.com
Android白盒审计方面的资料/工具
360火线
http://magic.360.cn/zh/document.html
http://magic.360.cn/zh/article_zh.html
`
find-sec-bug
static sanitizer
火线团队与信息安全部门深度合作,特别定制了适用于360公司产品的安卓APP安全检查规则。目前火线扫描规则共覆盖六大类:
1. APP安全检查
2. 代码规范检查
3. 内存泄露检查
4. 日志输出检查
5. 空指针检查
6. 多线程检查
`
Tool to look for several security related Android application vulnerabilities
https://github.com/linkedin/qark
Android so加固
https://mp.weixin.qq.com/s/BhGxnJrRnrYAEWJ7zDZKmQ
https://github.com/liumengdeqq/CustomLinker
Android 应用程序安全开发白皮书
https://dl.packetstormsecurity.net/papers/general/The_Grey_Matter_of_Securing_Android_Applications_v1.0.pdf
Android 逆向分析笔记
https://lichao890427.github.io/wiki/android%20reverse%20engineering/
`
文章目录
概述
分析步骤
通用逆向分析步骤
安卓上APK调试步骤
安卓上linux程序调试步骤
分析工具
APK改之理
JD-GUI
JEB
Dex2jar工具集
Apktool反编译&打包工具
常见文件格式
Apk(使用aapt解析xml)
Dex
Jar
Odex
Aar
So
工具转换图
Android设备上重要目录
Java层
常用工具
adb
aapt
am & pm
有源码调试APK
Android studio
Adb wifi
无源码调试apk
使用AndroidStudio和Apktool工具调试
使用jdb调试
查看参数
设置源码从而进行逐行调试
行断点
初始断点
调试命令
无源码调试dex
Linux层
常用工具
Gdbserver
Strace
有源码so调试
Ndk-gdb
Gdb-Gdbserver
无源码调试So
使用Arm版Gdb在移动端直接调试
IDA调试
Gdb-Gdbserver
Gikdbg
调试so
调试Android上Linux程序
技巧:如何在so入口下断点?
Java层/Linux层联合调试
有源码联合调试
无源码联合调试
操作步骤
最简单的gdb中,断在加载so时刻的方法
Android linux内核层调试
使用Hook
常用Hook/Inject工具简介
实例:360手机卫士卸载后弹窗分析过程
现象
文件注入
分析日志
定位关键代码
结论
GDB调试
反汇编一段地址
表达式计算
查看寄存器
查看栈参数
查看局部变量
查看内存
修改内存
断点
一次断点
条件/线程断点
观察断点
范围断点
硬件断点
拦截当前函数退出
捕获断点
跟踪断点
查看调用栈
流程控制
反向调试
显示当前加载模块
强制加载模块
替换当前调试模块
进程转储
进程空间
由地址获对应的符号
查找符号
执行外部命令
显示线程
打印c++对象虚表
`
Android中如何获取当前的Wifi名称?
https://stackoverflow.com/questions/8811315/how-to-get-current-wifi-connection-info-in-android
https://stackoverflow.com/questions/3531940/how-to-get-name-of-wifi-network-out-of-android-using-android-api
https://developer.android.com/reference/android/net/wifi/WifiInfo
How can I get Android Wifi Scan Results into a list?
https://stackoverflow.com/questions/5452940/how-can-i-get-android-wifi-scan-results-into-a-list
https://developer.android.com/reference/android/net/wifi/ScanResult
[Tools, Android] Automating Pwn2Own with Jandroid:
F-Secure Labs 发布了一个半自动化地在 Android 应用中挖掘逻辑漏洞的工具 – Jandroid
https://labs.f-secure.com/blog/automating-pwn2own-with-jandroid
支付宝 Android App 包名为什么是 com.eg.android.AlipayGphone?
https://www.zhihu.com/question/61095282
WeChat
https://play.google.com/store/apps/details?id=com.tencent.mm&hl=en_US
com.tencent.mm是微信的包名(Android上)
https://zhidao.baidu.com/question/2053626311213702827.html
Read the package name of an Android APK
https://stackoverflow.com/questions/6289149/read-the-package-name-of-an-android-apk
ws-scrcpy – 用浏览器远程控制 Android 手机,实现云手机效果
https://www.appinn.com/ws-scrcpy/
Web client prototype for scrcpy.
https://github.com/NetrisTV/ws-scrcpy
scrcpy – Display and control your Android device
https://github.com/Genymobile/scrcpy
Android云真机解决方案
https://shuibo.me/2020/08/09/android-cloud-phone.html
`
在平台搭建过程中,对比调研了现有一些比较知名的云真机服务平台,如下:
* 360开测
* 阿里MQC
* UC岩鼠
* TestBird
* 腾讯WeTest
* 腾讯优测
* Testin云测
* 百度MTC
这些平台基本上都是基于开源框架 STF 或 scrcpy 搭建的远程安卓真机控制。
`