Android 中的拿来主义(编译,反编译,AXMLPrinter2,smali,baksmali)!

WebView交互架构项目实战(三),一年后斩获腾讯T3 jsStr = JsjjJSHelper.getResInputStream(url); if (url.endsWith(".png")) { response = getWebResourceResponse(url, “image/png”, “.png”); } else if (url.endsWith(".gif")) { response = getWebResourceResponse(url, “image/gif”, “.gif”); } else if (url.endsWith(". 阅读详情


来自:http://blog.youkuaiyun.com/android_tutor/article/details/5724435

一、前言:

大家好,今天给大家分享一下Android中的拿来主义,我们时常会碰到一个自己觉得很漂亮很帅气的应用(apk),所以我们会尝试用WinRAR等之类工具查看,而一般的应用程序打包后的目录通常是这样的如下图:

当然res里的图片是可以拿来就用的(笔者的好多应用的图片都是从别人的apk里扣出来的),而诸如layout里的布局及权限文件(AndroidManifest.xml)已经是一堆乱码了,完全看不懂,想看看别人是怎么布局的都不容易。还有源代码都被编译成了classes.dex,完全看不出什么线索。基于以上的困惑,笔者给大家分享一下Android中的拿来主义。

二、所需工具(点击各自连接进入下载页面):

1.AXMLPrinter2.jar

2.baksmali.jar

3.smali.jar

三、准备工作

为了方便起见,作者把AXMLPrinter2.jar,还有baksmali.jar,还有smali.jar(下下来为了方便重命名),放在Android SDK tools文件夹中如下图所示:

为了便于大家更容易程序比对,作者写了一个简单的应用(叫APKInstaller)目录结构如下图所示:

四、开始拿来主义

1.用AXMLPrinter2.jar查看apk中的布局xml文件:

将ApkInstaller应用生成的ApkInstaller.apk(为了方便起见放到tools目录里)用WinRAR等工具打开,将res/layout/main.xml解压出来(也还是放在tools目录里哦)

打开main.xml文件,内容如下(一堆天文):

这时候AXMLPrinter2.jar派上用场了,打开cmd终端,一直进入到tools目录下,输入如下命令:

java -jar AXMLPrinter2.jar main.xml > main.txt. (如下图所示)

打开main.txt代码如下(是不是有个123了呵呵~):

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout  
  3.     xmlns:android="http://schemas.android.com/apk/res/android"  
  4.     android:orientation="1"  
  5.     android:layout_width="-1"  
  6.     android:layout_height="-1"  
  7.     >  
  8.     <WebView  
  9.         android:id="@7F050000"  
  10.         android:layout_width="-1"  
  11.         android:layout_height="-2"  
  12.         >  
  13.     </WebView>  
  14. </LinearLayout>  

为了比对打开源程序中的main.xml代码如下(大家比对一下吧):

  1. <?xml version="1.0" encoding="utf-8"?>  
  2. <LinearLayout xmlns:android="http://schemas.android.com/apk/res/android"  
  3.     android:orientation="vertical"  
  4.     android:layout_width="fill_parent"  
  5.     android:layout_height="fill_parent"  
  6.     >  
  7. <WebView  
  8.     android:id="@+id/apk_web"  
  9.     android:layout_height="wrap_content"  
  10.     android:layout_width="fill_parent"  
  11.       
  12. />  
  13. </LinearLayout>  

2.用baksmali.jar反编译classes.dex:

将ApkInstaller.apk里的classes.dex解压到tools目录里,然后baksmali.jar就派上用场了,在cmd命令行里输入如下命令:

java -jar baksmali.jar -o classout/ classes.dex.(如下图所示:)

你将会发现在tools里多一个classout文件夹里面(我代码的包目录结构清晰可见呀),如下图所示:

从上面看出除了Android本身资源的类R开头的,我的源程序里只有一个ApkInstaller.java,完全吻合,真TMD的猥琐呵呵~

下面我们看一下ApkInstaller.smali内容是什么,如以下代码:

  1. .class public Lcom/tutor/apkinstaller/ApkInstaller;  
  2. .super Landroid/app/Activity;  
  3. .source "ApkInstaller.java"  
  4. # instance fields  
  5. .field private apkWeb:Landroid/webkit/WebView;  
  6. # direct methods  
  7. .method public constructor <init>()V  
  8.     .registers 1  
  9.     .prologue  
  10.     .line 8  
  11.     invoke-direct {p0}, Landroid/app/Activity;-><init>()V  
  12.     return-void  
  13. .end method  
  14. # virtual methods  
  15. .method public onCreate(Landroid/os/Bundle;)V  
  16.     .registers 5  
  17.     .parameter "savedInstanceState"  
  18.     .prologue  
  19.     .line 13  
  20.     invoke-super {p0, p1}, Landroid/app/Activity;->onCreate(Landroid/os/Bundle;)V  
  21.     .line 14  
  22.     const/high16 v2, 0x7f03  
  23.     invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->setContentView(I)V  
  24.     .line 15  
  25.     const/high16 v2, 0x7f05  
  26.     invoke-virtual {p0, v2}, Lcom/tutor/apkinstaller/ApkInstaller;->findViewById(I)Landroid/view/View;  
  27.     move-result-object v2  
  28.     check-cast v2, Landroid/webkit/WebView;  
  29.     iput-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;  
  30.     .line 16  
  31.     iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;  
  32.     invoke-virtual {v2}, Landroid/webkit/WebView;->getSettings()Landroid/webkit/WebSettings;  
  33.     move-result-object v1  
  34.     .line 17  
  35.     .local v1, webSettings:Landroid/webkit/WebSettings;  
  36.     const/4 v2, 0x1  
  37.     invoke-virtual {v1, v2}, Landroid/webkit/WebSettings;->setJavaScriptEnabled(Z)V  
  38.     .line 19  
  39.     const-string v0, "http://frankiewei.net/apk/demos/main/index.html#home"  
  40.     .line 20  
  41.     .local v0, apkUrl:Ljava/lang/String;  
  42.     iget-object v2, p0, Lcom/tutor/apkinstaller/ApkInstaller;->apkWeb:Landroid/webkit/WebView;  
  43.     invoke-virtual {v2, v0}, Landroid/webkit/WebView;->loadUrl(Ljava/lang/String;)V  
  44.     .line 21  
  45.     return-void  
  46. .end method  

同样为了比对我们看一下ApkInstaller.java的源代码如下:

  1. package com.tutor.apkinstaller;  
  2. import android.app.Activity;  
  3. import android.os.Bundle;  
  4. import android.webkit.WebSettings;  
  5. import android.webkit.WebView;  
  6. public class ApkInstaller extends Activity {  
  7.      
  8.     private WebView apkWeb;  
  9.     @Override  
  10.     public void onCreate(Bundle savedInstanceState) {  
  11.         super.onCreate(savedInstanceState);  
  12.         setContentView(R.layout.main);  
  13.        apkWeb = (WebView)findViewById(R.id.apk_web);  
  14.        WebSettings webSettings = apkWeb.getSettings();  
  15.        webSettings.setJavaScriptEnabled(true);  
  16.         
  17.        String apkUrl = "http://frankiewei.net/apk/demos/main/index.html#home";  
  18.        apkWeb.loadUrl(apkUrl);  
  19.     }  
  20. }  

 

我相信大家 已经能看出来门道来了吧,hoho~

 

3.用smali.jar编译classout成classes.dex:

我们上一步已经将classes.dex反编译成了.smali文件,好了,我们看看smali文件看够了,在偿试把它编译成classes.dex吧,

输入如下命令:java -jar smali.jar classout/ -o classes.dex.如下图所示:

 

我们可以将新生成的classes.dex塞入ApkInstaller.apk里覆盖原来的classes.dex文件,这样我们的apk还是一样能用的哦~


Python Selenium自动化脚本实战:从零构建网页自动点击工具 Web自动化是软件测试和流程自动化领域的核心技术,它通过模拟用户操作实现浏览器行为的程序化控制。其原理基于浏览器驱动协议,允许外部脚本直接与浏览器引擎交互,执行导航、元素定位、表单填写和点击等操作。这项技术的核心价值在于将人工从重复性网页操作中解放出来,提升工作效率与准确性,同时为大规模数据采集、系统监控和日常任务自动化提供基础支撑。在应用场景上,Web自动化广泛适用于数据录入、报表生成、网站巡检、电商监控和批量表单提交等场景。本文以Python和Selenium为核心工具,深入讲解如何构建健壮的自动化点击 阅读详情

相关推荐

Python爬虫进阶:结合JS逆向与AI技术破解数据采集难题

网络爬虫是自动化获取公开网络信息的基础技术,其核心原理是通过模拟HTTP请求与解析响应来提取数据。然而,现代网站普遍采用JavaScript动态渲染和API参数加密等反爬机制,使得传统爬虫技术面临挑战。JS逆向工程通过分析网页加载的JavaScript代码,理解其数据生成和加密逻辑,成为破解动态内容与加密请求的关键技术。结合AI技术,如机器学习模型识别验证码或进行智能数据分析,可以进一步提升数据采集的自动化程度与处理深度。这种技术组合在公开数据采集、市场研究、舆情监控等应用场景中具有重要价值。本文聚焦于Py

weixin_34319817的博客 485

Android smali backsmali 反编译工具

smali backsmail: 使用方法: java -jar baksmali-2.0.3.jar -x DeskClock.odex -d framework java -Xmx512M -jar smali-2.0.3.jar out -o classes.dex

讯飞AI写作与python及selenium结合,自动化处理的编写笔记,这是我思考和整理了接近一周才完成的,可能我太笨了。

初始化Chrome浏览器service = Service(executable_path='path/to/chromedriver') # 替换为你的chromedriver路径try:# 打开一个网页,以便之后有多个标签页进行演示# 假设在此之后通过某些操作打开了新的标签页,例如点击链接等# 获取所有窗口句柄# 遍历窗口句柄,定位到最后一个打开的标签页driver.switch_to.window(handle) # 切换到当前循环的窗口。

weixin_42771529的博客 1394

每天记录学习的新知识 : WebView的配置WebSettings

Android 8.0 开始,WebView 中即已经集成安全浏览功能,并且与 Android 版的 Chrome 采用相同的底层技术。WebView 的安全浏览,是依赖于 Google Play 和 Chrome 更新的,也就是说,虽然你的设备是 Android 8.0,但是此策略也是有可能没有生效的。当值为true且页面包含viewport标记,将使用标签指定的宽度。设置值为true时,布局的宽度总是与WebView控件上的设备无关像素(device-dependent pixels)宽度一致。...

嗯... 2565

AI辅助JS逆向与Python爬虫实战:从零攻克反爬虫技术

在数据采集和自动化领域,Python爬虫是核心技术之一,它通过模拟浏览器行为从网站获取公开数据。然而,现代网站普遍采用JavaScript加密、动态令牌等反爬机制,传统爬虫技术面临挑战。JS逆向工程正是破解这些前端加密逻辑的关键,它涉及分析JavaScript代码以还原数据生成算法。AI大语言模型的引入,为这一过程带来了革命性效率提升,能够辅助开发者快速理解混淆代码、解释加密函数并生成还原代码。这种AI+爬虫+逆向的结合,显著降低了技术门槛,提升了开发速度,尤其适用于数据采集、市场研究和安全分析等需要高效处

weixin_30606461的博客 353

动态网页抓取全攻略:Selenium与Requests破解JS渲染与AJAX请求

动态网页抓取的核心是“先分析场景,再选择工具接口清晰→ 用Requests(高效);需模拟操作/JS渲染复杂→ 用Selenium(稳定);复杂场景→ 混合使用(Selenium处理登录,Requests抓接口)。Playwright替代Selenium:微软开发的新一代自动化工具,比Selenium更轻量、反爬友好、API更简洁;异步Requests:用aiohttp替代requests,提升AJAX接口的并发抓取效率;自动化接口分析:用mitmproxy。

专注于Python爬虫开发,分享爬虫技巧、项目实战与反爬经验,使用Scrapy、BeautifulSoup等工具,解决数据抓取难题。 1534

Android WebView setJavaScriptEnabled

WebView webView = new WebView(context);         WebSettings webSettings = webView.getSettings();         //webSettings.setJavaScriptEnabled(true);         webView.loadUrl(url);

oOshuierOo的专栏 4756

Python3网络爬虫实战-37、动态渲染页面抓取:Selenium

在前面一章我们了解了 Ajax 的分析和抓取方式,这种页面其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax 我们仍然可以借助于 Requests 或 Urllib 来实现数据的抓取。 不过 JavaScript 动态渲染的页面不止 Ajax 这一种。比如中国青年网:http://news.youth.cn/gn/,它的分页部分是由 JavaScript 生成的,并非...

Python追梦 1619

关于webview的一切

1.基本设置 mWebView.getSettings().setJavaScriptEnabled(false); 表示不支持js,如果想让java和js交互或者本身希望js完成一定的功能请把false改为true。 mWebView.getSettings().setSupportZoom(false); 设置是否支持缩放,我这里为false,默认为true。 mWebVie

jys1115的专栏 1707

构建AI+爬虫+JS逆向的系统工程:从工具集到问题解决框架

在数据获取领域,Python爬虫、JS逆向与AI技术的结合正成为解决动态网页数据采集难题的核心方法论。其原理在于模拟完整的人机交互流程:通过浏览器开发者工具分析网络请求,定位关键数据接口;利用JS逆向技术破解加密参数生成逻辑;借助AI大模型辅助代码理解、算法推测与模式识别。这套组合拳的技术价值在于将零散的工具知识点整合为可复用、可迭代的系统工程框架,显著提升复杂数据获取任务的开发效率与成功率。应用场景广泛覆盖需要登录验证、动态渲染、异步加载数据的现代Web应用,如电商价格监控、社交媒体舆情分析、金融数据聚合

weixin_34023982的博客 447

2026年浏览器自动化选型指南:Selenium、Playwright与AI Agent深度对比

浏览器自动化是软件测试、数据采集和流程自动化(RPA)领域的核心技术,其核心原理是通过程序脚本控制浏览器行为,模拟用户交互。传统方案基于WebDriver协议,而现代方案则通过更底层的浏览器调试协议实现更高效、稳定的控制。其技术价值在于提升测试效率、保障软件质量、实现业务流程自动化,广泛应用于Web应用测试、爬虫开发和RPA场景。随着技术演进,以Playwright为代表的现代工具凭借其内置智能等待和强大的网络控制能力,显著提升了开发效率和脚本稳定性。同时,结合大语言模型的AI Agent技术,为处理非结构

350

WebView使用漏洞

webview使用漏洞

qq_39431405的博客 1562

【Python】Python3网络爬虫实战-37、动态渲染页面抓取:Selenium

在前面一章我们了解了 Ajax 的分析和抓取方式,这种页面其实也是 JavaScript 动态渲染的页面的一种情形,通过直接分析 Ajax 我们仍然可以借助于 Requests 或 Urllib 来实现数据的抓取。 不过 JavaScript 动态渲染的页面不止 Ajax 这一种。比如中国青年网:http://news.youth.cn/gn/,它的分页部分是由 JavaScript 生成的,并非...

Python8年程序员教程分享 1003

Python+Selenium自动化管理Augment AI多账户:从临时邮箱到稳定工作流

Web自动化是提升操作效率、实现流程自动化的关键技术,其核心原理是通过程序模拟用户在浏览器中的真实操作。在Python生态中,Selenium作为成熟的Web自动化框架,能够精准定位和操作页面元素,结合Python强大的数据处理和任务调度能力,可以构建出稳定、可维护的自动化系统。这种技术组合在需要批量处理、多账户管理的场景下价值尤为突出,例如AI应用的多账户测试、数据采集和运营任务自动化。本文聚焦于使用Python和Selenium解决Augment AI多账户管理中的核心痛点,通过模块化设计构建了一个涵盖

weixin_30788239的博客 448

AI辅助JS逆向:Python爬虫破解加密参数实战指南

在数据采集领域,Python爬虫是获取公开信息的核心技术,而HTTP请求与响应是其基础通信原理。然而,随着反爬机制的升级,动态生成的加密参数(如签名、令牌)成为获取高价值数据的主要技术障碍,这要求开发者具备JS逆向能力以解析前端加密逻辑。传统逆向分析耗时且门槛高,但AI大模型的引入带来了范式转变,它能辅助进行代码解释、逻辑推理和代码转换,极大提升了分析效率与技术价值。通过将AI作为智能副驾驶,开发者可以系统性地处理更复杂的加密场景,例如电商价格接口的签名破解,从而拓展数据源并提升商业变现潜力。本文以AI辅助

weixin_33851177的博客 307

Selenium与Midscene.js深度对比:精准控制与AI意图驱动的浏览器自动化选择指南

浏览器自动化是提升Web应用测试、数据抓取和业务流程效率的核心技术。其基本原理是通过程序脚本模拟真实用户操作,如点击、输入和导航。传统方案依赖于对文档对象模型(DOM)元素的精准定位与控制,确保了操作的确定性和可验证性,这对于保证软件质量和自动化流程的可靠性至关重要。随着前端技术日益复杂和动态化,基于DOM定位的脚本面临维护成本高、易受页面结构变动影响的挑战。因此,融合计算机视觉(CV)与自然语言处理(NLP)的AI驱动自动化技术应运而生,它通过理解用户意图和页面视觉语义来执行任务,显著提升了脚本的健壮性和

babing2770的博客 384

AI爬虫模拟测试实战:无头浏览器选型、配置与反爬对抗

在数据采集和自动化测试领域,无头浏览器技术已成为处理现代动态网页的核心工具。其原理在于模拟真实浏览器环境,执行JavaScript并渲染页面,从而获取传统HTTP请求无法直接抓取的内容。这一技术对于确保数据采集的完整性和自动化流程的可靠性具有重要价值,尤其在电商数据监控、舆情分析等场景中不可或缺。当与AI技术结合时,无头浏览器为AI爬虫和智能体(AI Agent)提供了关键的测试沙盒,用于验证其解析准确性与行为逻辑。本文聚焦于AI驱动的爬虫模拟测试,深入探讨了如何利用无头浏览器进行环境搭建、真人行为模拟,并

weixin_34174105的博客 501

Python Selenium绕过reCAPTCHA验证码:原理、实战与伦理探讨

验证码作为区分人类与自动化程序的核心安全机制,其基本原理是通过分析用户交互行为、设备指纹和环境特征进行风险评估。reCAPTCHA作为主流解决方案,V2版本采用交互式挑战,V3版本则基于持续行为分析返回风险评分。在自动化测试和数据采集场景中,合法合规地处理验证码成为关键技术需求。通过Python和Selenium结合undetected-chromedriver等工具,可以模拟人类操作特征,优化浏览器指纹伪装和行为轨迹模拟。工程实践中需要平衡技术实现与伦理边界,本文针对reCAPTCHA V2/V3的绕过策

an4455的博客 438
上一篇: Android 之 下拉框(Spinner)的使用
下一篇: Androi系统设置Table
shareCode
博客等级 码龄15年 125粉丝 40原创
评论
成就一亿技术人!
拼手气红包6.0元
还能输入1000个字符
 
 条评论被折叠 查看
添加红包

请填写红包祝福语或标题

个

红包个数最小为10个

元

红包金额最低5元

当前余额3.43元 前往充值 >
需支付:10.00元
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付元
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值