【安卓逆向】逆向APP界面UI修改再安装

news2025/2/27 13:02:42

1.背景
有一客户找到我,说能不能把APP首页的底部多余界面去掉。

添加图片注释,不超过 140 字(可选)

  1. 逆向实战
    想要去除安卓应用软件中的内容,需要对APP逆向进行修改再打包。
    通过工具 MIT管理器工具

添加图片注释,不超过 140 字(可选)

提取APK包,点击apk文件,点击查看反编译apk。

添加图片注释,不超过 140 字(可选)

搜索关键字。这里关键字都是后端接口返回,所以说关键字搜索无果。
在assets资源文件下找到Index.html首页

添加图片注释,不超过 140 字(可选)

一顿操作排查,根据客户提供的页面信息,最终锁定是home.html文件,在www目录中。

微友助手 ...省略style元素
    <script type="text/javascript" charset="utf-8">
        (function($, doc) {
            $.init({
                swipeBack: false //启用右滑关闭功能
            });
            $.plusReady(function() {
                console.log('homeready');
                plus.navigator.setStatusBarBackground('#FFFFFF');
                plus.navigator.setStatusBarStyle('dark');
               
                var userDatas = app.getDatas('$userDatas'); 
                if(userDatas['account'])app.bindAliasAndTag(userDatas['account'],[userDatas['account']]);
                
                var self = plus.webview.currentWebview();                   
                
                doc.getElementById('bar').innerHTML = userDatas['account']?userDatas['account']:'';                         
                
                
                doc.getElementById('copy_url').addEventListener('tap', function(event) {
                    app.copyToClipboard("http://yqlm.jisubianxian.com/web");
                    mui.toast('复制成功');
                });
                
                var home_data = app.getHomeData(userDatas.token, function(datas, zt) {                              
                    if(zt==true){                   
                        doc.getElementById('ke_use_count').innerHTML = datas['ke_use_count']?datas['ke_use_count']:'0'; 
                        doc.getElementById('intro').innerHTML = datas['intro']?datas['intro']:'';
                        if(datas['foot']==true){                                
                            // doc.getElementById('foot').style.display='';
                        }
                        
                            
                        if(datas['rj_logo'] && datas['rj_logo'].length>0){
                            
                            var rj_logo = datas['rj_logo'];
                            //console.log(dd.lunbo.length);
                            var rj_logo_str = '';
                            for (i=0;i<rj_logo.length;i++){
                                 rj_logo_str +='<li>'+
                                                    '   <img src="'+rj_logo[i]+'" style="width: 6vw;height: 6vw;border-radius: 5vw;">'+
                                                '</li>';
                            }
                            //console.log(products_str);
                            doc.getElementById('rj_logo').innerHTML = rj_logo_str;
                        }
                        
                        if(datas['doc_tool'] && datas['doc_tool'].length>0){
                            
                            var doc_tool = datas['doc_tool'];
                            //console.log(dd.lunbo.length);
                            var doc_tool_str = '';
                            for (i=0;i<doc_tool.length;i++){
                                 doc_tool_str +='<li>'+
                                                    '<a onclick="javascript:app.openXy(\''+doc_tool[i]['url']+'\')">'+
                                                    '    <img src="'+doc_tool[i]['img']+'" style="border-radius: 0;">'+
                                                    '    <span style="color: #8f8f94;">'+doc_tool[i]['name']+'</span>'+
                                                    '</a>'+
                                                '</li>';
                            }
                            doc.getElementById('doc_tool').innerHTML = doc_tool_str;
                        }
                    }
                });
                            
                document.querySelector('#add_man_js').addEventListener('tap', function(e) {
                    console.log('开始添加');
                    plus.contacts.getAddressBook( plus.contacts.ADDRESSBOOK_PHONE, function( addressbook ) {
                        app.get_tels_list(userDatas.token, function(dd, status) {                               
                            if(status== false){
                                mui.alert(dd);
                            }else{
                                if(typeof(dd)=='string')dd = JSON.parse(dd);
                                var datas = dd['data'];
                                for(var i=0;i<datas.length;++i){
                                    console.log('name:'+datas[i].name+'mobile:'+datas[i].mobile+'remark:'+datas[i].remark);
                                    // 向通讯录中添加联系人
                                    var contact = addressbook.create();                                 
                                    contact.name = {givenName:datas[i].name};
                                    contact.phoneNumbers = [{type:"mobile",value:datas[i].mobile,preferred:true}];
                                    contact.note=datas[i].remark;
                                    //contact.categories ={type:"company",value:"神硕"};
                                    //contact.organizations={type:"company",value:"神硕"};
                                    contact.save();
                                    
                                };
                                console.log(dd['ke_use_count']);
                                document.getElementById('ke_use_count').innerHTML = dd['ke_use_count']?dd['ke_use_count']:'0';
                                //添加成功后更新服务端的数据状态和可用数量
                                mui.alert('批量导入成功!已随机导入1-4个数据,请打开客户端添加或关注新朋友。');
                            }
                            
                        });
                        
                        
                    }, function ( e ) {
                        mui.alert( "获取通讯录失败: " + e.message );
                    } );                            
                });         
                
                
                document.querySelector('#log_out_js').addEventListener('tap', function(e) {
                    
                    mui.confirm('确认退出程序?', '',['取消','确定'], function(e) {
                        if (e.index == 1) {
                            userDatas['token']='';
                            app.setDatas('$userDatas', userDatas);
                            plus.runtime.restart();     
                        } else {
                            //console.log('你点击了取消');
                        }
                    });     
                });
                            
                setTimeout(function() {
                    plus.navigator.closeSplashscreen();
                }, 1000);   
                console.log('homereadyover');                   
                        
            });
            
        }(mui, document));
        
    </script>
    
</head>
<body style="background-image: url('../../images/home.png'); background-position: center center;background-repeat: no-repeat;background-attachment: fixed;background-size: cover;height: 100%;">            
    
    ...省略部分内容
    
    <div class="report" >
        <a id ="add_man_js">+批量导入通讯录</a>
        <!--<a id ="add_man_js"><img src="../../images/btn.png" style="width:100%;height:100%"></a>-->
        
    </div>
    
    <div class="member_c">
        <ul class="ul_c" id="doc_tool">             
        </ul>
    </div>
            
            
    <footer id='foot'>
        <p style="font-size: .7rem;">管理员给多个app客户端【分配数据】请访问:</p>
        <p style="font-size: .7rem;color:#0FB923;">http://yqlm.jisubianxian.com/web</p>         
        <p style="font-size: .7rem;">使用电脑浏览器打开 <a style="color:blue;" id="copy_url"> <img src="../../images/8.png" style="width:20px;height:20px">复制网址</a></p>
    </footer>
    <div class="good_bot">
        <a id ="log_out_js">退 出 系 统</a>
    </div>      

</body>
有js基础的不难看到,页面是通过页面加载完成后调用后端接口返回得到的信息,再动态添加元素渲染。 这里直接通过style样式标签直接把底部元素隐藏掉即可。

添加图片注释,不超过 140 字(可选)

  1. 签名重新打包
    修改home.xml文件保存后退出编辑页面,选择自动签名,确定更新。返回到apk界面。

添加图片注释,不超过 140 字(可选)

最后重新安装apk文件,效果如下。

添加图片注释,不超过 140 字(可选)

本文来自互联网用户投稿,该文观点仅代表作者本人,不代表本站立场。本站仅提供信息存储空间服务,不拥有所有权,不承担相关法律责任。如若转载,请注明出处:http://www.coloradmin.cn/o/2306891.html

如若内容造成侵权/违法违规/事实不符,请联系多彩编程网进行投诉反馈,一经查实,立即删除!

相关文章

SAP Webide系列(7)- 优化FreeStyle新建项目预设模板

目录 一、背景 二、优化目标 三、定位调整点 四、调整步骤 五、效果展示 六、附言 一、背景 在每次通过Webide进行FreeStyle方式自开发SAP UI5应用的时候&#xff0c;新建项目&#xff0c;得到的模板文件都是只有很少的内容&#xff08;没有路由配置、没有设置默认全屏等…

python读取sqlite温度数据,并画出折线图

需求&#xff1a; 在Windows下请用python画出折线图&#xff0c;x轴是时间&#xff0c;y轴是温度temperature 和体感温度feels_like_temperature 。可以选择县市近1小时&#xff0c;近1天&#xff0c;近1个月的。sqlite文件weather_data.db当前目录下&#xff0c;建表结构如下…

【Linux网络编程】高效I/O--select/poll服务器

目录 多路转接之select select服务器实现 获取连接 handlerEvent select服务器代码链接 select的优缺点 多路转接之poll poll服务器实现(select服务器改写) poll的优缺点 多路转接之select select的作用 I/O的本质 等 拷贝 多路转接就是通过同时等待多个文件描述…

C语言实战项目(1)---------->猜数字游戏

在学习完循环和选择结构之后&#xff0c;我们可以做一个猜数字游戏。在此项目之前&#xff0c;如果还不会C语言的if语句、switch语句等组成选择结构的语句&#xff0c;while循环、for循环、do-while循环等组成循环结构的语句。可以参考我之前的博客&#xff1a; C语言&#xf…

Failed to start The PHP FastCGI Process Manager.

报错如下&#xff1a; Job for php-fpm.service failed because the control process exited with error code. See "systemctl status php-fpm.service" and "journalctl -xe" for details. 2月 25 21:49:00 nginx systemd[1]: Starting The PHP FastC…

【REST2SQL】15银河麒麟系统下达梦数据库部署REST2SQL

【REST2SQL】01RDB关系型数据库REST初设计 【REST2SQL】02 GO连接Oracle数据库 【REST2SQL】03 GO读取JSON文件 【REST2SQL】04 REST2SQL第一版Oracle版实现 【REST2SQL】05 GO 操作 达梦 数据库 【REST2SQL】06 GO 跨包接口重构代码 【REST2SQL】07 GO 操作 Mysql 数据库 【RE…

晶体管输出光耦和逻辑输出光耦

晶体管输出光耦&#xff08;非线性&#xff09;和逻辑输出光耦&#xff08;线性&#xff09;的区别&#xff1a; 逻辑输出光耦的电流传输特性曲线是非线性的&#xff0c;适合于开关信号的传输&#xff0c;不适合于传输模拟量&#xff1b; 光电晶体管输出光耦的电流传输特性是线…

绕过过滤order by

一、常见绕过技术 1、注释符截断 利用注释符&#xff08;如 --、#&#xff09;截断后续查询&#xff0c;消除过滤逻辑的影响。 ORDER BY 1-- 若原查询为 SELECT * FROM table ORDER BY 用户输入&#xff0c;注入后可能忽略后续过滤逻辑。 2、大小写混淆/编码绕过 若过滤是大…

面试八股文--数据库基础知识总结(1)

1、数据库的定义 数据库&#xff08;DataBase&#xff0c;DB&#xff09;简单来说就是数据的集合数据库管理系统&#xff08;Database Management System&#xff0c;DBMS&#xff09;是一种操纵和管理数据库的大型软件&#xff0c;通常用于建立、使用和维护数据库。数据库系统…

机试刷题_1614. 括号的最大嵌套深度【python】

1614. 括号的最大嵌套深度 class Solution:def maxDepth(self, s: str) -> int:maxD 0if not s:return maxDstack []for char in s:if char(:stack.append(char)maxD max(maxD,len(stack))elif char) :stack.pop()return maxD

VM虚拟机安装与配置Ubuntu Linux操作系统详细教程~

一、下载VM虚拟机 VMware16.0.zip百度网盘下载链接:https://pan.baidu.com/s/1-l-CcAVNINqhRLSiQ26R7w?pwd=tznn 提取码: tznn 二、软件介绍 VMware(虚拟机)是指通过软件模拟的具有完整硬件系统功能的、运行在一个完全隔离环境中的完整计算机系统,通过它可在一台电脑上同…

免费PDF工具

Smallpdf.com - A Free Solution to all your PDF Problems Smallpdf - the platform that makes it super easy to convert and edit all your PDF files. Solving all your PDF problems in one place - and yes, free. https://smallpdf.com/#rappSmallpdf.com-解决您所有PD…

组件注册方式、传递数据

组件注册 一个vue组件要先被注册&#xff0c;这样vue才能在渲染模版时找到其对应的实现。有两种注册方式&#xff1a;全局注册和局部注册。&#xff08;组件的引入方式&#xff09; 以下这种属于局部引用。 组件传递数据 注意&#xff1a;props传递数据&#xff0c;只能从父…

异步fifo学习

FIFO 本质是由 RAM 加上读写逻辑构成的先入先出的数据缓冲器。与 RAM 的区别是 FIFO 没有外部读写地址线&#xff0c;顺序写入顺序读出数据&#xff0c;其数据地址是由内部读写指针自增完成&#xff0c;因此 FIFO 在读写时不需要考虑读写冲突的问题。 根据 FIFO 工作的时钟域&a…

【有啥问啥】All-to-All 通信:原理、实现与应用

All-to-All 通信&#xff1a;原理、实现与应用 一、引言 在分布式计算和并行处理领域&#xff0c;进程之间的通信是至关重要的。All-to-All 通信作为一种高效的通信模式&#xff0c;广泛应用于各种高性能计算和分布式系统中。本文将详细介绍 All-to-All 通信的定义、工作原理…

Python学习第十七天之PyTorch保姆级安装

PyTorch安装与部署 一、准备工作二、pytorch介绍三、CPU版本pytorch安装1. 创建虚拟环境2. 删除虚拟环境1. 通过环境名称删除2. 通过环境路径删除 3. 配置镜像源4. 安装pytorch1. 首先激活环境变量2. 进入pytorch官网&#xff0c;找到安装指令 5. 验证pytorch是否安装成功 四、…

GPT-5倒计时:2025年AI海啸来袭,机器与人类对话临近

大家好&#xff0c;我是Shelly&#xff0c;一个专注于输出AI工具和科技前沿内容的AI应用教练&#xff0c;体验过300款以上的AI应用工具。关注科技及大模型领域对社会的影响10年。关注我一起驾驭AI工具&#xff0c;拥抱AI时代的到来。 人工智能&AIGC术语100条 Shelly聊AI-重…

ADC采集的电压误差比较大怎么办?

目录 1、电源噪声和电源不稳定 2、参考电压不稳定或不准确 3、采样电路设计不合理 4、温度影响 5、软件校准和误差修正 6、时钟抖动 ADC&#xff08;模数转换器&#xff09;采集的电压误差可能会受到多种因素的影响&#xff0c;要有效减少误差&#xff0c;需要从硬件和软…

【单片机】MSP430MSP432入门

文章目录 0 前言1 开发方式选择2 CCS和开发相关软件3 Keil开发MSP4324 IAR for 430开发MSP4305 总结 0 前言 最近因为想学DSP&#xff0c;所以把之前卸载的CCS给装回来了&#xff0c;手头也还有之前电赛剩下的MSP430和MSP432的板子&#xff0c;由于年代久远&#xff0c;想着花点…

大模型自动提示优化(APO)综述笔记

自大型语言模型&#xff08;LLMs&#xff09;出现以来&#xff0c;提示工程一直是各种自然语言处理&#xff08;NLP&#xff09;任务中激发期望响应的关键步骤。然而&#xff0c;由于模型的快速进步、任务的多样性和相关最佳实践的变化&#xff0c;提示工程对最终用户来说仍然是…