不久前接到公司新的任务,要求破解小米的一款系统内置软件,名字是“小米账号”,使用小米手机的小伙伴应该很熟悉了,在设置目录下的账号那里,主要使用它进行小米账号的登录操作。既然是破解,那么首先第一步还是要拿到他的Smali代码,于是博主使用Apktool去反编译它的Apk文件,文件名为:XiaomiAccount.apk。

首先来到Apk文件所在的目录下,打开命令提示符输入命令:apktool d XiaomiAccount.apk,回车键执行命令。这下操作大家都已经熟悉就不细说了,博主本以为正常情况下很快就能拿到Smali代码,结果没想到的是出现了不正常的情况,apktool竟然反编译失败,错误信息如下:

W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x100d0051
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x100d0051
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x100d0051
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x100d0051
W: Could not decode attr value, using undecoded value instead: ns=android, name=theme, value=0x100d0074
I: Regular manifest package...
I: Decoding file-resources...
W: Could not decode attr value, using undecoded value instead: ns=android, name=textColor, value=0x10070001
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0057
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0058
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0057
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0058
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0057
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0058
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0057
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0058
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0057
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0058
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0057
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
W: Could not decode attr value, using undecoded value instead: ns=android, name=textAppearance, value=0x100d0072
I: Decoding values */* XMLs...
Can't find framework resources for package of id: 16. You must install proper framework files, see project website for more info.

出现了一大串的Could not ........,心里有点发慌,赶忙去看看有没有生成一个XiaomiAccount文件夹,发现存在:

看上去有惊无险,还好还好,点进去一看顿时就坐不住了:

卧槽Smali文件夹内??反编译后的Smali代码跑哪去了?只有一个res资源文件夹啊!

这个是博主以前没有遇见过的情况,或者说以前博主没有反编译过系统应用所以没有碰见过。然后就开始网上搜找,搞了一大堆懵圈终于才把这个问题搞定。首先这个问题错误提示很明显了,注意最后一句错误提示:

Can't find framework resources for package of id: 16. You must install proper framework files, see project website for more info.

这句错误是关键,翻译一下就是: 无法找到id: 16包的框架资源。您必须安装适当的框架文件,更多信息请参见项目网站。重点:没有找到id为16的框架资源包!这下弄不懂了,id为16的框架资源包是什么鬼??别急,人家都说了,更多的信息请参考项目网站,这里的项目网站指的就是Apktool官网。既然如此,那我们还真的要去官网瞅瞅到底怎么回事,附带Apktool官网地址:Apktool官网

进入官网后向下滑动,找到Framework 模块,如图所示:

在这里就是针对框架文件的一个比较详细的解释,我们看Framework File下的两段信息就会恍然大悟了:翻译一下就是:

您可能知道,Android应用程序使用的代码和资源是在Android操作系统本身上找到的。这些被称为框架资源,Apktool依赖这些资源来正确地解码和构建apk。

每个Apktool版本在内部都包含了发布时最新的AOSP框架。这使您能够毫无问题地解码和构建大多数apk。然而,除了常规的AOSP之外,制造商还添加了自己的框架文件。要针对这些制造商apks使用apktool,必须首先安装制造商框架文件。

好了这下我们就明白了,Apktool其实在内部已经包含了常规的AOSP框架文件,所以在使用Apktool对大多数普通的Apk文件进行反编译的时候是没问题的,但是有特殊的情况就是,某些制造商还添加了自己的框架文件,那么在使用Apktool对这部分制造商的Apk文件时,就必须安装制造商的框架文件!小米就是添加了自己的框架文件,所以我们在对小米的Apk文件进行反编译的时候,就需要安装小米的框架文件,很显然,id为16的框架资源包指的就是小米自己的框架文件!真相大白~

在官方的说明中很明确,使用命令:apktool if XXX.apk 或者apktool install-framework XXX.apk  对制造商的框架文件进行安装。在下面还有一个详尽的示例:拿HTC来做的代码示例,大家看看学习一下就好。接下来解决这个问题就很简单了,既然需要安装小米的框架文件,那就安装呗,首先就是需要拿到小米的框架文件!去哪里拿?很明显就是在小米手机的系统目录里面啦~

首先需要明确一点的是,我们需要三个小米的框架文件,名字分别是:framework-res.apk,framework-ext-res.apk,miui.apk。其中,framework-res.apk框架文件位于系统目录:/system/framework/,framework-ext-res.apk框架文件位于系统目录:/system/framework/framework-ext-res/,miui.apk框架文件位于系统目录:/system/app/miui/。我们需要拿到这三个文件,最好的办法就是通过RE文件管理器,先把这三个文件复制到手机的SD卡内,然后在电脑上直接再复制到我们的操作目录下即可。这里博主把这三个框架文件放入了电脑内的D:/AndroidDecompiling文件夹下,AndroidDecompiling文件夹是自己创建的文件夹,如图所示:

然后打开命令提示符,cd进入到该目录下,首先执行第一个安装命令,安装framework-res.apk文件,命令:apktool if framework-res.apk,执行完毕如图所示:

看最后一句的信息,意思为框架被安装的路径为:C:\Users\王将\AppData\Local\Temp\1.apk,这个1.apk就表示为已经安装成功的framework-res.apk框架。

接着依次安装下面的两个框架文件:framework-ext-res.apk和miui.apk,命令分别为:apktool if framework-ext-res.apk   ,apktool if miui.apk,如图所示:

从安装信息上我们可以很清楚的看到,framework-ext-res.apk框架安装成功后为17.apk,miui.apk框架文件安装成功后为16.apk,想一下我们反编译的错误信息,就缺少的框架就是这个16.apk啊!

接下来我们还需要进行一个操作,我们需要为这个三个apk文件换一下路径,认真的小伙伴可能已经发现了,这三个安装完成的框架路径都在 C:\Users\王将\AppData\Local\Temp\,这个路径其实是很不稳定的,属于系统的临时文件存放地,所以为了以后不必要的问题和麻烦,我们需要给它转移到路径:C:\Users\王将\AppData\Local\apktool\framework文件夹下,这个地方都是存放apktool框架的地方。你可能会问,那为什么在安装的时候就不把框架安装到正确的路径下呢?非要安装到系统临时文件夹下,这个其实是一个问题,细心的小伙伴可能发现了一处报错:

WARNING: Could not write to (C:\Users\王将\AppData\Local\apktool\framework), using C:\Users\王将\AppData\Local\Temp\ instead...

意思是AppData\Local\apktool\framework文件夹无法写入,所以才转而写入了AppData\Local\Temp\临时文件夹下。首先apktool会默认把一些框架资源包安装到AppData\Local\apktool\framework目录下,但有时候限于系统文件权限无法写入,那么就会退而其次安装在临时文件夹内,那么这时候就需要你动动手挪一下框架的位置,不挪也没关系,但是为了避免日后可能出现的问题,建议你还是手动挪一下!不想这么麻烦的小伙伴也没关系,那就需要修改安装命令,apktool  的时候加上 -p 参数 指定框架资源的路径,这样也就避免了apktool 使用默认路径~

那么我们打开”此电脑“,点击进入到C盘的\Users\王将\AppData\Local\,右键点击新建文件夹,重命名为:”apktool“,如图所示:

点进入继续新建一个文件夹,重命名为:”framework“ ,然后把AppData\Local\Temp\临时文件夹下的安装生成的三个框架文件1.apk,17.apk,16.apk复制粘贴过来,最终如图所示:

这样就大功告成了,然后很自然的来到待反编译的Apk文件XiaomiAccount.apk所在目录下,执行反编译命令:apktool d XioamiAccount.apk,反编译成功如图所示:
 

在D:\AndroidDecompiling文件夹下生成一个XiaomiAccount文件夹:

点进去看看:

成功拿到了Smali代码!

好了至此我们反编译系统应用出现错误圆满解决!很多人在学习apktool其实忽略了很多部分,就比如博主,以前搞的都是软件开发商的软件,所以一直用apktool顺风顺水,再搞小米这种硬件厂商的时候,结果却出现了问题,查看官方资料才明白还有制造商框架这一说。所以在学习的过程中,不要以为掌握了一小步你就掌握了全部,而事实上你可能只掌握了冰山一角!

本片博文到此结束,如有引用请注明出处,谢谢合作!有不明白的地方请评论留言,我看到后会及时回复!

Android逆向工程:解决针对小米系统应用,使用Apktool反编译失败问题!相关推荐

  1. android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题

    android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题 参考文章: (1)android 学习 解决R.java不能自动生成问题,编译时adb.exe 找不到问题 ( ...

  2. android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测

    android安全检测工具,梆梆安全 - 防止反编译|APP安全加固|应用加固|盗版监测 https://dev.bangcle.com/ 业内专业的应用加固服务供应商 帮助数十万APP抵御破解风险, ...

  3. Android逆向工程:针对HTML5开发的App如何下手?这就带你上车!

    亲爱的小伙伴们大家好,春节已经过去了,想必小伙伴们在家玩的都很愉快吧~现在不知道大家是否已经告别了老家温暖的港湾再次投入到工作岗位中,博主反正是已经投入到岗位一星期了,不过还是有点不在状态~~新年新气 ...

  4. android 应用程序入口,小米系统 应用入口之争的另一种思路

    欢迎参与投票 你会为手机安装"小米系统"吗? 会,不用刷系统就能体验,装卸很方便. 不会,MIUI界面太丑了. 我用的是国际品牌手机,绝不装"小米系统". 我用 ...

  5. 小米android核心应用程序,小米系统 应用入口之争的另一种思路

    正常的下载之后,用户只需要为小米系统中内置的功能调用系统API接口赋予权限,然后就可以顺利体验这套高仿MIUI主题,不过安装虽容易,但是卸载却很麻烦. 由于原生系统默认小米系统应用为主题,如果不设置默 ...

  6. android uiautomator 截屏,安卓系统手机用uiautomatorviewer.bat截图失败或者用adb截的图片打不开...

    安卓系统手机用uiautomatorviewer.bat截图失败或者用adb截的图片打不开 2020年07月23日 | 萬仟网IT编程 | 我要评论 很多没有root过的手机经常在使用uiautoma ...

  7. Android N 7 【 classes.dex】反编译失败:com.googlecode.d2j.DexException: not support version.

    Microsoft Windows [版本 6.1.7601] 版权所有 (c) 2009 Microsoft Corporation.保留所有权利. D:\Android反编译工具[全]\2016\ ...

  8. ApkTool 反编译Android apk (加固逆向)

    GitHub 源码地址(其实刚开始不必关注源码的实现,我们只需知道如何完成apk的反编译) https://github.com/iBotPeaches/Apktool 我们主要需要一个jar包和 . ...

  9. 改之理修改服务器地址,【已解决】apk改之理无法反编译寻路

    [Asm] 纯文本查看 复制代码正在编译 APK,请稍等... >I: Using Apktool 2.0.0-RC3-androidkiller on Project >I: Smali ...

最新文章

  1. MVC 中的Model对象
  2. try~Catch语句中异常的处理过程
  3. When IT meets Coupon
  4. Bio->Nio->Selector->Epoll->Netty
  5. ASP存储过程参数数据类型
  6. 【转】matlab函数编译成dll供Cpp调用的方法
  7. 格雷码 matlab,基于格雷码的结构光重建代码(MATLAB版本)
  8. 税收分类编码2020_增值税开票系统你会吗?2020最新开票(金税盘版)图文教程详细版...
  9. android系统优化(19)--系统性能优化第6季
  10. android viewdraghelper 点击移动,ViewDragHelper使用时遇到的问题
  11. html连接到mysql数据库_怎么连接HTML网页到数据库?
  12. 什么样的网页适合使用框架
  13. 麦客达温德姆酒店品牌在中国首次亮相
  14. h5跳转页面很慢_【干货】小技巧实现H5跨页帧数跳转
  15. (附源码)spring boot跨境电商系统 毕业设计 211003
  16. python求音频的梅尔倒谱系数
  17. 简洁的PHP图床源码烟雨图床程序源码
  18. 软件测试app访问相机,PlayMemories Mobile应用实测,让相机成为你手机的外置摄像头...
  19. Qt学习:QtCharts绘制动态曲线,实时更新数据与坐标轴
  20. JAVA 相关 官方网站

热门文章

  1. 诚龙网刻报错_网刻工具|诚龙网维全自动PXE网刻工具V11.0下载(暂未上线)_预约_飞翔下载...
  2. 颠覆传统经营模式,区块链助力餐饮行业数字化革新
  3. java mp3 信息_Java读MP3 文件的头信息(ID3V1) — JAVA频道...
  4. PHP易支付网站源码+免签约接口
  5. 如何理解Go语言的GOROOT/GOPATH
  6. 【ns-3】添加nr(5G-LENA)模块
  7. java测试类要画UML图吗,如何从Java代码生成UML图(尤其是序列图)?
  8. 【scratchjr】开源项目开发踩坑之环境配置篇
  9. 区别 a.size()和sizeof(a)
  10. CSS/SASS框架-----Susy