有APK可视化的iapp反编译译吗

客服热线:400-995-7855
当前位置:&&&
基于APKTOOL的APK反编译方法介绍
& 13:53&&来源:apktui.com&
  今天根据自己的经验总结一下关于安卓APK包的反编译加广告赚钱的话题,下面就介绍安卓APK包反编译的流程和注意事项。
  其实APK反编译早已不是什么新鲜话题,网上关于反编译的问题也有很多内容。本文主要是作者结合自己的实际经验来归纳一下:
  1、环境搭建
  首先需要搭建JAVA环境,关于具体的搭建方法和环境变量的配置,只要会使用搜索引擎就可以在百度上找到方法,此文省略。值得注意的是选择与自己机器适配的jdk,自己的机器是32或64位的应该都知道怎么查看吧,比如Win7系统可以使用计算机-属性-系统类型来查看。另外就是在安装好JDK后的配置环境变量时如果无法成功,请注意英文状态下的空格、标点的内容不要输错。
  2、下载反编译工具
  目前反编译的工具不仅限于一种,笔者使用的是APKTOOL,请自行下载到本地解压安装。验证是否成功的方法是CMD回车,如果你的APKTOOl工具在D盘,就按这个步骤执行:CMD-敲D-回车-输入CD apktool,定位到apktool文件夹下,输入apktool如果出现以下页面就表示OK了。
  3、反编译APK
  比如在D盘apktool文件夹内有个待反编译的APK文件test.apk,就可以按这个步骤去执行反编译:定位到D盘,再用CD定位到apktool文件夹,使用apktool d命令解压apk包,即 apktool d test.apk,出现如下界面表示正在解压:
  解压时间视这个APK包的大小而定,待解压成功后会在D盘的apktool文件夹内多出了一个test的文件夹,打开后会发现有assets、res文件夹。
  4、添加广告代码
  根据不同网站提供的广告代码的SDK指导文档去修改相应的文件保存即可,不同的广告平台操作方法会不同,所以省略该内容,具体可以咨询你要添加广告的网站客服。
  5、二次打包
  添加了广告代码后,现在就可以二次打包了,同样是在CMD中执行打包命令:apktool b test(test是刚才反编译解压出来的文件夹名称),打包完成后会发现多出一个dist的文件夹,打开会发现有一个test.apk文件,这就是被添加了广告的apk文件。
  6、签名
  APK签名的方法也比较多,比如dodo APKSign工具等等,自行百度即可,操作也简单,在此省略。签名后就可以安装到安卓设备上了。
  7、发布推广
  上述工作全部都是基础工作,最重要的是尽可能地让更多的用户下载这个被反编译的APK文件,推广的方法也很多,首选是进入市场渠道,也可以参考应用推之前的这篇文章:APP推广的常规方法汇总。
  本文应用推(www.apktui.com)原创首发,任何形式的转载、改编务必注明出处。
扫一扫关注A5创业网公众号
责任编辑:a5cancan&&&/&&&作者:应用推
在近一年的时间里,内容电商可谓是火得一塌糊涂。内容电商是以互联网科技为依托,能将产品体验与文化传递给消费者,的一种场景销售模式。它最大的特点就是从以产品为中心转化成以用户为中心,围绕产品周边体验或者传递某种价值,从而达到给用户提供超脱于产品的价值。
现今许多中小商家企业都面临市场难生意难做问题,互联网电商的兴起,让不少传统商家生意越来越难做!我朋友就是典范,前段时间朋友告诉我有一家厦门优客云的网络科技公司专为企业提供到店顾客,提升订单成交量的营销公司,关键是有个无效退款的承诺,我朋友想托我去了解下这家公司的真实性
重视消费者体验,而不是对于营销传播活动的体验。华帝虽然在世界杯营销上获得了巨大的流量,但是在最后的退款环节导致活动效果毁誉参半的原因就在于忽略了消费者体验。80-90后群体对体验的
做邮件营销最看重的是什么?有的人邮件群发经常被限制发送,非常苦恼;有的人EDM邮件发送不成功,做了半天准备竟是无用功,认为发送率最为关键的;还有的人认为群发邮件不进垃圾箱才是最重要。
四年一度的世界杯,不仅是球迷的狂欢,更是企业的营销战场。有消息称,本届世界杯,中国企业约占赞助企业总数的1/2,广告支出达8.35亿美元,高居全球第一,可见越来越多的企业懂得结合时下的热点事件,宣传造势,提高自身的关注度。
Facebook持续成为交际媒体网站的冠军,成为朋友在线衔接和同享的第一位。Facebook不仅仅是一个朋友集会场所,它现已开展成为企业经过与客户互动和自我推销来推销自己的场所。上海你的课facebook群控精准引流fb公共主页同步到shopify网站。
从事营销策划的人都听说过产品概念、品类价值这些营销术语,在进行客户服务、营销方案的撰写过程中也经常会涉及到。但是面对具体的客户、不同的行业,究竟在什么情况下分别使用它们,这往往是很多营销策划人的困惑。
现代管理之父德鲁克曾表示,企业有且只有两个基本功能:营销和创新,二者产生成果和价值,其他都是成本。营销是所有企业面临的没有硝烟的战争。
7月24日,由阿里文娱智能营销平台主办的“2018智达于心·乘风大会”在中国哈尔滨顺利召开。阿里文娱智能营销平台区域渠道管理部北区总监杨海东,阿里文娱智能营销平台营销顾问部区域营销北区大区经理黄薇及本地企业代表从各自的专业领域做了精彩分享
网红产品套路是“新华视点”记者爆出的一则新闻,夸大效果,其实就是虚假宣传。今天,小小课堂网为大家带来的是《网红产品套路与网络营销通病-虚假宣传》。希望可以减少类似的事件发生。
创业好项目
阅读量怒翻一倍!不过是换了个标题
扫描二维码关注A5创业网了解最新创业资讯服务
&徐州八方网络科技有限公司&版权所有&
举报投诉邮箱:
扫一扫关注最新创业资讯点击查看大图
Android Killer绿色版是一款可视化的安卓应用逆向工具,集Apk反编译、Apk打包、Apk签名,编码互转,ADB通信(应用安装-卸载-运行-设备文件管理)等特色功能于一身,支持logcat日志输出,语法高亮,基于关键字(支持单行代码或多行代码段)项目内搜索,可自定义外部工具;吸收融汇多种工具功能与特点,打造一站式逆向工具操作体验,大大简化了安卓应用/游戏修改过程中各类繁琐工作。Android Killer绿色版主要功能:1、可视化、全自动的反编译、编译、签名;支持批量编译APK。2、以树形目录管理反编译出的Apk源码文件,浏览、打开、编辑、都可以统一在软件中实现,不同项目间可以自由切换,方便快捷。3、自动识别图像资源,并提供该类资源的快捷替换功能,方便修改这类图片资源。4、内置代码编辑器,支持包含(但不限于).samli、.xml、.html等各类格式文件的语法高亮显示,根据 smali文件格式的自动匹配相应语法;同时支持使用系统编辑器来编辑代码文件。5、内置基于文件内容的单行或多行代码关键字搜索、可显示无穷多个搜索结果以标签的形式分门别类;可指定搜索范围(整个项目或在指定的文件或文件夹中搜索)、大小写,编码类型;从此无需再借助其他工具,即可轻松的完成搜索任务。6、内嵌Unicode、UTF8、ANSI编码互转工具,方便硬编码文字的检索以及相关汉化类修改。7、内置Log等调试工具,方便应用进程、logcat输出查看等进阶操作,监测修改apk的运行状况,以助于分析和查找错误8、内置ADB功能,包括使用ADB向设备(或模拟器)安装、卸载、运行修改后的apk,进行测试,并可管理所连接设备的存储文件(包括系统以及用户文件)9、所有操作步骤、结果都会显示在日志窗口,方便查看。10、默认支持记事本、计算器等小工具,开放设置接口可根据需要自定义外部工具,满足个性化需求。Android Killer更新日志:V1.1:增加代码编辑区根据鼠标位置自动定位方法增加相关信息项的复制功能增加自定义外部工具参数环境变量增加在代码编辑区中的鼠标悬停 unicode 解码显示增加自定义签名APK功能增加插入代码附件功能,可自动复制smali代码和相关资源到目标工程中增加Android文件管理器中的 Cat 功能修复 smali 字符串解析修复开始列表排序修复JAVA SDK配置修复第一次编译APK时工程选项卡小图标和开始列表中小图标的缓存即刻显示修复APK ICON图标资源解析修复插入代码管理器重命名修复一些严重BUG,更稳定
需要运行库:
你可能感兴趣的软件
Android Multitool是一款apk文件编译反编译工具。Android Multitool中集成了反编译,编译,签名等选项,对于DIY安卓软件者是必备的工具。注意使用此工
ApkToolkit绿色版是一款安卓APK反编译工具。ApkToolkit拥有编译、反编译、签名等功能,对于经常DIY安卓软件的朋友来说,是必不可少的工具。ApkToolkit(APK反编译工具)绿色版功能:1、反编译.apk对.apk文件进行反编译。2、重建.apk根据反编译.apk得到目录重建.apk文件。3、签名.apk对.apk文件进行签名。4、优化.apk对.apk文件进行优化。5、fr
APKDB是一款APK+Dex文件反编译及回编译工具,针对Android OS系统的APK文件编译程序,直接反编译修改的工具包。APKDB集合了当今最强悍,最犀利的APK及Dex文件编译工具;
Resource Hackerr(reshacker)是一款免费软件,用于查看,修改,添加和删除 Win32 可执行文件的资源。内置了一个内部资源编译器和反编译器。Resource Hacker可以被用来:1.查看Win32可执行..
APK反编译工具箱ApkTool Box,这款工具界面简单好用!配合工具包可以轻轻松松的实现apk、dex的反编译、回编译、集成jadx,非常强大的apk转java查看器,完爆jd
Poedit从名字就能看出来,专门用做.po文件编辑的工具。Poedit内置于wxWidgets工具中,可以在所有它支持的平台上运行(通过测试的有Unix下的GTK+以及Windows)。它的目的是提供更方便的办法编辑目...
XAMPP是一个易于安装的Apache发行版,其中包含MariaDB、PHP和Perl。仅仅需要下载并启动安装程序。就这么简单。
UltraEdit-32是能够满足你一切编辑需要功能强大的文本编辑器,ultraedit可以编辑文本、十六进制、ASCII码,可以取代记事本,内建英文单字检查、C++及VB指令突显,可同时编辑多个文件...
下载吧提供一鹤软件公司发布的AAuto语言开发工具正式版,AAuto语言开发工具界面清新简洁友好,用户能在较短的时间内掌握软件的使用。AAuto语言以LAs cript脚本语言为基础并基于更为通用的C系语法打造的新一代编程语言,主要面向小型轻量快速开发应用,
YaraEditor是一款Yara引擎工作测试工具。YaraEditor能够测试Yara引擎的工作,软件带有一个现代,圆滑和组织良好的界面,包括分为两个选项卡的主窗口,即构建和相应
易语言是一个自主开发,适合国情,不同层次不同专业的人员易学易用的汉语编程语言。易语言降低了广大电脑用户编程的门槛,尤其是根本不懂英文或者英文了解很少的用户...
YaraEditor是一款Yara引擎工作测试工具。YaraEditor能够测试Yara引擎的工作,软件带有一个现代,圆滑和组织良好的界面,包括分为两个选项卡的主窗口,即构建和相应
Android Killer下载地址
1777307次下载
Eclipse 64位版(eclipse下载64位) V4.6官方版
Microsoft Visual Studio 2010旗舰版(vs2010中文旗舰版下载)官方中文版
Bloodshed Dev-C++(C++开发工具)V5.11.0中文免费版
Microsoft Visual Studio 2012旗舰版(VS2012中文版下载)官方中文版
Microsoft SQL Server 2012(sql2012下载)官方简体中文版
Microsoft Visual Studio 2008专业版(vs2008中文版下载)官方中文版
Microsoft Visual Studio 2013旗舰版(VS2013中文版下载)官方中文版
Microsoft SQL Server 2000下载(SQL2000)官方简体中文版
STEP 7 MicroWIN(PLC S7-200编程软件官方免费下载)V4.0.6.35官方版
1777307次下载
Microsoft SQL Server 2000下载(SQL2000)官方简体中文版
易语言(e语言易语言下载)V5.8官方版
Microsoft Visual Studio 2010旗舰版(vs2010中文旗舰版下载)官方中文版
Navicat for MySQL(MySQL数据库管理工具下载)32位 V11.2.15中文版
MySQL数据库(MySQL Server数据库软件下载) 5.7.18官方正式版
Microsoft Visual Studio 2012旗舰版(VS2012中文版下载)官方中文版
Bloodshed Dev-C++(C++开发工具)V5.11.0中文免费版
Microsoft Visual Studio 2013旗舰版(VS2013中文版下载)官方中文版
Microsoft Visual Studio 2008专业版(vs2008中文版下载)官方中文版
很多人都喜欢在b站哔哩哔哩上观看视频,不单是因为可以提前看到一些视频资源,B站的一些弹幕、评论的玩法也是被网友们玩坏了!下面下载吧小编带来了b站哔哩哔哩怎么使用的教程合集!希望能帮到你啦!
闲鱼二手app是淘宝官方出品的二手市场应用,淘宝二手市场官方手机客户端软件闲鱼,推荐给喜欢上闲鱼淘宝二手市场购物或买卖的机友,淘宝出品起码有一定的保障,不需要担心安全问题,二手交易嘛仁者见仁智者见智,眼睛擦亮点也是可以找到好东西的。
抖音短视频app,这里汇聚全球潮流音乐,搭配舞蹈、表演等内容形式,还有超多原创特效、滤镜、场景切换帮你一秒变大片,为你打造刷爆朋友圈的魔性短视频。脑洞有多大,舞台就有多大!好玩的人都在这儿!
日常生活中,因为各种原因我们常常丢失随身设备中的数据,怎么高效实用的恢复成了困扰许多用户的问题,今天下载吧小编为大家带来一款强大的苹果手机恢复软件,果粉们新技能还不get起来!开心手机恢复大师是一款强大的苹果数据恢复软件,操作简单,兼容Windows和Mac平台,支持iOS设备微信聊天记录恢复及短信,通讯录,备忘录,照片等删
不管是出门旅游还是出差第一件事情就是查看外当天气如何,现在许多手机的桌面天气预报软件就可以帮助你快速查看天气了,但有些手机自带的天气预报可能不能满足大家的需要,所以在这里小编为大家整理了几款功能强大且齐全的ios天气预报软件,希望里面有你喜欢的一款。
春节在外和小伙伴聚会,家里的群突然有红包抢,没看手机错过了?不用怕,有了下面这些手机抢红包神奇,再也不怕抢不到红包了!
元宵是春节后第一个寓意团圆的节日,更是中国的情人节!马上就到了2018年的元宵节了,元宵佳节,一片喜庆,小编精选了元宵必备的手机应用,希望小伙伴们能够喜欢!
现在在都市中越来越多的人喜欢到户外去运动去探险!今天下载吧小编就为大家整理推荐了几款运动必备的手机软件,有需要的小伙伴快来下载吧体验一番吧!有会安卓 app 反编译的吗?用 apktool 反编译摩拜 ofo 之类的都是失败的 - V2EX
V2EX = way to explore
V2EX 是一个关于分享和探索的地方
已注册用户请 &
有会安卓 app 反编译的吗?用 apktool 反编译摩拜 ofo 之类的都是失败的
· 293 天前 · 732 次点击
报错是这个 Exception in thread "main" b.a.a.e: resource spec: 0x
按教程改了 e2 04 01 01 前的 02 也不行。
目前尚无回复
& · & 2136 人在线 & 最高记录 3762 & · &
创意工作者们的社区
World is powered by solitude
VERSION: 3.9.8.1 · 21ms · UTC 12:10 · PVG 20:10 · LAX 05:10 · JFK 08:10? Do have faith in what you're doing.注:您的评论需要经过审核才能显示哦,请文明发言!
应用软件分类
编程工具排行
按字母检索:
本站资源均收集整理于互联网,其著作权归原作者所有,如果有侵犯您权利的资源,请来信告知,我们将及时撤销相应资源。
Copy .Com. All Rights Reserved.Android逆向之旅---反编译利器Apktool和Jadx源码分析以及错误纠正
在之前的过程中可以看到我们唯一离不开的一个神器那就是apktool了,这个工具多强大就不多说了,但是如果没有他我们没法涉及到后面的破解工作了,这个工具是开源的,也是使用语言开发的,代码相对简单,我们今天就来分析一下他的大体逻辑,注意是大体逻辑哦,因为如果要一行一行代码分析,首先觉得没必要,其次浪费时间,有了,谁看不懂呢。至于为什么要分析这个工具其实原因只有一个,就是我们在之前的反编译过程中会发现,总是有那么几个apk应用不让我们那么容易的反编译,他们就利用apktool的,对apk做了一定的混淆工作,所以我们需要通过分析源码来解决这些异常错误,从而能够对每个apk反编译都是如鱼得水。
二、破解的国际惯例
其实在之前的破解文章中,我们在拿到一个apk进行破解之前,都会干这两件事:
第一件事:用压缩软件解压apk,得到classes.dex,然后使用dex2jar+jd-gui工具查看代码逻辑
但是这里我们会发现如果想看资源文件比如Manifest.xml和res下面的一下xml文件都是乱码的,因为他们是遵循Android中的arsc文件格式,关于这个格式不了解的同学可以网上搜一下,但是关于这个文件格式我在之前的几篇文章中做了格式解析:
Android中如何解析资源文件样式其实不管是什么文件格式,都是有文件格式的说明文档的,只要按照这个说明文章去做解析即可
第二件事:使用apktool工具进行反编译apk,得到smali源码和资源文件
这里得到的是smali源码,破解了这么长时间,smali语法就不做太多的介绍了,他就是Android识别执行的指令代码,他和dex文件可以互相转化的,使用baksmali.jar和smali.jar这两个工具即可,后面会详细说到,当然这里还可以得到所有的资源文件,即arsc格式解析之后的内容,而且这个工具可以实现回编译,这个功能也是很强大的,不过后面分析源码就知道了,回编译其实是借助aapt这个强大的命令来完成的。
所以这里我们可以看到最终如果我们想要完全的分析一个apk,apktool工具是不可或缺的,他是开启破解大门的钥匙,这个工具也是在逆向领域敲门砖,而且现在很多比较可视化的破解工具,比如:apk改之理,jeb,gda等,其实这些工具核心都是使用apktool+dex2jar+jd-gui这三个工作组成的,只是后期做了一定的界面优化而已。
三、Apktool工具反编译常见的问题
上面说了apktool工具的地位和作用,下面我们再来看一下apktool工具在反编译的过程中会遇到哪些问题呢?
这里我们只看BAT这三家公司的app,我们在反编译的过程中发现了QQ和支付宝分别报了这两个错误:
1、QQ报了这个错误:
Exception in thread &main& brut.androlib.AndrolibException: Multiple res specs: attr/name
这个主要是因为QQ利用了apktool的一个漏洞,做了属性id的混淆
2、支付宝报了这个错误:
Exception in thread &main& brut.androlib.AndrolibException: Could not decode arsc file
这个错误其实是在使用apktool工具的时候报的错误最多的,这个主要是利用apktool的漏洞,修改了resource.arsc的头部信息
其实网上很多解决方案都是说apktool这个工具的版本太旧了,用最新版本,但是这里可以看一下apktool.jar的版本:
这个版本是最新的了。
其实反编译失败很简单,就是这些公司他们知道了apktool这个工具反编译那么牛逼,那肯定想办法不让你反编译成功呀,所以他们也去看apktool的源码,分析得到漏洞,然后进行apk的一些混淆,防止反编译,所以说防护和破解真的是无休止的战争,但是幸好apktool的代码也是更新的比较快的,所以会解决这些漏洞,但是我们在破解的时候遇到这些问题,不能一味的等待apktool的更新,既然是开源的,那么就直接分析源码,发现报错的地方修复即可。
四、分析Apktool源码
上面说了为什么要分析apktool的源码,下面就真正的开始分析吧
当然第一步先得到apktool的源码吧,地址:
看到有google的域名是不是瞬间感觉整个人都不好了,的确国内程序猿一般打开都是始终loading的过程,直至error,所以我们只能去万能的github上search了,找到了这个地址:,可以看到这个有很多人关注,而且代码是有人维护和更新的,所以靠谱,clone到本地。
但是他是一个gradle项目,所以咋们就给Eclipse装一个gradle插件,然后导入项目即可,这里因为apktool是Java项目,所以还是使用Eclipse比较习惯吧。但是这里又遇到一个蛋疼的地方,还是国内网络的问题,gradle下载失败,因为这里引用了一些第三方的jar
好吧,那么我们只能无奈的手动去一个一个找这些jar包,不过在这个过程中还是比较蛋疼的,就是有些jar找的很蛋疼,不过最后还是都凑齐了,没有报错了,项目结构如下:
这里Apktools这个项目是入口的项目,也是主要功能项目类,Baksmali和Smali,SmaliUtil是操作smali的工具类,BrutCommon和BrutDir,BrutUtil是一些辅助的工具类,代码简单,不做太多的解释,这里除了Apktool之外,其他工程都是一个功能库,他们直接的引用关系如下:
Baksmali依赖于:SmaliUtil
BrutDir依赖于:BrutCommon,BrutUtil
BrutUtil依赖于:BrutCommon
Smali依赖于:SmaliUtil
Apktool依赖于:Baksmali,BrutCommon,BrutDir,BrutUtil,Smali
这里直接来看看主要功能Apktools项目
第一、分析Apktool的反编译源码
首先我们知道,Java项目的入口方法肯定是main方法,搜一下找到这个Main类:
这个方法中得到参数,然后进行参数的分析和组装。继续往下看,看执行代码:
这里看到了我们经常用的一些命令参数,他们的含义这里也都可以了解到了,有一个ApkDecoder类,是反编译的核心类:
最终也是调用他的decode方法:
这里看到使用了Androlib这个核心类来做了一些操作,首先会判断需不需要解析资源文件,即arsc格式的,这里又细分了解析resource.arsc和AndroidManifest.xml这两个文件的解析,下面继续看:
这里会解析dex文件,得到smali源码,而且区分了多个dex的情况。
其实到这里我们可以发现,apktool在反编译的整个过程中核心点就三个:
解析resource.arsc文件,AndroidManifest.xml文件,dex文件
那么关于这三个文件的格式解析,一定请看这篇文章:Android中解析所有文件格式
如果看了这篇文章之后,会发现Android中的这三个文件都有各自的格式,解析也是很简单的。所以这里就不在详细介绍了具体的解析步骤了,但是这三个文件分别对应的三个经典格式图必须展示一下:
AndroidManifest.xml文件格式图:
Resource.arsc文件格式图:
Dex文件个格式图:
这三张图可算是经典中的经典,而且一定要看懂,因为不看懂这三张图的话,自己在分析apktool解析源码的时候会非常的费劲。
下面继续分析,Androidlib这个核心解析类其实就那么几个方法,下面来一一讲解:
1、decodeRawFiles
这个方法主要解析原生的文件,就是Android在编译apk的过程中不参与编译的文件目录,一般是assets和libs
2、decodeManifestWithResources
这个方法主要是解析AndroidManifest.xml的
我们知道Android在安装一个apk的时候,肯定也是需要解析AndroidManifest.xml文件的,而且Android中解析xml文件采用的是Pull解析法,所以这里直接把Android中的一些方法copy过来了。
然后在弄一个xmlPull的解析jar包即可:
3、decodeResourcesFull
这个方法用来解析resource.arsc文件的,这个文件我们知道他主要包含了所有资源文件的一种格式,Android中资源文件都有相应的类型,以及唯一的一个整型id值,那么这个文件就包含这些内容
这个方法其实用到的解析类和AndroidManifest.xml的解析类是一样的,因为他们都属于arsc格式,而且资源文件也是xml格式的,这里值得注意的是,会产生一个反编译中最关键的一个文件:public.xml,这个文件是在反编译之后的res\values\public.xml
这里可以看到,一个id字段,都有对应的类型,名称,和id值的
而这里的id值是一个整型值,8个字节;由三部分组成的:
PackageId+TypeId+EntryId
PackageId:是包的Id值,Android中如果是第三方应用的话,这个值默认就是0x7F,系统应用的话就是0x01,具体我们可以后面看aapt源码得知,他占用两个字节。
TypeId:是资源的类型Id值,一般Android中有这几个类型:attr,drawable,layout,dimen,string,style等,而且这些类型的值是从1开始逐渐递增的,而且顺序不能改变,attr=0x01,drawable=0x02....他占用两个字节。
EntryId:是在具体的类型下资源实体的id值,从0开始,依次递增,他占用四个字节。
4、decodeSourcesSmali
这个方法主要是将dex文件解析成smali源码
这里使用了SmaliDecoder的decode方法:
这里需要借助一个工具包dexlib,他是用来处理dex文件的,处理完dex文件之后,在交给baksmali这个工具类生成smali文件即可。
到这里我们可以看到上面就大致分析完了apktool在反编译的时候做的主要三件事:
解析resource.arsc,解析AndroidManifest.xml,解析dex文件
源码分析完了,下面就开始测试运行一下,这里用使用了BAT三家的主要app做实验:
这里为了运行简单,我们在入口的main方法中,去手动构造一个参数:
这里用了BAT三家的几个app测试,发现,只有qq和支付宝有问题,所以这里就直接看着两个app反编译会出现什么错误,然后来分析解决这个问题:
1、分析QQ应用反编译的问题
这里报错了,错误和我们开始使用apktool工具的时候是一样的,看看崩溃代码:
这里可以发现,使用一个Map结构存放ResResSpec格式数据的,而且key是spec的name值,那么我们知道资源id的值是唯一的,这里不可能会出现相同的name值的,是腾讯做了混淆机制,这种混淆机制只对apktool工具有效,对Android系统解析apk运行是不影响的,那么问题就好办了,我们知道了崩溃的原因,修复也就简单了,直接加一个判断,判断这个key是否存在map中,存在的话就直接返回即可:
再次运行:
看到了,过滤了重复的资源值,反编译成功了,这里因为反编译过程中会用到系统的资源id,需要需要系统资源包framework.apk参与解析工作,这里因为QQ程序包比较大,反编译时间会长点。我们可以去看看反编译之后的目录:
我们可以看看他的AndroidManifest.xml内容:
解析成功,可以正常查看了。
这里我们就解决了QQ反编译的问题了,
2、分析支付宝应用反编译的错误问题
看到了,这个错误和我们开始看到的错误是一样的,下面我们看看崩溃的地方是什么原因导致的:
这里是读取一个字符串常量池Chunk头部信息报错的,关于Chunk的头部信息可以参考这篇文章:Android中解析resource.arsc文件
StringChunk的头部信息包括这些内容:
header:标准的Chunk头部信息结构
stringCount:字符串的个数
styleCount:字符串样式的个数
flags:字符串的属性,可取值包括0x000(UTF-16),0x001(字符串经过排序)、0X100(UTF-8)和他们的组合值
stringStart:字符串内容块相对于其头部的距离
stylesStart:字符串样式块相对于其头部的距离
其中header是一个标准的Chunk头部信息:
type:是当前这个chunk的类型(两个字节)
headerSize:是当前这个chunk的头部大小(两个字节)
size:是当前这个chunk的大小(四个字节)
就是八个字节。
我们继续分析错误代码:
这里会检查已给Chunk结构的完整性,出入的StringPool值是:
看到了,这里是字符串常量池Chunk的头部信息,而且值是固定的:0x001C0001
在进入看看代码:
这里如果发现格式不正确就抛出一个异常,也就是格式不是0x001C0001的话。
那么问题差不多清楚了,这里崩溃的原因很可能是支付宝应用的resource.arsc的StringPool的Chunk的头部信息被混淆了,导致这个错误的,我们通过上面的分析知道,StringPool这个Chunk的头部标准格式是:0x001C0001,我们来看看支付宝应用的resource.arsc文件的二进制数据:
发现了,有这个值,那么为何还报错呢?到这里我们或许不知道该怎么办了,其实很简单,我们再去弄一个能够反编译的apk的resource.arsc文件看看:
擦,发现果然不一样,支付宝头部信息多了8个字节,0x,那么我们再看上面的检查Chunk头部类型数据的代码:
其实,这里可以看到,apktool其实已经做了一个头部信息的检查,但是这里只是检查0x001C0001这个正确信息之前的值只有四个字节,而且是0的情况,这里读取int整型值,四个字节,发现如果等于传递进来的possible的话即0,就继续执行这个方法,但是这里的possible值是-1了,也就是这里只会检查四个字节,但是我们分析了支付宝的resource.arsc文件,发现他是8个字节,而且还不全是0,是前四个字节是0,后四个字节是1:
所以这里检测也是失败的,抛出异常了。
好了,到这里我们就分析完了支付宝的资源文件混淆的机制了,下面我们修改就简单了,首先。我们把上面的8个字节全部改成0:
然后替换之前的resource.arsc文件,直接用压缩软件替换即可,
然后在修改上面的检测代码:
这里,修改代码,就是会做一直检测,直到遇到正确的值为止,我们修复完成之后,运行:
哈哈,不报错了,看看反编译之后的目录:
反编译也成功啦啦~~
我们通过上面的分析就知道了,现在使用apktool反编译的主要两个错误就是:
1、Exception in thread &main& brut.androlib.AndrolibException: Multiple res specs: attr/name
异常原因:通过分析源码知道,这个错误主要是因为apk做了混淆操作,导致在反编译的过程中存入了重复的id值,错误代码:
ResTypeSpec.java的addResSpec方法78行
修复:在这个方法存入map数据之前做一个判断操作即可
2、Exception in thread &main& brut.androlib.AndrolibException: Could not decode arsc file
异常原因:通过分析源码知道,这个错误主要是因为apk了做了resource.arsc头部信息的修改,导致在分析头部数据结构的时候出错,错误代码:ExtDataInput.java的skipCheckChunkTypeInt方法 73行
修复:修复resource.arsc头部数据,修改skipCheckChunkTypeInt检测方法逻辑
第二、Apktool的回编译源码分析
到这里我们就分析完了apktool的反编译功能源码,也解决了QQ和支付宝应用反编译的失败问题,下面再继续分析一下apktool的回编译功能,关于回编译功能的话,这里可以先看这篇文章:这里我们可以知道aapt命令的功能:
使用aapt命令编译资源文件
aapt package -f -m -J gen -S res -I D:/android-sdk-windows/platforms/android-16/android.jar -M AndroidManifest.xml
这里的命令参数有点多就不全部介绍了,就说明几个:
-J 后面跟着是gen目录,也就是编译之后产生的R类,存放的资源Id
-S 后面跟着是res目录,也就是需要编译的资源目录
-l 后面跟着是系统的库,因为我们在项目资源中会用到系统的一些资源文件,所以这里需要链接一下
-M 后面跟着是工程的清单文件,需要从这个文件中得到应用的包名,然后产生对应的R文件和包名。
而且,这个命令不仅可以进行编译,可以反编译,就是上面我们提到的解析AndroidManifest.xml和resource.arsc的时候,使用它可以做到的,解析dex文件可以使用dumpdex这个命令的。这些命令都是在androidsdk目录的build-tools目录下。
知道了这个编译过程,其实回编译就是按照这个步骤来的,而这里重要的就是使用aapt命令:
这里我们把命令放到了项目的framework目录下:
然后开始构造命令参数,主要需要引用系统的jar包:android.jar
这里就差不多分析完了回编译的功能,我们修改一下入口代码,添加回编译运行参数:
运行程序:
回编译成功,得到apk文件:
不过这个文件是没有签名的,需要签名,这里不继续了,不是本文的讲解的知识点了。
到这里我们就分析完了apktool工具所有的源码了,其实他的功能很简单:
1、反编译的过程中主要是解析AndroidManifest.xml,resource.arsc,dex文件
2、回编译的时候借助aapt命令完成编译操作
五、分析Jadx源码
下面继续来看反编译的另外一个神器:Jadx
这个工具也是开源的,可以直接去github上去搜索:
这个工具其实和apktool反编译的功能差不多,但是有一个特色,就是他的可视化功能,能够高效的分析apk的结构,下面来看一个例子:
看到了吧,这里感觉结构很清晰,而且是可视化的,分析起来会比较方便,感觉他是集成了apktool+jd-gui的功能,但是他和apktool相比的话,还是有点缺陷的,首先他反编译会比较耗时,这个后面说,其次是他不能修改代码,进行回编译的,这个是很蛋疼的,所以他和apktool相比较的话,还是差了点,但是他反编译还是很靠谱的,这里为什么分析它呢?其实是因为他是开源的,其次是借助了asm这个工具来生成class文件,实现Java代码的可视化。
下面就来说说asm这个工具类的用途:
这里写了一个demo来看看效果:
运行结果:
这里没有打印Hello world!的代码,但是结果却打印了,这个就是asm功能了:能够手动的构造一个class文件
这个功能,大家是否联想到了,动态代理模式,会产生一个动态代理类,而且还会生成一个Proxy.class文件,而且在JavaWeb中的Spring框架中的Cglib也是采用了这个功能来实现AOP的,他可以通过输入一个字符串来定义类,给这个类添加方法,字段等信息,然后生成类的字节码数组,可以保存成class文件,同时也可以使用ClassLoader来加载字节码数据,然后在反射调用指定的方法。
那么其实Jadx的可视化功能就是借助于这个功,同时著名的dex2jar工具也是的,可以去dex2jar工具的lib目录看看:
那么Jadx的反编译步骤是这样的:
解析dex文件=》smali源码=》解析smali指令=》借助asm生成class文件=》解析class文件得到Java源码
Apktool+Jadx源码下载:
好了,到这里我们就分析完了Apktool和jadx的源码了,我们这里主要还是分析了Apktool的源码,因为我们在反编译的过程中还是需要借助这个神器的,其实他内部没什么神秘的,就是解析三个文件,因为apktool是开源的,所以一些公司就会去找他的漏洞,然后通过这个漏洞来给自己的apk加固,增加反编译的困难,但是我们也是可以分析apktool源码的,知道了反编译的错误信息,也是可以去分析错误,然后修复错误,最终还是可以反编译成功的,所以这种资源加固来抵抗apktool的方案其实效率并没有那么高,因为只要有apktool源码,都不是问题。}

我要回帖

更多关于 反编译修改加群链接 的文章

更多推荐

版权声明:文章内容来源于网络,版权归原作者所有,如有侵权请点击这里与我们联系,我们将及时删除。

点击添加站长微信