dalvik

DexHunter在ART虚拟机模式下的脱壳原理分析

五迷三道 提交于 2020-08-17 16:14:55
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/78494620 DexHunter脱壳工具在Dalvik虚拟机模式下的脱壳原理分析,在前面的博客中已经提到了,但是自我感觉分析和理解的还不够透彻,后面又对DexHunter脱壳工具的源码再阅读了几遍,总算是把DexHunter脱壳工具在Dalvik虚拟机模式下和ART虚拟机模式下的脱壳原理理解清楚了。关于DexHunter脱壳工具在Dalvik虚拟机模式下的脱壳原理分析,已经准备了一篇博客想详细和深入的讲一讲,一直搁置了没有完成;本来还计划把DexHunter脱壳工具在ART虚拟机模式下的脱壳原理也详细说一说,看来是不可能了。有关Android加固脱壳和Hook的好几个源码工程都看的差不多了,因为各种事情和状态不好,懒得动笔了。 在理解DexHunter脱壳工具在ART虚拟机模式下的脱壳原理之前,建议先阅读一下老罗的博客了解一下Android的ART虚拟机模式下的类加载和dex文件的优化过程,《 Android运行时ART加载OAT文件的过程分析 》这篇博客需要好好读一读。DexHunter在ART虚拟机模式下的脱壳编译配置主要是针对源码文件 /art/runtime/class_linker.cc 进行修改,以Android 4.4.4 r1的源码文件为示例

ART模式下基于Xposed Hook开发脱壳工具

 ̄綄美尐妖づ 提交于 2020-08-14 02:06:19
本文博客地址: http://blog.csdn.net/qq1084283172/article/details/78092365 Dalvik模式下的Android加固技术已经很成熟了,Dalvik虚拟机模式下的Android加固技术也在不断的发展和加强,鉴于Art虚拟机比Dalvik虚拟机的设计更复杂,Art虚拟机模式下兼容性更严格,一些Dalvik虚拟机模式下的Android加固技术并不能马上移植到Art模式下以及鉴于Art虚拟机模式下的设计复杂和兼容性考虑,暂时相对来说,Art模式下的Android加固并没有Dalvik虚拟机模式下的粒度细和强。 本文给出的 Art模式下基于Xposed Hook开发脱壳工具的思路和流程不是我原创,主要是源自于看雪论坛的文章《 一个基于xposed和inline hook的一代壳脱壳工具 》,思路和流程有原作者smartdon提供,文中提到的Art模式下的dexdump脱壳工具源码github下载地址: https://github.com/smartdone/dexdump 。原作者提供的脱壳操作步骤稍微复杂了一些,在此基础上我对原作者的代码进行了修改,使脱壳更加方便,原作者的代码是Android Studio的工程,顺手将其转化为了Eclipse下的工程。作者smartdon的Art模式下脱壳思路如下图所示:

安卓到底是不是Linux

随声附和 提交于 2020-08-12 00:01:53
安卓到底是不是Linux 有人说安卓就是 Linux,也有人说安卓是安卓、Linux 是 Linux,两者没什么关系,还有人说安卓用的是 Linux 的内核,那么它们之间到底是什么关系呢。要想得到这个问题的答案,我们要先弄清楚几个概念。 Linux 与 Linux 内核 Linux 与 Linux 内核其实是不一样的,关于这个问题,我在之前的一篇文章中讲过(《Linux,Unix,GNU 到底有什么样的渊源?》)。Linux 的内核是由 Linus Torvalds 在1991年首次编写。它是操作系统的核心,包括设备驱动、文件系统、进程管理、网络通信等。但是操作系统光有内核,用户是没有办法操作的,所以很多厂商和 Linux 社区就在内核之上开发了很多工具,比如我们常用的 GNome桌面,FireFox浏览器、GIMP 图片编辑器等等。Linux 内核和这些应用一起打包后就被称作 Linux 发行版本。Linux 有很多的发行版本,我在之前的文章中(《这么多Linux版本,你究竟该怎么选择?》),对不同的版本做过比较。 所以我们常说的 Linux 有两个含义: 1) Linux 内核,这个严格来说应该叫 GNU/Linux,因为它是 GNU 计划的一部分 2) Linux 发行版本,比如 Debian、Ubuntu、Mint、RedHat等等 那么安卓和 Linux 内核或者

虚拟机运行 Android 程序背后的故事

不羁岁月 提交于 2020-08-08 05:32:27
众所周知,Android 最开始面世时,使用的开发语言是 Java,而 Java 是运行在 Java 虚拟机上的,即 JVM。那么为什么 Google 要单独设计一套新的 Dalvik 虚拟机来执行 Android 程序呢?可能是为了解决移动端设备上软件运行效率问题,可能是 JVM 虚拟机无法满足当时移动端的使用场景,也可能是为了规避与 Oracle 公司的版权纠纷问题,最终 Google 专门为 Android 平台设计了一套虚拟机来运行 Android 程序,它就是 Dalvik Virtual Machine(Dalvik 虚拟机)。 随着 Android 发展至今,虽然目前开发 Android 程序的语言已经越来越多样性,如 Java,Kotlin,Dart,Flutter 等等,但无论使用哪种语言开发 Android,最终都需要运行在虚拟机上,本篇文章将站在 Android 虚拟机的视角来分析 Android 程序的运行原理。 1、Dalvik 虚拟机概述及特点 Google 于 2007 年底正式发布了 Android SDK, Dalvik 虚拟机也正式进入我们的视野,而 Dalvik 命名的由来是取至其作者**丹·伯恩斯坦(Dan Bornstein)**曾居住过一个名叫 Dalvik 的小渔村。Dalvik 虚拟机作为 Android 平台的核心组件

2020年最新 Android 面试点梳理,新手必看避免踩雷,轻松拿offer!

限于喜欢 提交于 2020-07-29 10:35:54
现在想想,移动互联网的发展不知不觉已经十多年了,Mobile First 也已经变成了 AI First。换句话说,我们已经不再是“风口上的猪”。移动开发的光环和溢价开始慢慢消失,并且正在向 AI、区块链等新的领域转移。移动开发的新鲜血液也已经变少,最明显的是国内应届生都纷纷涌向了 AI 方向。 ​ 可以说,国内移动互联网的红利期已经过去了,现在是增量下降、存量厮杀,从争夺用户到争夺时长。比较明显的是手机厂商纷纷互联网化,与传统互联网企业直接竞争。另外一方面,过去渠道的打法失灵,小程序、快应用等新兴渠道崛起,无论是手机厂商,还是各大 App 都把出海摆到了战略的位置。 其实如果你技术深度足够,大必不用为就业而忧愁。每个行业何尝不是这样,最开始的风口,到慢慢的成熟。Android初级在2019年的日子里风光不再, 靠会四大组件就能够获取到满意薪资的时代一去不复返。 经过一波一波的淘汰与洗牌,剩下的都是技术的金子。就像大浪褪去,裸泳的会慢慢上岸。 而真正坚持下来的一定会取得不错成绩。毕竟Android市场是如此之大。从Android高级的蓬勃的就业岗位需求来看,能坚信我们每一位Android开发者的梦想 。 接下来我们针对Android高级展开的完整面试题。 Android 基础 Activity 生命周期 A 打开 B 界面,会先执行 A 的 onPause,再执行 B 的

Java系列:JVM中的OopMap(zz)

萝らか妹 提交于 2020-07-28 18:45:41
调用栈里的引用类型数据是GC的根集合(root set)的重要组成部分;找出栈上的引用是GC的根枚举(root enumeration)中不可或缺的一环。 JVM选择用什么方式会影响到GC的实现: 如果JVM选择不记录任何这种类型的数据,那么它就无法区分内存里某个位置上的数据到底应该解读为引用类型还是整型还是别的什么。这种条件下,实现出来的GC就会是“保守式GC(conservative GC)” 。在进行GC的时候,JVM开始从一些已知位置(例如说JVM栈)开始扫描内存,扫描的时候每看到一个数字就看看它“像不像是一个指向GC堆中的指针”。这里会涉及上下边界检查(GC堆的上下界是已知的)、对齐检查(通常分配空间的时候会有对齐要求,假如说是4字节对齐,那么不能被4整除的数字就肯定不是指针),之类的。然后递归的这么扫描出去。 保守式GC的好处是相对来说实现简单些,而且可以方便的用在对GC没有特别支持的编程语言里提供自动内存管理功能。Boehm-Demers-Weiser GC是保守式GC中的典型代表,可以嵌入到C或C++等语言写的程序中。 小历史故事: 微软的JScript和早期版VBScript也是用保守式GC的;微软的JVM也是。VBScript后来改回用引用计数了。而微软JVM的后代,也就是.NET里的CLR,则改用了完全准确式GC。 为了赶上在一个会议上发布消息

Android中的多进程、多线程

社会主义新天地 提交于 2020-07-28 08:51:56
前面几篇总结了进程、线程相关的知识。这里总结下关于Android中的多进程、多线程及其使用。 这里总结的Android中的多进程、多线程也是一个基础,可扩展的很多。 Android中多进程 常见的几种使用 Runtime.getRuntime().exec("xxx") 这个方法,调用程序外的 脚本或命令程序,它会生成一个新的进程去调用 返回一个Process对象。 如:windows下,调用记事本。 Runtime.getRuntime().exec( " notepad.exe " ); linux下(Android)下,调用系统本身的ps命令后,通过返回的Process对象的输入流 读取了调用内容。 try { String[] commandStr = new String[] {"/bin/sh","-c", "ps -ef" }; // String commandStr = "/bin/sh -c ps"; Process process1 = Runtime.getRuntime().exec( commandStr ); Log.d( TAG, "onCreate: process1=" + process1 ); byte [] data = new byte [1024 ]; int len = 0 ; while ( -1 != (len =

Can I safely block Dalvik browser agent requests?

混江龙づ霸主 提交于 2020-06-09 17:54:07
问题 I've noticed that when users on Android-OS devices visit my site, there's constantly two requests happening on each page. The first is the normal browser, and the second is from "Dalvik". Example: "GET / HTTP/1.1" 200 2126 "-" "Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F/G925FXXU1AOD8 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 Chrome/38.0.2125.102 Mobile Safari/537.36" 1229 2802 "GET / HTTP/1.1" 200 2117 "-" "Dalvik/2.1.0 (Linux; U; Android 5.0.2; SM-G925F

Can I safely block Dalvik browser agent requests?

[亡魂溺海] 提交于 2020-06-09 17:51:50
问题 I've noticed that when users on Android-OS devices visit my site, there's constantly two requests happening on each page. The first is the normal browser, and the second is from "Dalvik". Example: "GET / HTTP/1.1" 200 2126 "-" "Mozilla/5.0 (Linux; Android 5.0.2; SAMSUNG SM-G925F/G925FXXU1AOD8 Build/LRX22G) AppleWebKit/537.36 (KHTML, like Gecko) SamsungBrowser/3.0 Chrome/38.0.2125.102 Mobile Safari/537.36" 1229 2802 "GET / HTTP/1.1" 200 2117 "-" "Dalvik/2.1.0 (Linux; U; Android 5.0.2; SM-G925F