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

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

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 字(可选)

相关文章:

  • Git详解及常用命令
  • .NET Core MVC IHttpActionResult 设置Headers
  • 将 iOS 项目打包并运行到真实的 iPhone 设备
  • python实现基于文心一言大模型的sql小工具
  • 02.25 继承和多态
  • 【大模型系列】使用ollama本地运行千问2.5模型
  • [字节青训_AI对话框]SSE交互规范、自定义事件、前后端数据传递、状态监听、连接和断开详解
  • knife4j+springboot3.4异常无法正确展示文档
  • (论文)使用双频分析检测 AI 合成的语音
  • 【大厂AI实践】微软:基于预训练的自然语言生成在搜索与广告中的应用
  • 高一英语拓展词汇第二版
  • 基于ArcGIS Pro、R、INVEST等多技术融合下生态系统服务权衡与协同动态分析实践应用
  • Android构建系统 - 03 编译执行流程
  • Zemax OpticStudio 中的扩散器建模
  • Linux网络安全
  • 如何利用机器学习实现信用风险评分
  • 深度剖析Seata源码:解锁分布式事务处理的核心逻辑
  • 一文掌握 Playwright 的详细使用
  • C++核心指导原则: 表达式和语句
  • AI赋能:使用AI代码生成器提升前端可访问性
  • 什么做婚车网站最大/深圳seo排名
  • 寿光做网站m0536/河北网络科技有限公司
  • 外贸商城网站/长沙网站seo源头厂家
  • 怎么问客户做不做网站/长沙百度网站快速排名
  • 如何做网站登录界面/上海抖音推广
  • 音乐网站开发文档/营销型网站分为哪几种