声明:这篇文章仅限于技术讨论,严禁任何非法使用
毫无疑问,自动售货机非常受欢迎,我们总是从它们那里买零食。早在几年前,自动售货机只接受离线硬币支付,此后,它们逐渐采用了通用NFC技术。如果我谈到“coges”自动售货机(英国自动售货机制造商),我想它一定会带回许多快乐的回忆。随着时间的流逝,一些事情在没有防备的情况下发生了根本的变化。现在,这是一个互联网上所有事物相互联系的时代。今天,我将与大家分享一个例子,说明我如何关掉自动售货机,反复充电,并从自动售货机购买商品。
事情的起因
一天,我厌倦了深入生活,回到家乡在阳光下休息的无聊生活。在我离开之前,我拜访了学校的一位大学教授。穿过走廊,老师建议我们去喝杯咖啡,于是我们来到了自动售货机前。
我说:我会来的。我有硬币。老师:等等,我可以用移动应用付费,这样会更便宜。
正如你所见,这是一台阿根廷自动售货机。它的应用支付方式是基于蓝牙和NFC。啊,虚拟钱包不错!
此时,这个想法闪过我的脑海——我能把它涂黑吗
白帽子的声音:没有赏金作为鼓励。灰色帽子的声音:让我们做一只手练习。黑帽子声音:来吧,伙计,我们去收拾一下那东西,所以它是一头牛!
结果,我决定改天再变黑。
技术分析
一天,我打开Android手机设置的USB调试模式,然后从app store下载自动售货机应用程序,将原始应用程序的APK文件转储到笔记本电脑中,并通过ADB调试和分析:
# ADB Pull / Data / Application / Vending Machine - 1 / Basic APK. Argentina
使用APK工具对其进行反编译:
# apktool - d。 Argentina. / Argentina
然后,使用JADX提取Java源文件:
# jadx。 Argentina
安卓清单。XML清单文件是每个Android程序中必不可少的文件。这是整个Android程序的全局描述文件。除了在程序中声明活动、内容提供者、服务和意图接收者之外,它还可以指定应用程序的名称、使用的图标、包含的组件以及权限和检测(安全控制和测试)。在这里,首先,你需要改变Android清单中的调试属性。在你的手机上调试之前,将XML文件转换为ture,也就是说,在应用程序选项卡中添加一行Android : debug = " true "属性。
接下来,重建APK文件:
# apktool b。 / Argentina
然后使用工具键工具创建新的键:
# keytool - genkey - v -密钥库阿根廷。密钥库-别名阿根廷- keylg RSA - keystize 2048 - 10有效性10000
接下来,使用创建密钥用Jarsigner对整个APK文件进行签名:
# jarsigner - verbose - sigalsha1 and RSA - digest alsha1 - keystore Argentina, keystore Argentina, APK Argentina
然后使用ZIP ALIGN工具优化APK程序文件
# ZIP ALIGN - V4 Argentina APK Argentina Signed APK
最后,可以安装重建的APK文件。
# ADB installation. Signature of Argentina
我在手机上安装并运行了应用程序,并使用工具log cat按软件包名称过滤和分析其程序日志:
# ADB Log CAT – PID =' ADB Shell PIDOF - S Vending Machine'
然而,没有任何收益。我打算看看从它的源代码中可以找到什么线索。从安卓清单中。XML文件中,我找到了一些对Rush ORM的引用。
因此,我首先在这里寻找的关键词是db _ name,从中我发现了阿根廷的影子。数据库:
接下来,在手机里,我将继续关注这个阿根廷人。数据库与工具根资源管理器。它确实存在:
然后,我在亚行拉动模式下将这个文件从我的手机复制到我的笔记本电脑上进行分析:
# ADB pull / data / data / vending machine / database / Argentina database. / db
并尝试使用SQLite的数据库浏览工具SQLite浏览器打开此数据库文件:
哦,很明显,它有密码保护,不能打开。
逆向工程
在源代码中,我分析了rushandroidconfig . Java :
其中,我发现了各种配置数据库的方法,但是这个关键值吸引了我的注意:
这个。加密密钥= getDeviceId (上下文) )
它的定义如下:
从以上信息可以看出,目标应用程序使用手机的IMEI序列号作为阿根廷的加密密钥。数据库中的数据库。普通手机可以通过在键盘上输入* # 06 #来获取其序列号。所以,让我们用手机序列号来试试,看看我们能否打开数据库文件:
哇,真的可以啊:
检查后,我发现了用户钱包表:
钱包信用栏从0改为5欧元:
然后,我将数据库文件复制回移动应用程序:
# ADB pull. Data / Data / Data / Vending Machine / Database / Argentina Database
裂纹检验
这时,YY曾经觉得自己像帝国时代的罗宾汉,可以随意拥有1000枚金币。让我们先编写一个小程序,通过它可以快速转储/恢复/篡改目标应用程序数据库:
接下来,我们会拿着手机去自动售货机试试!哈哈,我成功地买了一瓶矿泉水。我真的可以花掉5元钱,并反复使用。
https://www.youtube.com/watch? V = labor market survey 8 _ labor market survey
摘要
从应用帐户中的0元到破解应用数据库后,我可以执行以下操作:
修改app帐户的金额以随意购买自动售货机中的任何物品,并在余额为0后继续使用余额购买自动售货机中的物品,您可以再次更改余额,以便在自动售货机中重复购买物品。
在对整个应用程序源代码进行全面分析后,我发现许多代码没有被混淆,这意味着供应商没有采取好的措施来保护用户数据和应用程序安全。
经过一个月的反复斗争,出于白帽心态,我仍然向自动售货机制造商报告了这个漏洞,我礼貌地建议他们放弃当前的应用程序架构,从头开始开发一个更好、更安全的程序。
*来源: Hack none,《云汇编》,转载请注明来自Freebuf。通信公司
领取专属 10元无门槛券
私享最新 技术干货