当前位置: 首页 > news >正文

安卓手游逆向

一、环境安装

1.1、安装Java环境 

1.2、安装SDK环境 

1.3、安装NDK环境 

二、APK

2.1、文件结构

  

2.2、打包流程 

2.3、安装流程

应用安装涉及目录:

system/app ----->系统自带的应用程序,获得adb root权限才能删除。

data/app ------->用户程序安装的目录,安装时把apk文件复制到此目录。

 

data/data -------> 存放应用程序的数据

 

data/dalvik-cache ------>将apk中dex文件安装到dalvik-cache目录下(dex文件是dalvik虚拟机的可执行文件,其大小约为原始apk文件大小的四分之一) 。

安装过程:

复制apk安装包到data/app目录下,解压并扫描安装包,把dex文件保存到dalvik-cache目录,并data/data目录下创建对应的应用数据目录。

三、虚拟机

1、Java虚拟机--->Java字节码 ---->基于栈架构。

2、dalvik虚拟机(jit机制)---->android5.0以下---->dalvik字节码---->基于寄存器架构。

3、art虚拟机(aot机制)---->android5.0以上

注意:

.dex ---->dexopt--->.odex dalvik加载执行的odex文件。

.dex --->dex2oat --->.oat art加载执行的是oat文件。

四、Java逆向知识

4.1、dex文件反汇编工具

.java ---> .class ---->.dex ---->smail。

在这个过程中会使用三种工具

使用dx.jar工具将.class文件打包成.dex文件 

使用baksmail.jar工具将.dex文件反编译成.smail文件

使用smail.jar工具将.smail文件打包成.dex文件。

4.2、dalvik字节码

数据类型对应

dalvik            Java

V ------------->void

Z ------------->boolean           

B ------------->byte          

C ------------->char           

S ------------->short        

I ------------->int

J ------------->long

F------------->float

D------------->double

L------------->java类类型

[------------->数组类型

字段

Lorg/cocos2dx/lua/AppActivity;->handler:Landroid/os/Handler;

   包名                      类名               变量名              类型

方法:                

Lpackage/name/ObjectName;->MethodName(III)Z

Lpackage/name/ObjectName:表示的是当前这个方法所在的类。

L是Java类类型,package/name/是包名,ObjectName是类名MethodName这部分表示的方法名

(III)Z:表示的是方法的签名信息,由方法参数列表(III)和返回值(Z)构成。

(III)表示三个int型参数;Z表示返回值类型为boolean。

4.3、dalvik指令集

基础字节码:名称后缀/字节码后缀 目的寄存器 源寄存“-”这个符号在有的指令里面没有的名称后缀是wide,表示数据宽度为64位,字节码后缀是from16,表示源寄存器为16位。

如move-wide/from16 vAA,VBBBB

move为基础字节码,即opcode、wide为名称后缀,标识指令操作的数据宽度为64位、from16为字节码后缀,标识源为一个16位的寄存器引用变量、vAA为目的寄存器,它始终在源的前面,取值范围为v0~v255 vBBBB为源寄存器,取值范围为v0~v65535。

dalvik指令集中大多数指令用到了寄存器作为目的的操作数或源操作数,其中A/B/C/D/E/F/G/H代表一个4位数值,AA/BB/CC...../GG代表一个8位的数值,A


http://www.mrgr.cn/news/98615.html

相关文章:

  • mysql表类型查询
  • 通过建模和仿真进行高速连接器设计
  • Python爬虫第15节-2025今日头条街拍美图抓取实战
  • GIS开发笔记(7)结合osg及osgEarth实现不同高度下的三个圆形区域形成的三维覆盖轮廓区域绘制
  • **Microsoft Certified Professional(MCP)** 认证考试
  • argparse
  • 子函数嵌套的意义——以“颜色排序”为例(Python)
  • Python抽象基类
  • Function Calling是什么?
  • CS5346 - CHARTS: Chart with Point / Bar / Line / Box
  • 神经光子渲染:物理级真实感图像生成——从麦克斯韦方程到深度学习
  • Windows安装Ollama并指定安装路径(默认C盘)
  • Godot学习-创建简单动画
  • RK3568 更换显示logo
  • 人形机器人动作策略 ∼ 人类动作策略
  • 确保连接器后壳高性能互连的完整性
  • 从零到一:网站设计新手如何快速上手?
  • 关于系统架构思考,如何设计实现系统的高可用?
  • Spring Boot一次接口请求涉及的完整执行链路
  • 【Pandas】pandas DataFrame tail