参考教程:【吾爱破解安卓逆向入门教程《安卓逆向这档事》一、模拟器环境搭建】https://www.bilibili.com/video/BV1wT411N7sV?vd_source=bbdaef564df94fc8991902ba22c6761b

环境搭建

  • 先搭建一个初步环境,还有挺多工具的,边学边安装

下载手机模拟器

image-20240715145952008

下载magic

image-20240715152710977

配置环境

  • 先进入软件设置

image-20240715152852354

  • 开启root权限,保存设置后重启模拟器

image-20240715152937241

  • 然后将magic移动到模拟器里面,注意安卓9的要使用debug版本

image-20240715153113037

image-20240715153208646

  • 然后让点击magisk,让其获取root权限

image-20240715153304798

  • 然后安装该应用

image-20240715153337797

  • 会弹出如下提示,运行即可

image-20240715153357087

  • 然后就直接退回关闭程序,重新启动程序

image-20240715153458480

  • 鼠标往左滑,关闭该程序,之后会返回到桌面,然后点击重新启动程序

image-20240715153513811

  • 这个时候再点击安装,然后下一步

image-20240715153625642

  • 方式选择安装至系统分区,然后点击开始

image-20240715153721313

  • 这里出现安装失败

image-20240715153911956

  • 进过排查是设置原因,修改完重新启动,之后

image-20240715154050220

  • 安装完成,然后重启模拟器

image-20240715154221528

  • 然后再点击面具,这时会出现这个,无需在意,点击确定即可

image-20240715154346350

  • 然后点击设置

image-20240715154457520

  • 将如下设置打开

image-20240715154541623

LSPosed模块

image-20240715155323475

  • 打开共享文件

image-20240715154719280

image-20240715155342686

  • 选中LSPosed,将LSPosed拖入共享文件夹里面(上方点击打开电脑文件夹的所出现的位置)

image-20240715155417490

image-20240715155637632

  • 然后点击模块,从本地安装

image-20240715155728119

  • 打开并找到共享文件夹

image-20240715155809685

image-20240715155822846

image-20240715155837133

  • 找到LSPosed模块点击即可

image-20240715155911362

  • 出现如下情况表面安装成功,安装成功后重启模拟器

image-20240715155932656

  • 重启后,打开面具,再点击模块,如果出现如下图所示,就表面已经安装上了

image-20240715160234030

APK文件结构

  • apk全称Android Package,它相当于一个压缩文件,只要在电脑上将apk后缀改为rar或zip即可解压
  • 下面是压缩文件解压后的一些文件
文件 注释
AndroidMainfest.xml文件 APK的应用清单信息,它描述了应用的名字,版本,权限,引用的脸蛋由他的layout文件设计
assets目录 存放APK的静态资源文件,比如视频,音频,图片等
classes.dex文件 classes.dex是java源码编译后生成的java字节码文件,APK运行的主要逻辑
lib目录 armeabi-v7a基本通用所有android设备,arm64-v8a只适用于64位的android设备,x86常见用于android模拟器,其目录下的.so文件是c或c++编译的动态链接库文件
META-INF目录 保存应用的签名信息,签名信息可以验证APK文件的完整性,相当于APK的身份证(验证文件是否有被修改)
resources.arsc文件 resources.arsc是编译后的二进制资源文件,它是一个映射表,映射着资源和id,通过R文件中的id就可以找到对应的资源
res目录 res目录存放资源文件,包括图片,字符串等等,APK的脸蛋由他的layout文件设计
  • 附加文件
文件 注释
kotlin 看到这个文件目录,就要知道这个应用可能是完全由kotlin开发的或者部分由kotlin开发
okhttp3 包名称,在应用开发时,通常导入包来进行开发

image-20240716170151970

image-20240716170204647

image-20240716170211782

APK双开及原理

APK双开方式

  • 在以下4个方式中,第一种方式比较适合入门学习,而后三种不太适合入门。之后学深入后再来尝试后三种方式
原理 解释
修改包名 让手机系统认为这是2个APP,这样的话就能生成2个数据存储路径,此时的多开就等于你打开了两个互不干扰的APP
修改Framework 对于有系统修改权限的厂商,可以修改Framework来实现双开的目的,例如:小米自带多开
通过虚拟化技术实现 虚拟Framework层、虚拟文件系统、模拟Android对组件的管理、虚拟应用进程管理等一整套虚拟技术,将APK复制一份到虚拟空间中运行,例如:平行空间
以插件机制运行 利用反射替换,动态代理,hook了系统的大部分与system-server进程通讯的函数,以此作为“欺上瞒下”的目的,欺骗系统“以为”只有一个apk在运行,瞒过插件让其‘’认为“自己已经安装。例如:VirtualApp

修改包名双开

  • 该双开的原理是通过修改包名来实现双开的,这就改动了应用的签名信息,如果开发者做了一个签名校验,就可能出现安装程序闪退、崩溃的情况

使用MP管理器

  • 将这三个安装包安装到模拟器中,直接选择下图三个文件拖入模拟器中

image-20240716172902272

image-20240716173018447

  • 然后调整模拟器平面大小,使其按手机屏幕的比例打开
image-20240716173215411
  • 打开MT管理器,提取安装包,第一次运行该程序会弹出给程序权限的提示,都是允许即可。然后提取程序安装包
image-20240716175336927 image-20240716175639892 image-20240716175715058

image-20240716175728326

  • 然后定位后点击所提取的安装包,查看信息,这边会出现一个包名com.zj.wuaipojie,第一个双开的原理就是利用修改包名,然后进行双开

image-20240716175810362

image-20240716175901906

  • 点击安装包信息左下角的功能
image-20240716180027494
  • 然后选中APK共存,点击进去后会自动生成一个新的包名,勾选上自动签名,然后点击确定,但是会出现请先登录的操作,这就说明该功能MP管理器需要会员才能使用。那就使用NP管理器来修改包名
image-20240716180127496 image-20240716180320124 image-20240716180405881

使用NP管理器

  • 打开NP管理器,然后给权限给应用,如果强制要求你更新,先把网络关了,就检测不到需要更新了,可以免费直接使用安装包提取了
image-20240716181812750
  • 提取安装包

image-20240716181105774

  • 选中示例程序,提取安装包
image-20240716181201955

image-20240716181852127

image-20240716181215588
  • 提取后定位
image-20240716181240206

image-20240716181252174

  • 点击定位到的安装包,然后点击功能
image-20240716181313324
  • 然后点击apk共存,确认即可,然后就会生成一个共存的包,点击共存的包,然后安装即可实现双开
image-20240716181457717 image-20240716182022550
  • 这时桌面上就有两个示例应用了

image-20240716182119780

APK汉化

  • 汉化需要使用的工具

    • MT管理器
    • 开发者助手
  • 汉化:使用专门的工具对外文版的软件资源进行读取、翻译、修改、回写等一些列处理,使软件的菜单、对话框、提示等界面显示为中文,而程序的内核和功能保持不变,这个过程即为软件汉化

  • 汉化通常分为软件汉化和游戏汉化,初学者先学软件汉化。

  • 通过逆向流程图可以看到,汉化需要进行:Arsc汉化、Xml汉化、Dex汉化

image-20240716183119884

汉化英文–xml

  • 点击进入示例程序

image-20240716183453268

  • 然后示例程序挑战中有几个关卡,将其通关
image-20240716183543316
  • 现在是第一关
image-20240716183617471
  • 点击进入MT管理器,在下图目录下找到之前提取的apk安装包,并点击

image-20240716183830768

  • 然后点击查看功能,就会看到apk压缩包里面的东西,即APK文件结构里面介绍的东西
image-20240716183902353
  • 使用MT自带的搜索功能,位于右上角,然后点击搜索
image-20240716184049074 image-20240716184144615
  • 然后选中高级搜索,并且在高级搜索中输入hello进行搜索
image-20240716184229269
  • 出现搜索结果,然后点击该文件会直接跳转到该文件所在位置
image-20240716184317428
  • 跳转后点击该文件,选中反编译,使用该功能会提示要先登录,那就登录,要把之前断开的网络再次开启
image-20240716184416004
  • 反编译后得到下图,然后找到第30行得到字符串Hello 52pojie,这时修改字符串,将其改成中文的,然后右上角保存
image-20240716184751481 image-20240716184915441
  • 然后会弹出下图提示,点击确定即可,这里进行了一次签名,这就导致安装时的签名和修改后的应用签名不一样
image-20240716185015071
  • 然后返回,点击应用,并安装

image-20240716185149302

  • 出现如下情况,在设置中将该提示关闭
image-20240716185203279 image-20240716185324590
  • 然后再安装应用,可能会出现安装失败,签名不一致的问题,后面有个核心破解的模块可以解决签名不一致问题
image-20240716185527230
  • 这里有一个简单粗暴的方法,就是将已安装的应用卸载后,再进行安装,安装后进入应用就得到了汉化的你好 吾爱破解
image-20240716185742509

汉化非英文–arsc

  • 在挑战中会出现非英文和非中文的情况,这就需要使用另一个工具 开发者助手。安装就直接拖入安装,然后给权限

image-20240716190110629

  • 下载安装后点击进入程序,然后点该位置,给权限
image-20240716190420862
  • 回到示例程序,打开挑战第一关,点击屏幕出现的图标,然后点击页面资源分析,然后点击开始,点击查看
image-20240716190610202 image-20240716190646989
  • 点击紫色框里面的绿色框
image-20240716190822360
  • 弹出如下信息,然后复制出现的俄文,然后再回到MT管理器,同样进行高级搜索,找到该文件
image-20240716190922857
  • 点击打开文件,会出现如下弹窗,选择翻译模式
image-20240716191116301
  • 点击第一个[DEFAULT]
image-20240716191155592
  • 找到字符串的位置,点击该字符串进行修改,将其修改为123
image-20240716191236267 image-20240716191316846
  • 也可以使用下方的一键翻译功能,选择一下翻译引擎,再点击确定,就可以一键翻译了。不过这个功能好像要vip。机翻后翻译的句子可能会比较生硬。汉化插件安装在后面有写
image-20240716191422458 image-20240716191434761
  • 将俄语修改好后,保存返回。然后再安装程序。这一次是直接安装,无需卸载后再进行安装。这次覆盖安装会成功,原因是第一次覆盖安装的签名和第二次覆盖安装的签名使用的文件都相同,都是mt自带的一个签名信息

  • 效果如图

image-20240716195305229

汉化英文–dex

  • 接下来再汉化最后一句英文,该英文在dex文件中
image-20240716195332663
  • 继续打开MT管理器,在下图红框的位置中,点击

image-20240716195444823

  • 然后选择Dex编辑器++
image-20240716195529407
  • 然后使用搜索功能,打开示例程序,使用开发者助手,提取要翻译的英文。
image-20240716195614795
  • 复制提取的内容到查找内容中,将搜索类型改为字符串,然后选中搜索子目录,取消选中完全匹配,然后点击确定。搜索到后点击搜索到的内容,然后修改字符串为逆向决定高度,开发决定深度
image-20240716195924620 image-20240716200009507 image-20240716200131181
  • 然后保持,返回,保持并退出,确定更新签名,然后进行安装,安装后打开示例程序的挑战第一关,出现如图所示
image-20240716200303118

替换图片

  • 这个内容是课后作业,可以先跳过,等看完再跳过来看这个

  • 先了解该图片被存放在什么地方,由上面的APK文件结构可以知道,图片文件存放在assets或者res目录下。

  • 接下来查看示例程序的apk文件,在NP管理器中打开如下目录,然后点击apk文件查看

image-20240717105019616
  • 发现该apk文件结构里面没有assets目录,但是存在res目录
image-20240717104348735
  • 所以果断查看res目录,寻找示例程序中,挑战1的图片,最后发现图片文件在存在
image-20240717104519848
  • 然后随便找一张jpg图片,将其命名为cf.jpg,并复制到共享文件夹下
image-20240717111144946
  • 然后在NP模拟器中对res文件进行解压操作,长按鼠标左键或右键都可以弹出如下窗口
image-20240717111240882
  • 在NP模拟器中左边的目录打开共享文件夹,由边打开解压后的res文件夹
image-20240717111437149
  • 然后长按左边的cf.jpg图片,弹出窗口后选择复制图片
image-20240717111533131
  • 直接复制并替换
image-20240717111555315
  • 然后再将左边返回到如下目录,右边进入apk文件
image-20240717111722244
  • 然后长按左边的res文件,点击添加按钮
image-20240717111753098
  • 点击确定
image-20240717111816898
  • 返回后就会得到如下apk文件
image-20240717111850140
  • 直接安装该apk文件,然后点击挑战1,就会看到挑战1的图片被成功的替换
image-20240717112001978

一键汉化插件

  • 在一开始汉化插件是没有的,需要自己安装,在设置中找到,插件管理(需要vip)

image-20240716194644968

  • 点进去后再插件中心选择插件

image-20240716194757005

APK文件结构详解

  • 之前初步认识了APK文件结构,现在开始认识APK文件结构内部更细节的东西

AndroidMainfest.xml

  • AndroidMainfest.xml文件是整个应用程序的信息描述文件,定义了应用程序中包含的Activity,Service,Content provider和BroadcastReceiver组件信息。每个应用程序在根目录下必须包含一个AndroidMainfest.xml文件,且文件名不能修改。它描述了package中暴露的组件,他们各自的实现类,各种能处理的数据和启动位置
属性 定义
versionCode 版本号,主要用来更新,例如:12。用来更新或者去更新。
versionName 版本名,给用户看的,例如:1.2。用来更新或者去更新。
uses-permission android:name=“” 应用权限,例如:android.permission.INTERNET代表网络权限、获取摄像头权限。可以删除权限。
android:label=“@string/app_name” 应用名称。修改应用的名称和应用的图标。
android:icon=“@mipmap/ic_launcher” 应用图标路径。
android:debuggable=“true” 应用是否开启debug权限。动态调试用到的权限。
package 包名,例如:com.zj.52pj.demo。用来双开。
  • 使用NT来演示,MT修改该文件内容需要vip
  • 打开NT管理器,然后进入下图文件夹,点击apk文件

image-20240716203004340

  • 然后查看apk文件,点击编辑,然后就会看到这些属性了

image-20240716203121355

image-20240716203231143

APK修改应用名字、图标

  • 使用NP管理器,在功能里面
image-20240716203509137
  • 点击通用编辑
image-20240716203548317 image-20240716203630924
  • 替换图片,在模拟器中打开电脑共享文件夹,将52破解的图片复制进来
image-20240716204033495
  • 点击图标,选择系统图库
image-20240716204156032
  • 选择图片,点击进去,然后再点击一次图片,即修改完成图标
image-20240716204248884 image-20240716204354640
  • 然后直接修改程序名字,将名字修改为吾爱破解,然后保存。
image-20240716204819047
  • 由于原来的安装包是使用MT的签名,现在使用的是NP的签名,所以在安装该安装包之前需要先卸载原来已经安装的应用,安装完之后即可得到下图图标
image-20240716205105104

作业1

  • 试着自己找个应用双开、修改名字、找个英文应用汉化

  • 替换第一关挑战中的图片(完成)

  • 手机上没啥纯英文的软件,就一个Telegram

  • NP管理器先安装包提取,换个apk图标和汉化应用名称

image-20240717112608352
  • 然后再使用开发者工具提取英文,使用MT管理器的高级搜索功能,搜索到相应字符串,由于该应用比较大搜索会久一点,搜索结果发现是arsc文件
image-20240717113004008
  • 直接翻译模式打开,选中[DEFAULT],使用过滤功能找到字符串,然后修改替换,然后保存并退出,并自动签名
image-20240717113303250
  • 然后使用NP模拟器进行双开,在NP模拟器中使用APK共存,安装该应用,然后即可完成作业
image-20240717113603950 image-20240717113644727 image-20240717113705844 image-20240717113720713