【2020年】Android开发学习思考及规划
为什么要学Android开发
缘起:从xxx话查看器说起
在2016年,一款名为《悄悄话查看器》的App 出名了,感兴趣的可以移步:
如何看待QQ悄悄话查看器引起的风波? - 知乎
被舍友耍了之后,我很好奇它怎么办到的,当时是我是个只会编写 Java基础的程序小菜鸡。
大神爆出apk的源码,可以移步:
「QQ悄悄话查看器」(病毒应用)是如何工作的? - 知乎
我很惊讶:别人写好的Android程序,竟然可以 反编译出来!!!
照着网上的一些教程,下载了 Android Killer 等逆向工具,看到了 易语言 写的代码。
凭借着 微弱的Java语言基础,大致看懂了 悄悄话的
Android逆向初探
用工具打开apk,过一会就可以看到完整的项目工程结构,就是这么简单吗?
如果事情就这么简单,开发Android App的程序员干嘛不直接开源!!
带着兴趣,我尝试了几款 热门的App,如QQ, Alipay,当我看到了“反编译失败”,意识到,这样的工具并不是万能的~~
这一阶段我对安全没什么概念,也没有继续深入下去。
Android逆向入门
由于学习需要,需要对某App的 一部分 通信协议进行分析,具体过程略,这一过程接触到了基本的工具:apktools, jd-gui, apk-ide,最初的 Android-Killder 由于好久没更新,没有这些工具好用。
通过掉某App的逆向经历,我建立起如下概念(很浅显的认知,欢迎大神来纠正):
- 为什么Java可以写Android程序?
- 首先Java程序运行需要JVM,但 JVM 体量庞大,Android 为此定制了 一套 Java 虚拟机
- Android 4.4.4及之前是 Dalvik
- 从 5.0开始 为 ART机制
- 有了 类似JVM的虚拟机,当然可以运行 Java代码
- 其次,Android 系统封装了 很多API,可以供 开发者选择,类似于用 Windows API 开发win32程序
- 最后,通过官方构建工具,将代码编译、打包成 apk,安装后即可运行
- 首先Java程序运行需要JVM,但 JVM 体量庞大,Android 为此定制了 一套 Java 虚拟机
- 逆向的原理是什么?
- 机器运行需要机器码,转化为人类较容易理解的语言就是 汇编语言
- 在 Java 程序中体现为,Java编译成字节码文件,交给JVM运行,而 dex 是专门为 Android 设计的一种字节码格式
- apk本质上就是个压缩文件,可用解压缩工具打开,可以看到1个或更多的 dex 文件
- 逆向就是根据dex文件还原出 Java代码
- 一般流程:dex文件通过 apktools 转化为 smali 文件,用 jd-gui 可以查看对应的 Java代码
即使没有Android开发经验,看一些关键代码还是没问题的。
Android逆向遇到的问题
最大的问题 没有正向开发经验,如 shared_prefs 的使用,sqlite 数据库、okhttp,rxjava、各种设计模式,反射(reflect)等。
代码整体给我的感觉是:结构很清晰完整,但由于不懂相关代码开发原理,即使拿到了代码,也不清楚从哪里下手,在混乱中摸索会抓不住重点。
另外在 分析过程中,查阅的很多资料,大多源自 Android开发技术贴。
这种状态下,急需正向开发经验……
学到什么程度
看代码能看懂
- 掌握基本的开发逻辑
- 界面方面能看就行
- 重点关注 IO、数据传递 等功能相关的 API 如何调用
- 了解最基本的开发模式
可以开发一些小工具
- base64,各类对称加密 等小工具,在 Android平台 可对数据进行 初步处理
- 进阶:自己开发 抓包工具,并进行 解析
- xposed 开发
如何学习
书籍:第一行代码
在本科阶段,就听说了这本神书
今年四月份,郭霖大神 这本书的 第三版 正式发布。
这本《第三行代码》,让大家久等了!
但这本书用 Kotlin 语言进行重写,Kotlin也是基于JVM的语言,兼容Java,Google在大会上将它视为官方语言。
经过实际测试,用Kotlin开发的 helloworld 反编译后也是 Java代码,暂且理解为:Kotlin 简化了 Java开发吧。但最后可以转为 Java 逻辑。
那么问题来了:有没有可以显示 Kotlin 代码的 apk逆向工具?目前我没找到,或许以后有。
我的目的是为了更好的从事 Android逆向,因此打算 从 第二版 读起,边学习边逆向,体会实际代码 跟 逆向代码的区别
第二版是基于 Android 7.0 设备,不算很老,等掌握后,再来学习 Android 8,9,10的新特性
有了一些逆向经验,学起来也不费劲吧……
视频
暂不考虑,
行动
计划永远是计划,行动起来才是主要的!!!
模式:一边学,同时在 csdn 做笔记
【2020年】Android开发学习思考及规划相关推荐
- Android开发学习之基于ViewPager实现Gallery画廊效果
通过我们前面的学习,我们知道ViewPager是可以做出近乎完美的滑动体验,回顾整个Android,我们发现Gallery具备同样的特点,于是我们大胆地猜想,Gallery是否和ViewPager之间 ...
- Android开发学习之以CameraAPI方式实现相机功能(一)——快速实现相机
今天无意当中发现在<Android开发学习之基于ZBar实现微信扫一扫>中的一部分代码可以用来以硬件方式实现一个照相机的功能,在<Android开发学习之调用系统相机完成拍照的实现& ...
- android培训内容明细,记录Android开发学习
记录Android开发学习 Menu菜单学习 1.掌握Android中菜单的创建. 2.掌握Intent信使组件. 创建菜单Menu 我们模仿微信菜单栏学习,创建一个于微信菜单栏相似的菜单 那么我们应 ...
- android开发学习之路——连连看之游戏逻辑(五)
GameService组件则是整个游戏逻辑实现的核心,而且GameService是一个可以复用的业务逻辑类. (一)定义GameService组件接口 根据前面程序对GameService组件的依赖, ...
- Android开发学习---使用Intelij idea 13.1 进行android 开发
Android开发学习---使用Intelij idea 13.1 进行android 开发 原文:Android开发学习---使用Intelij idea 13.1 进行android 开发 1.为 ...
- 《Java和Android开发学习指南(第2版)》—— 1.5 本章小结
本节书摘来异步社区<Java和Android开发学习指南(第2版)>一书中的第1章,第1.5节,作者:[加]Budi Kurniawan,更多章节内容可以访问云栖社区"异步社区& ...
- 《Java和Android开发学习指南(第2版)》——第2章,第2.10节本章小结
本节书摘来自异步社区<Java和Android开发学习指南(第2版)>一书中的第2章,第2.10节本章小结,作者 [加]Budi Kurniawan,更多章节内容可以访问云栖社区" ...
- Android开发学习总结(四)——Eclipse在线安装ADT插件
Android开发学习总结(四)--Eclipse在线安装ADT插件 要想使用Eclipse开发Android应用,首先要安装一个ADT插件,在此记录一下在Eclipse中采用在线安装的方式ADT插件 ...
- android开发用百度识别图片格式,Android开发学习之路-机器学习库(图像识别)、百度翻译...
对于机器学习也不是了解的很深入,今天无意中在GitHub看到一个star的比较多的库,就用着试一试,效果也还行.比是可能比不上TensorFlow的,但是在Android上用起来比较简单,毕竟Tens ...
- Android 开发学习记录(4)---- httpclient使用(三)
之前在Android 开发学习记录(3)---- httpclient使用(二)中介绍了如何使用httpclient访问需要账户登录的网址,当然首先是要有一个合法的登录账户. 但是现在好多网站在登录时 ...
最新文章
- ABAP git客户端
- MySQL主从服务器配置工作原理
- 5.22青海云南同震
- mysql之分页查询
- 函数自执行-一元运算符
- C++数据范围及字节对照表
- myeclipse与mysql连接_myeclipse 与 mysql 的连接
- 分数化简通分:最大公约数与最小公倍数
- 基于javaweb+jsp的学生档案管理系统(JavaWeb JSP MySQL Servlet SSM SpringBoot Bootstrap)
- P3717	[AHOI2017初中组]cover
- css3+html仿小米官网商城项目。
- 计算机丢失dll文件怎么弄,电脑缺少DLL文件该怎么办? 这个办法轻松解决!
- 投稿经验分享之五:申请专利
- 动态规划:8行代码搞定最大子数组和问题
- 手把手教你 Tableau 绘制堆积柱状图(二)
- 做玫瑰花的方法 用纸_史上最简单的纸玫瑰花的折法教程教你用纸编法做玫瑰花...
- 英科医疗冲刺港交所上市失败:6个月市值腰斩,刘方毅拟大幅减持
- pr 是什么——可以做什么
- 四川省信创联盟2023年第一次理事会顺利召开,MIAOYUN荣获“信创企业优秀奖”!
- 激动的10秒钟==艰辛的1095天
热门文章
- 免费好用的内网穿透 端口映射工具 实现一键远程 外网访问内网
- 智能客服搭建(4) - 语音流的分贝计算
- WPF剪切板问题-OpenClipboard HRESULT:0x800401D0 (CLIPBRD_E_CANT_OPEN))
- 基于CameraLink的串行口通讯
- 抛开理论公式,用符合直觉的方式理解四旋翼无人机控制
- 时间管理PPT课件该怎么做?
- [06]项目实战-移动端流体布局
- 成都11区+4县+5市高分辨率边界kml
- 怎样用计算机粉碎文件夹,电脑粉碎文件用什么软件好,怎么彻底粉碎电脑文件...
- Sonix SN9P701 OCR点读笔二维码识别源码