首页 > 其他分享 >[Kyana]逆向安卓基础

[Kyana]逆向安卓基础

时间:2024-02-15 15:33:44浏览次数:38  
标签:dex 逆向 文件 dalvik 安卓 编译 寄存器 Kyana 虚拟机

APK文件结构

  • assets:不需要编译的资源文件
  • lib.so动态链接库文件,C/C++编译后文件
  • META-INF:所有文件的摘要信息
  • res:编译过的资源文件(图标、布局等)
  • AndroidManifest:安卓设备配置文件
  • classes.dex:Java代码编译后文件
  • resources.arsc:字符串样式等资源

APK打包流程

  1. AADT编译资源文件,生成R文件
  2. 其它资源文件、R文件和JAVA源码一起编译成class文件,并和第三方包编译成dex文件
  3. 其它资源、已编译资源和dex文件打包成apk文件并签名压缩

APK安装流程

  1. 先复制到tmp文件夹,提取出dex文件
  2. 在data\app下创建文件夹存放资源文件

APK包修改

  • 修改包名:使用ApkKiller和apktools反编译apk,搜索工程进行替换(不能有xml转义字符)
  • 修改图标:搜索相应图片路径替换
  • 修改包名实现共存:搜索修改,双版本共存如果提供者不一样要修改相应的provider标签
  • 该配置禁网络实现去广告:修改AndroidManifest.xml,功能可以正常使用但容易报错,仅离线。删除INTERNET ACCESS_NETWORK_STATE ACESS_WIFI_STATE三项在xml中所有标签

虚拟机与汇编

  • Java代码使用hotspot等虚拟机,翻译class文件(jar包是java字节码的集合),基于栈架构
  • dalvik虚拟机翻译dex(优化后odex)文件(dalvik字节码),基于寄存器架构,可执行文件体积更小,AndroidL以下使用,JIT(just-in-time即时翻译)机制。
  • art(android-run-time)虚拟机使用dex优化后的oat文件,AndroidL及以上,AOT(ahead-of-time提前翻译)机制。现阶段也有混合使用的。
  • 使用不同虚拟机的区别:persist.sys.dalvik.vm.lib参数如果是libdvm.so就是dalvik虚拟机,如果是libart.so就是art虚拟机。java代码汇编成smali文件,c代码汇编成so文件。
  • /system/bin/dexopt对dex文件进行优化,/system/bin/dex2oat将dex文件转换为oat文件,系统启动需要/system/app/system/framework/data/app路径

dalvik字节码

  • dalvik虚拟机中的寄存器都是32位。寄存器命名分v和p两种方法,smali.jar使用p命名方法,ddx.jar使用v命名方法。
  • v命名法:对参数寄存器,是v0-vn;局部变量寄存器是vn+1-vn+m。即前面存放参数后面存放局部变量,现在不常用。
  • p命名法:参数寄存器:p0-pn,局部变量寄存器:v0-vn
  • 类型(smali):V-void,Z-boolean,B-byte,S-short,C-char,I-int,J-long,F-float,D-double,L-java_class,[-array。

smali文件结构

  1. 描述类的信息:.class<访问权限>[修饰关键字]<类名>.super<父类名>.source<源文件名>

  2. 静态字段(static fields):.fields<访问权限>static[修饰关键字]<字段名>:<字段类型>

  3. 实例字段(instance fields):同上,没有static

  4. 直接方法(direct methods):.method<访问权限>[修饰关键字]<方法原型>

    <.locals>指定使用的局部变量个数,[.paramet]指定方法的参数,[.prologue]指定代码的开始处,[.line]该处指令在源代码中的行号,<代码体>,.end method,虚方法相同但注释为virtual

  5. 接口和注解:.implement,.annotation[注解属性]<注解类名>[注解字段=值].end annotation

标签:dex,逆向,文件,dalvik,安卓,编译,寄存器,Kyana,虚拟机
From: https://www.cnblogs.com/kyana/p/18016287

相关文章

  • [Kyana]学习隐写
    常用加密:base64、base32、MD5、字符串搜索解压密码音频隐写观察频谱图放大波形,高位为1低位为0,转换ASCIIMP3stegoLSB(最低位有效)摩斯电码图片隐写查看属性检查标志(用hxd等文本编辑器打开),如果不正确修改恢复图像,未完全显示时候修改图像宽高使图像恢复完全;图像结束标志......
  • [Kyanan]配置靶场
    DVWAphp_dest/php.ini;包含路径,删除注释extension=gdallow_url_fopen=Onallow_url_include=OnDVWA/config/config.inc.php$_DVWA['db_user']='dvwa';$_DVWA['db_password']='toor';$_DVWA['recaptcha_public......
  • [Kyana]使用Jupyter
    基础安装配置安装本体和nbextensions安装python3.7+pipinstalljupyterpipinstalljupyter_contrib_nbextensionsjupytercontribnbextensioninstall--user好用的扩展推荐Codeprettify、Hinterland、TableofContents(2)、Scratchpad、CollapsibleHeadings、A2t......
  • [Kyana]配置Emacs
    换源;;myself-madeconfig(tool-bar-mode-1)(scroll-bar-mode-1)(setqinhibit-startup-screent);;sourcechangeandconfirm(setqpackage-enable-at-startupnil)(require'package)(setqpackage-archives'(("gnu"."http://mirro......
  • [Kyana]开发OpenHarmony应用
    Javaver.HelloWorldconfig.jsonapp{bundleName:包名 vendor:开发厂商名(小贩) version:code(内部版本号),name(用户版本号)}deviceConfig{应用在设备上的配置}module{package:包名name:当前hap包名字mainAbility:hap包的入口abilitydeviceType:当前应用......
  • Cocos Creator 2.X(Cocos2d-js)游戏资源目录分析&逆向还原
    拿到了某变态服游戏,打开lib看到了libcocos2djs.so,判断版本为2.4。游戏把资源文件下载到了/data下,因此需要root。目录结构如下:g4-start/├──config.json├──import│ ├──1e│ │ └──1ea6e4bcd.json│ └──e7│   └──e76cb2d2-fa48-4916-......
  • 安卓开发目录详细
    目录结构 buildgradle详细信息  androidManifest.xml内容  布局文件的创建 页面跳转 ......
  • 安卓逆向环境指北 rk3588 orangepi5b macM1 cuttlefish redroid
    省流安卓现在有若干种方案买个pixel6真机随便刷rom多,文档直接看google官方的即可缺点贵刷砖了难救windows的安卓模拟器傻瓜式部署但是安卓版本低特征多跑不了arm的soAVDwindowsormacorlinux有多个安卓版本但是基本没办法自定义内核想自定义内核再替换......
  • [Kyana]Linux使用小技巧
    01|使用逻辑卷使存储空间可扩展前排提示小白在使用Linux虚拟机时,常在开始分配较小的硬盘空间,在后续使用中常出现硬盘空间不足的问题,轻则无法安装软件,重则无法更新。本文推荐使用逻辑卷方式安装操作系统,便于后续磁盘扩充。在逻辑卷上创建文件系统流程:层次(命令):|物理磁盘|(-fdis......
  • [Kyana]Fedora使用记录
    删除旧内核:dnfremove--oldinstallonly重置密码密钥环不匹配:安装seahorse新建并默认,可以单独设置密码,记好优化和扩展:dnfinstallgnome-tweaksgnome-extensions-app推荐扩展:user-themeseye-and-mouse-extendedjust-perfectionnothing-to-saytransparent-window-moving......