家电维修网

 找回密码
 注册

QQ登录

只需一步,快速开始

功放维修
查看: 1137|回复: 6

技术讨论 | 看我如何破解一台自动售货机

[复制链接]

论坛管理

北网管理员

Rank: 20Rank: 20Rank: 20Rank: 20Rank: 20

帖子
2398
主题
1012
积分
188286
在线时间
2745 小时
注册时间
2013-6-10
最后登录
2018-12-9

乐于助人勋章资料贡献勋章推广活动勋章

QQ
发表于 2018-10-24 10:08 | 显示全部楼层 |阅读模式

马上注册,结交更多好友,享用更多功能,让你轻松玩转社区。

您需要 登录 才可以下载或查看,没有帐号?注册

x
听说世界上只有百分之3的人关注www.bjjdwx.com,很幸运你是其中一位

20181024_102300_003.jpg 声明:本文仅限技术讨论,严禁用于任何非法用途

毫无疑问,自动售货机是非常受欢迎的东西,我们总会从中购买获取一些小零食。早几年前,自动售货机只接受离线的硬币支付,之后,也慢慢采用了普及的NFC技术功能。如果我说起“COGES”售货机器 (英国售货机器厂商),我想肯定会勾起很多人的美好时光回忆。时光辗转,一不留神,有些事情就发生了根本性的变化,现如今,这已经是一个被网络万物互联的时代了。今天,我就来和大家分享一个,我是如何黑掉一台自动售货机,反复实现充值和购买售货机中商品的事例。

事情起因

有一天,我厌烦了深入简出的无聊生活,打算回老家晒晒太阳休息休息,临走前,我到了学校拜访一个大学教授。穿过走廊,老师提议,我们去喝杯咖啡吧,于是,我们来到了自动售货机旁。

我说:我来吧,我有硬币。
老师:等等,我可以用手机APP来支付,这样会便宜点。

可以看到,这是一台Argenta自动售货机,其APP支付方式是基于蓝牙和NFC功能的,啊,虚拟钱包就是好啊!


20181024_102300_004.jpg

此时,我心里闪过的念头 – 我能把它黑掉吗???

白帽心声:没有赏金就当做是一种鼓励吧。
灰帽心声:就当做练练手吧。
黑帽心声:来吧,伙计,我们去收拾一下那个东西,这样就很牛了!

于是乎,我就决定改天就开黑。

技术分析

某天,我把我的安卓手机设置开启了USB调试模式,然后从应用商店中下载了自动售货机APP,并把原始APP的apk文件转储到笔记本电脑中,用adb去调试分析:

# adb pull /data/app/com.sitael.vending-1/base.apk ./Argenta.apk

用apktool对它进行反编译:

# apktool d ./Argenta.apk ./Argenta

再用 jadx提取出其中的java源文件:

# jadx ./Argenta.apk

AndroidManifest.xml清单文件是每个Android程序中必须的文件,它是整个Android程序的全局描述文件,除了能声明程序中的Activities,Content Providers,Services,和Intent Receivers,还能指定应用的名称、使用的图标、包含的组件以及permissions和instrumentation(安全控制和测试)。这里,一开始,需要把AndroidManifest.xml文件中的调试属性更改为ture,之后才可在手机上进行调试,也就是往application <tag>标签中添加一行 android:debuggable=”true” 属性。

20181024_102300_005.jpg

接下来, 重建apk文件:

# apktool b ./Argenta

然后用工具keytool来创建一个新的密钥:

# keytool -genkey -v -keystore Argenta.keystore -alias Argenta -keyalg RSA -keysize 2048 -validity 10000

接着,使用该创建密钥,用jarsigner来对整个apk文件进行签名:

# jarsigner -verbose -sigalg SHA1withRSA -digestalg SHA1 -keystore Argenta.keystore Argenta.apk Argenta

再用工具zipalign来对apk程序文件进行优化

# zipalign -v 4 Argenta.apk Argenta-signed.apk

最后,就可以安装这个重建好的apk文件了。

# adb install ./Argenta-signed.apk

我在手机上安装运行了这个APP程序,并用工具logcat,通过包名对其程序日志进行过滤分析:

# adb logcat –pid=`adb shell pidof -s com.sitael.vending`

20181024_102300_006.jpg 但是,没什么收获,我打算再从其源代码中看看能有什么线索。从AndroidManifest.xml文件中,我发现了指向RushOrm的多个引用。

20181024_102300_007.jpg

所以,这里首先我找的关键字就是db_name,从这里我发现了argenta.db的影子:

20181024_102300_008.jpg

接下来,在手机中,我用工具Root Explorer继续来看看这个argenta.db,真的是存在的:

20181024_102300_009.jpg

然后,我用adb pull方式把手机中的这个文件拷贝到笔记本电脑中来分析:

# adb pull /data/data/com.sitael.vending/databases/argenta.db ./db

并尝试用SQLite的数据库浏览工具SQLiteBrowser来打开这个db文件:

20181024_102300_010.jpg

哦,显然,它是有密码保护的,打不开。

20181024_102300_011.jpg
逆向工程

在源代码中,我分析了RushAndroidConfig.java:

20181024_102300_012.jpg

从其中,我竟然发现了配置数据库的各种方法(method),但是,其中这个键值引起了我的注意:

this.encryptionKey = getDeviceId(context)

它的定义如下:

20181024_102300_013.jpg

从上图信息中可知,目标APP程序使用了手机的IMEI串号作为了上述SQLite数据库argenta.db的加密密钥,通常的手机,在键盘上输入*#06#就可得本身串号。那么,我们用手机串号来试试吧,看看能否能把数据库文件打开:


20181024_102300_014.jpg 哇,真的可以啊:

20181024_102300_015.jpg

经过一番检查,我找到了UserWallets这个表:

20181024_102300_016.jpg

并对其中的walletCredit一栏做了修改,把它从0改为了5(5欧元):

20181024_102300_017.jpg

然后,我再把这个数据库文件拷贝回手机APP中:

# adb pull ./argenta.db /data/data/com.sitael.vending/databases/argenta.db
破解验证

此时,YY一下,我的感觉就像游戏帝国时代(Age Of Empires)中的“罗宾汉”一样,可以随便拥有1000枚金币。好吧,还是先来写个小程序吧,通过这个程序,可以快捷地对目标APP数据库进行转储/恢复/篡改:


20181024_102300_018.jpg

接下来,我们就带上手机,去自动售货机那试试看吧!呵呵,竟然成功地买了一瓶矿泉水,真的可以用其中的5块钱顺利地进行消费,还能反复消费使用!


总结

从APP账户中的0元,到之后破解APP数据库后,我可以进行以下操作:

修改APP账户的金额
任意购买自动售货机中的东西
继续用余额购买
余额为0之后可重新更改余额
如此重复消费购买自动售货机中的商品

在对整个APP源代码做了大概分析之后,我发现其中的很多代码都未做混淆编码,这意味着,售货机厂商没有采取很好的措施来对用户数据和应用程序安全实行保护。

再三纠结 ,一个月后,出于白帽的心态,我还是向售货机厂商报告了这个漏洞,我也礼貌性地建议他们抛弃当前的APP架构,从头开发一个更好、更安全的程序。


看帖是修养,回帖是美德,认真回帖是对他人的尊重。发帖也是一种辛勤的劳动、付出,请在分享他人的劳动成果的同时,来一句 ‘谢谢’ 真的不会花费很多的时间,却体现出你接人待物的基本素质与涵养。

入门会员

Rank: 2

帖子
10
主题
0
积分
33
在线时间
38 小时
注册时间
2014-12-5
最后登录
2018-12-9
QQ
发表于 2018-10-27 16:37 | 显示全部楼层
然后楼主获得五千元奖励并被警方带走
回复 支持 反对

使用道具 举报

初级技工

Rank: 5Rank: 5

帖子
108
主题
0
积分
222
在线时间
123 小时
注册时间
2017-5-8
最后登录
2018-12-8
发表于 2018-10-28 10:10 | 显示全部楼层
搞软件开发的都是人才
回复 支持 反对

使用道具 举报

正式会员

Rank: 3Rank: 3

帖子
33
主题
0
积分
68
在线时间
99 小时
注册时间
2011-5-11
最后登录
2018-11-22
QQ
发表于 2018-10-29 07:41 | 显示全部楼层

搞软件开发的都是人才,可惜人才流失
回复 支持 反对

使用道具 举报

入门会员

Rank: 2

帖子
20
主题
1
积分
38
在线时间
16 小时
注册时间
2017-10-9
最后登录
2018-12-5
发表于 2018-11-6 13:33 | 显示全部楼层
搞软件开发的都是人才       把微信也破解了吧
回复 支持 反对

使用道具 举报

初级会员

Rank: 1

帖子
7
主题
1
积分
16
在线时间
9 小时
注册时间
2018-4-19
最后登录
2018-12-3
发表于 2018-11-8 15:21 | 显示全部楼层
有关部门已经开始注意了,管理员赶紧准备出境吧
11111111
回复 支持 反对

使用道具 举报

初级技工

Rank: 5Rank: 5

帖子
89
主题
3
积分
217
在线时间
133 小时
注册时间
2018-7-12
最后登录
2018-12-7
QQ
发表于 2018-11-10 13:57 | 显示全部楼层
好东西,谢谢分享。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 注册

本版积分规则

QQ|门户地图|网站地图|手机版|家电维修技术论坛 ( 蜀ICP备14030498号-12

GMT+8, 2018-12-10 02:37

Powered by Discuz! X3.4

© 2001-2017 Comsenz Inc.

快速回复 返回顶部 返回列表