元芳科普一个加固apk文件的破解之路

刷单诈骗中下载app是诈骗分子的惯用套路,当破案线索仅一个app时我们该如何开展工作呢?app可以为我提供哪些线索?

1

手机应用分析

办案过程往往很容易获得犯罪工具,例如受害人提供的某个诈骗软件,但是对其进行取证,找到证据链条却是困难重重;当我们对app进行侦查研究时,不能仅仅局限于apk本身,可以结合静态分析和动态分析。

2

APK静态分析

APK(Androidapplicationpackage),Android应用程序包,是一个标准的ZIP文件,即1.apk==1.zip。

获取apk的方式

1.通过下载链接下载apk文件;

3.执行adb命令获取apk安装包;

第一步:下载并安装ADB

第二步:打开命令窗口执行adb命令

确定adb的安装位置

如果adb安装在D盘,需要进入到D盘执行命令,如下命令框输入d:

执行查询应用列表的命令

查看是否有root权限:adbshell

查看所有应用列表:adbshellpmlistpackages

查看系统应用列表:adbshellpmlistpackages-s

查看点三方应用列表:adbshellpmlistpackages-3:

结果示例

执行查询apk存储路径

根据包名找出apk在内部存储空间的路径:adbshellpmpathcom.taobao.idlefish(你需要查询的包名)

执行导出命令

使用adbpull命令将apk文件导出:

adbpull

/data/app/com.taobao.idlefish-1/com.taobao.idlefish(你需要导出的apk文件的路径)

静态分析工具

基础信息

接入SDK信息

域名/IP信息

虚拟身份信息

签名信息

应用权限

apk反编译

当然除了无糖浏览器自带的工具可以反编译,还可以使用其他工具或提取方式例如:

使用工具

1.apktool(获取资源文件):

使用apktool工具查看apk的xml文件、AndroidManifest.xml和图片等;

2.dex2jar(源码文件获取):

classes.dex转换成jar包;

3.jd-gui(源码查看):

查看APK中classes.dex转化成出的jar文件;

其他方式

1)解压:将后缀apk改成zip文件,解压之后找到【AndroidManifest.xml】文件,此时该文件为二进制文件,我们可以准备一个Java包,使用这个也可以将.xml文件解析成明文。

apk分析

APK的组成有Dex文件,资源,资源表和签名摘要信息等四部分组成,这四部分是不可或缺的,不然任何一个OS都无法正常的运行你带Activity的Android应用。

META-INF文件夹

用于保存App的签名和校验信息,以保证程序的完整性。当生成APK包时,系统会对包中的所有内容做一次校验,然后将结果保存在这里。而手机在安装这一App时还会对内容再做一次校验,并和META-INF中的值进行比较,以避免APK被恶意篡改。

res文件夹

存放我们各种资源文件的地方,有图片,字符串,动画,音频等,还有各种形式的XML文件

Androidmanifest.xml文件

·文件结构

·元素

包名:package也代表着唯一的applicationID,用来发布应用。

·permission>元素:android限定了系统资源的使用,想网络设备、SD卡、录音设备等,如果希望应用去使用任何系统资源,都必须申请android的权限,这就是的作用。

格式:

·元素:此元素描述了应用的配置。这是一个必备的元素,它包含了很多子元素来描述应用的组件,它的属性影响到所有的子组件。许多属性(例如icon、label、permission、process、taskAffinity和allowTaskReparenting)都可以设置成默认值。

·元素:指明这个activity可以以什么样的意图(intent)启动

·uses-sdk描述应用所需的版本

·SDK配置信息:常见的SDK大多都会在该文件中写入配置信息,如APPID,APPSECERT等信息

dex文件

Android系统的可执行文件,包含应用程序的全部操作指令以及运行时数据;

在进行apk分析时,有时需要分析数据包,可是有些数据包已经被加了防护,例如修改了某个校验参数,导致该apk不能通过互联网工具进行解析,但是可以正常在手机安装打开,此时我们需要对apk文件进行手动分析,找到对抗点然后修复文件。

3

某APK文件的

AndroidManifest.xml

加固案例

案例背景

元芳近期在整理案件时,发现一个比较经典的案例,案件信息采集如下:

元芳发现无糖浏览器的手机应用分析系统无法正常解析该APK文件,也无法使用apktool进行正常的分析工作,AndroidManifest.xml无法被解出,报错如下:

进行了加固处理,首先使用apktool导出AndroidManifest.xml,加上-r参数

在test目录中,可以找到AndroidManifest.xml文件,

加固分析

使用010editor查看文件

1.使用010editor

打开AndroidManifest.xml文件

2.打开模板文件AndroidManifest.bt,

opentemplate-->选择第5步下载的bt文件。

3.运行模板文件

4.运行结果如下

使用AXMLPrinter2排查错误

为了进一步分析AndroidManifest.xml是哪里出了问题,下载AXMLPrinter2.jar对AndroidManifest.xml文件进行分析,下载文件解压备用

1.使用AXMLPrinter2打开

2.发现报错如下

3.这个报错的意思是程序希望读取到的是0x80003,结果却读取到一个0x80000,0x080003即080003,AndroidManifest.xml是小端模式,所以在文件里存储的应该是030008,而03000800是一个正常的AndroidManifest.xml的magicnumber(用来标记这个文件是一个AndroidManifest.xml的数字)。

所以,通过这个报错,我们可以知道目标xml文件,将magicnumber修改成了AXMLPrinter2不认识的00000800,正确的应该是03000800。如下图所示:

恶意的xml文件

正常的xml文件

当我们遇到这种恶意修改参数时,我们可以进行三个修复步骤:

·修复1:使用010editor将magicnumber改为正常的03000800

修复后再次运行AXMLPrinter2,发现依然报错。

NegativeArraySizeException,这个错误应该是指创建数组时,数组的大小使用了负数。说明目标xml可能还修改了其它位置,可以肉眼对比以下恶意的xml和正常的xml文件,是否还有不同。

stylePoolOffset被修改

简洁界面展示模式,可方便用户快速的进行APK文件上传和最近分析文件记录的查看。

·修复2:使用010editor将scStylePoolOffset修复为00000000

修复后,再次运行AXMLPrinter2,报出新的错误,说明上一个错误,正是由于scStylePoolOffset引起。

编写脚本解析STRINGCHUNK

再修复以上两处后,发现依然无法正常解析,但是AXMLPrinter2的报错信息不明确,已经无法继续进行错误排查,为了更好的排查问题,我们使用nodejs自行编写脚本,尝试对AndroidManifest.xml里的字符串部分进行解析

·STRINGCHUNK解析说明

例如:我们想知道第一个字符串是什么?

1.从scStringOffsets[0],可以得到第一个字符串的相对位置(偏移),是0

2.那么第一个字符串的真实位置为基准位置(scStringPoolOffset)相对位置=13920。

3.由于还有一个文件头(8个长度),所以这个字符串在整个文件里的位置=真实位置头长度=13928=1400(16进制=0x578)

4.所以我们到文件的0x578处,可以查看对应的字符串。

STRINGCHUNK是用来存放androidmanifest.xml里所有用到的字符串的一块区域,紧跟在header后面。

自行写编写脚本如下:

在解析stringchunk时发生错误,报错如下,说明在stringchunk部分存在问题:

首先,我们根据stringchunk的scStringCount显示,一共有2901个字符串(string)

但是使用js代码,读取索引等于341号的字符串时发生错误。使用010Editor查看索引等于341号的字符串位置。

可以看到这个字符串的位置位于文件的第7602181个偏移处,而整个文件的长度都只有10W字符长度,说明从341号索引开始的字符串,应该是无效的,也就是被恶意插入的。

所以可以推测出,实际字符串的个数,应该只有341个(索引0->索引340)。

修复3:将scStringCount修改为341

修改完成后,重新运行模板(快捷键:F5)!

运行模板完成后,再次查看scStringOffset,可以看到,索引号最多到340了

使用编辑器修复xml

经过这3个修复之后,再次运行AXMLPrinter2,可以发现,不报错了,能够正常运行了,但是会输出一堆非预期的字符,将输出结果保存下来,

使用编辑器(例如vscode)打开result.txt,然后切换为GBK编码,结果如下图所示:

吃吗小伙子。。。。。吃!!!

通过查看以上result.txt,可以知道这里实际上是将xml里的namespace名称(xmlns:),改成了一个超长的字符串,让xml看起来不可读。通常情况下,xmlns=android,那么解决方法也简单,我们只需要将xml里的这些“恶意”字符串全部替换为正常的android即可:

使用vscode编辑result.txt(编码选择GBK)进行正则替换:

最后可以看到xml回归正常:

4

无糖浏览器下载方式

//

无糖浏览器-您身边的办案助手。

下载成功后,点击无糖浏览器的程序即可启动,双击后点击“接受”按钮,再点击“安装”即可成功安装。

THE END
1.下载的手机APP安装时一直提示解析包出现错误当您在安装手机应用程序时遇到解析包错误时,通常是由于应用程序文件损坏或不完整导致的。这种情况下,您https://ask.zol.com.cn/x/21083686.html
2.app下载安装提示“安装包解析失败”问题简述: 本人Android应用开发者,在对本公司App进行在线升级安装时,提示“安装包解析失败”(直接点击下载下来的安装包能安装,所以能确认目标文件为有效的APK)。使用的是通用API。其他测试机型如华为,三星8.0均可正常弹出安装页面。 但是在使用一加5(刷到8.0 H2os),就提示这个错误,重现率100%。具体的错误原因为: https://bbs.oneplus.com/thread/3960453
3.手机解析包错误怎么恢复安装常见问题手机解析包错误恢复安装指南:1. 检查安装包完整性;2. 清除缓存和数据;3. 重新安装 google play 服务;4. 修改日期和时间;5. 检查存储空间;6. 重置手机(可选);7. 联系支持。 手机解析包错误修复指南 问题:手机解析包错误如何恢复安装? 回答: 1. 检查文件完整性: https://m.php.cn/faq/858448.html
4.帕斯卡契约OPPO手机安装失败怎么办?官方解决方法[图]● 安装过程需要较大的解压空间,请确保您的手机有足够的存储空间。 2) 安装时提示“解析错误” ● 可尝试重新下载安装包。 ● 请尝试升级手机固件。 ● OPPO部分手机可能无法解析超过2G的安装包,导致无法安装。后续官方会推出较小的安装包。 3) 开场动画无法长按跳过 https://www.18183.com/pskqy/202006/2877883.html
5.MIUI12.2.7.0版本更新APP安装时出现解析包错误有没有还在用MIUI备用机的 08:25· Xiaomi 8 SE 0 赞 小米爱好者h 搞笑哦状态良好if覅 12-03· Xiaomi 14 0 赞 雅表俗内 前段时间,小米不是开了个数字化大会嘛。我想到,要是小米能搞个类似matlab的程序那该多好,好像有个国内大学生大佬尝试手搓matlab程序,但是遇到一个很大的困难,好像是实测数据不够,https://web.vip.miui.com/page/info/mio/mio/detail?app_version=dev.20051&postId=24153221
6.请教:为什么android签名后,放到手机上装会显示解析软件包时出现问题请教:为什么android签名后,放到手机上装会显示解析软件包时出现问题给本帖投票 103 1 打赏 全部评论 甜tianquan 发重了,这个我结了 2011-01-17 赞 ——到底了——android 电视安装apk文件损坏,安装电视软件时提示解析包出现问题怎么破? 安装apk解析包时出现错误怎么办 相信许多使用Android智能手机的用户都会或https://bbs.csdn.net/wap/topics/360008715
7.android11安装apk时出现解析错误腾讯云开发者社区Android 11安装APK时出现解析错误是由于以下原因之一导致的: APK文件损坏:解析错误可能是由于APK文件本身损坏或下载不完整导致的。解决方法是重新下载APK文件,并确保下载过程完整。 兼容性问题:Android 11引入了一些新的安全机制和限制,可能导致某些APK文件在安装时出现解析错误。解决方法是确保APK文件是针对Android 11进行https://cloud.tencent.com/developer/information/android%2011%E5%AE%89%E8%A3%85apk%E6%97%B6%E5%87%BA%E7%8E%B0%E8%A7%A3%E6%9E%90%E9%94%99%E8%AF%AF-ask
8.影视仓安装的时候提供解析包错误,怎么回事,已使用ADB模式了,还会我是用这种方法的,还是提示错误,如下,麻烦能解读一下吗 如果开启了abd模式,正常是能安装的,或者多https://www.52pojie.cn/thread-1876536-1-1.html
9.小米运动解析包时出现问题小米运动解析包错误是怎么回事小米运动app是小米官方推出的一款健康监测软件,需要连接小米手机或小米手环才能运作。如果你在下载小米运动app时,出现解析包错误该怎么办呢?看看本文提供的解决方案是否能帮你解决问题吧! 小米运动app解析错误怎么回事? 1、安卓4.4以上支持蓝牙4.0的手机才可以使用小米手环,系统版本过低时无法安装小米运动App的。 https://m.qqtn.com/mipc/137240.html
10.光环助手游戏解析包错误解决方法光环助手游戏包损坏错误怎么办光环助手下游戏解析包错误怎么办?程序的压缩包在下载过程中被损坏,造成下载到的APK安装包被损坏,从而无法正常安装,下面小编就为玩家带来光环助手游戏解析包错误解决方法,一起来看看吧。 光环助手游戏解析包错误解决方法 1.可能是程序的压缩包在下载过程中被损坏,造成下载到的APK安装包被损坏,从而无法正常安装。 https://m.ali213.net/news/gl1904/324065.html
11.解析程序包时出现错误解决问题描述:最近在做程序更新时,已经从服务器下载了最新版app到本手机上,但就是安装的时候始终报“解析程序包时出现错误”的提示,并且直接在手机中打开apk可以安装成功。 解决: 原来安装apk的路径在sdcard下,改成String fileDir = Environment.getExternalStorageDirectory() + "/xxx/"; 然后再次尝试安装就不会出现https://www.jianshu.com/p/3655a8045473
12.错误码分析服务错误码 数据导出错误码 状态码 错误码 值 描述 解决方法 400 invalidParameter 10020 非法参数。 请修改填写错误的参数值。 400 tooF……欲了解更多信息欢迎访问华为HarmonyOS开发者官网https://developer.huawei.com/consumer/cn/doc/development/HMSCore-Guides/error-code-0000001050991987
13.hao123hao123是汇集全网优质网址及资源的中文上网导航。及时收录影视、音乐、小说、游戏等分类的网址和内容,让您的网络生活更简单精彩。上网,从hao123开始。https://www.hao123.com/
14.支付宝支付宝,全球领先的独立第三方支付平台,致力于为广大用户提供安全快速的电子支付/网上支付/安全支付/手机支付体验,及转账收款/水电煤缴费/信用卡还款/AA收款等生活服务应用。https://www.alipay.com/
15.androidapp解析出错安卓解析程序错误android app解析出错 安卓解析程序错误 安卓手机安装软件是普通人都会做的事情,不过这也是有可能会出现问题的,比如安卓手机安装软件失败了,这要怎么解决。安卓手机安装软件失败是一些新手用户可能会遇到的问题,虽然有很多方面的原因,不过大体上分为软件和硬件2种情况,下面就整理一些解决方法,希望对有需要的用户有所帮助https://blog.51cto.com/u_16099236/6673422
16.Microsoft——AI云生产力计算游戏和应用浏览适合家庭或企业的 Microsoft 产品、服务和支持。购买 Microsoft 365、Copilot、Teams、Xbox、Windows、Azure、Surface 等产品/服务。http://www.microsoft.com/