高中生

- 金币
- 359
- 好评
- 8
- 信誉
- 111
|
本帖最后由 qingfeng1 于 2025-8-29 09:05 编辑
一:实现的效果
以软件Alook浏览器为例,如图给软件添加如图进入密码界面,当输入错误密码时提示密码错误,输入123456时点击确定成功进入软件。
二:准备工作(若使用楼主提供的界面代码可直接跳过这一步)
1.使用andro studio或其他根据自己编写一个app,启动界面为自己想要给Alook添加的界面。使用mt打开该app的安装包,找到AndroidManifest.xml文件反编译。代码【<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />】上面的activity为启动activity,找到他如图。
使用Dex编辑器++打开所有classes文件,安装左图路径找到该文件和与之相关的文件,如中图,长按多选并导出,放一边备用。
在/res/layout/找到自己编写的xml界面文件,如右图,放一边备用
准备一个Alook浏览器的安装包
三:注入界面
为了避免两套资源ID系统冲突,必须将注入界面的ID映射/替换成宿主App的ID,系统才能正确工作。所以注入界面前需要先替换一些资源ID,最好是找到一些无用的资源ID进行替换,否则可能造成软件在某些地方闪退。
1.替换资源ID
该教程使用的界面需要两个控件资源ID(图左),与一个界面资源ID(activity_aaa.xml),由于重新分配资源ID较为复杂,本教程采用替换无用资源ID的方式。
点击resources.arsc,编辑器++,找到id文件夹里面的文件(图1 2 3),type-info点进去找到两个无用资源(判断方法自行百度,为了方便这里直接使用最后面的两个资源id)(图4),复制id号与名字备用(注意对应关系不要弄混了)
返回找到layout文件夹,type-info点进去,找一个无用的layout资源id(同上一步),为了方便这里取最后一个(图2)。复制id与名字。搜索名字把名字替换为你的xml文件名字,这里是activity_aaa(图3)。返回点击layout文件,同样替换(图4)。
2.导入界面xml文件
打开之前放到一边的xml文件,这里是activity_aaa.xml,如图1替换两个id为之前的id,图一为替换后的截图。
打开/res/layout/ ,将修改后的xml文件添加进去(图2)。
截至目前,界面已经成功导入,但仅导入界面软件并不能达到我们想要的效果,接下来我们还需要在classes文件里面添加界面所关联的activity,里面记录着界面运行的相关代码(如点击确定按键后会判断密码是否正确,会跳转到下一页)。之后我们还需要将两个控件名称与id,activity_aaa.xml与id进行绑定声明。
3.寻找应用入口并替换
点击AndroidManifest.xml文件,反编译
[size=0.875em]<action android:name="android.intent.action.MAIN" />意思是:这个Activity是应用的入口点。它指定这个Activity是用来“启动”这个应用程序的。
[size=0.875em]<category android:name="android.intent.category.LAUNCHER" />意思是:这个Activity的图标应该被显示在系统的应用启动器(Launcher,即桌面App列表)里。
我们找到这两行代码,上面的activity就是app的入口(图1),复制Lalook.browser.LauncherActivity
使用dex++打开classes.dex文件,根据Lalook.browser.LauncherActivity找到LauncherActivity文件,我们之前放到一边的aaa等文件需要放到跟这个文件同一个目录里面。
这里放到同一个目录是为了可以直接在相同目录下的Rid Rlayout里面添加代码进行资源名称的映射
长按随便一个文件夹,点击导入,选择之前导出的dex文件(图一为导入后),分别进入三个文件,如图2进行替换(目的是改变三个文件的路径),返回保存重新dex++进入
此时发现三个文件与LauncherActivity在同一个文件夹
图二有错误,应是Lalook/browser
4.资源名称的映射
应用编译时会把字符串映射成整型ID,所以我们注入界面也需要模仿应用编译的过程,给相应资源分配id(已经完成),并进行映射。
找到图一这两个文件,按照里面的格式添加相应的代码,如图。由于是替换的id(不是重新分配的),所以有的不需要添加,有的直接改字符串名称就行了,具体情况具体分析
5.字符串名称替换
由于我们之前的两个控件 (输入框 按钮)的字符串名称替换为year和zero_corner_chip,所以在这三个文件里面,我们应该进行同样的替换,确保名字一样
名称1->year 名称2->zero_corner_chip 三个aaa文件都要替换,如果你使用的是自己写的界面,同理
最后我们在代码里面把点击确定后跳转的入口设置一下:
点击aaa *1文件,点击转java代码,我们发现有个startactivity函数,里面有个“启动入口”,应该就是点击确定后跳转的入口名字。我们返回,查找“启动入口”,把 Lalook/browser/启动入口 替换为Lalook/browser/LauncherActivity。如图
三:修改软件入口
目前软件的入口界面还是原来的界面,你如果打包安装后会发现,软件并没什么改变
所以我们需要把入口改为我们注入的新界面
一开始我们就提到过,代码【<action android:name="android.intent.action.MAIN" /><category android:name="android.intent.category.LAUNCHER" />】上面的activity为启动activity
所以我们只需要把启动activity复制,在下面粘贴一份(注意原来的activity标签最后应该>需要改为/>),让后把alook/browser/LauncherActivity改为alook/browser/aaa即可
打开AndroidManifest.xml,如图操作
四:测试
与预期相符,如果你的软件闪退说明你替换id的资源可能是比较重要的资源,可以换个再试试。当然也可能是你某些步骤做错了。
五:
最后,该贴的方法是贴主在学了一段时间androidStudio后编写两个apk,通过使用mt管理器对比功能,琢磨出来的。里面可能用语不太规范,也会有一些错误疏漏,希望大佬评论区及时指出,以免误导别人,谢谢大家。
附件是用到的代码以及修改前修改后的软件,欢迎大家讨论
附件修改后的软件在某个界面存在闪退情况,原因是选取替换的资源id太过随意,不够方法是没问题的,楼主用不同app验证过多次。
蓝走运:
APP修改后安装包:https://wwyu.lanzoue.com/iTfbT34og2qb
APP修改前安装包:https://wwyu.lanzoue.com/iAcKO34txgpg
教程所用到的页面代码:https://wwyu.lanzoue.com/iwy8J34u23yh
注:使用附件下载楼主没有任何收益,想支持楼主可以通过点赞打赏评论等方式。
附件防丢,把.txt文件删掉后解压:
对大家可能有帮助的评论:
替大家试过了,直接新建ID可行,而且也避免了资源冲突的问题。不过新建ID时需要先使用资源查询确保该ID未被使用,否则闪退。
|
本帖子中包含更多资源
您需要 登录 才可以下载或查看,没有账号?立即注册
x
-
查看全部评分
总评分:好评 +2
金币 +3
|