欢迎来到 无奈人生 安全网 聚焦网络安全前沿资讯,精华内容,交流技术心得!

看我如何破解一台自动售货机

来源: 作者: 时间:2019-02-24 21:17 点击: 我要投稿
广告位API接口通信错误,查看德得广告获取帮助

声明:本文仅限技术讨论,严禁用于任何非法用途
毫无疑问,自动售货机是非常受欢迎的东西,我们总会从中购买获取一些小零食。早几年前,自动售货机只接受离线的硬币支付,之后,也慢慢采用了普及的NFC技术功能。如果我说起“COGES”售货机器 (英国售货机器厂商),我想肯定会勾起很多人的美好时光回忆。时光辗转,一不留神,有些事情就发生了根本性的变化,现如今,这已经是一个被网络万物互联的时代了。今天,我就来和大家分享一个,我是如何黑掉一台自动售货机,反复实现充值和购买售货机中商品的事例。
事情起因
有一天,我厌烦了深入简出的无聊生活,打算回老家晒晒太阳休息休息,临走前,我到了学校拜访一个大学教授。穿过走廊,老师提议,我们去喝杯咖啡吧,于是,我们来到了自动售货机旁。
我说:我来吧,我有硬币。
老师:等等,我可以用手机APP来支付,这样会便宜点。
可以看到,这是一台Argenta自动售货机,其APP支付方式是基于蓝牙和NFC功能的,啊,虚拟钱包就是好啊!
此时,我心里闪过的念头 – 我能把它黑掉吗???
白帽心声:没有赏金就当做是一种鼓励吧。
灰帽心声:就当做练练手吧。
黑帽心声:来吧,伙计,我们去收拾一下那个东西,这样就很牛了!
于是乎,我就决定改天就开黑。
技术分析
某天,我把我的安卓手机设置开启了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 标签中添加一行 android:debuggable=”true” 属性。

接下来, 重建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`

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

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

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

然后,我用adb pull方式把手机中的这个文件拷贝到笔记本电脑中来分析:
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./db
并尝试用SQLite的数据库浏览工具SQLiteBrowser来打开这个db文件:

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

逆向工程
在源代码中,我分析了RushAndroidConfig.java:

从其中,我竟然发现了配置数据库的各种方法(method),但是,其中这个键值引起了我的注意:
this.encryptionKey = getDeviceId(context)
它的定义如下:

[1] [2]  下一页

声明:本文仅限技术讨论,严禁用于任何非法用途
毫无疑问,自动售货机是非常受欢迎的东西,我们总会从中购买获取一些小零食。早几年前,自动售货机只接受离线的硬币支付,之后,也慢慢采用了普及的NFC技术功能。如果我说起“COGES”售货机器 (英国售货机器厂商),我想肯定会勾起很多人的美好时光回忆。时光辗转,一不留神,有些事情就发生了根本性的变化,现如今,这已经是一个被网络万物互联的时代了。今天,我就来和大家分享一个,我是如何黑掉一台自动售货机,反复实现充值和购买售货机中商品的事例。
事情起因
有一天,我厌烦了深入简出的无聊生活,打算回老家晒晒太阳休息休息,临走前,我到了学校拜访一个大学教授。穿过走廊,老师提议,我们去喝杯咖啡吧,于是,我们来到了自动售货机旁。
我说:我来吧,我有硬币。
老师:等等,我可以用手机APP来支付,这样会便宜点。
可以看到,这是一台Argenta自动售货机,其APP支付方式是基于蓝牙和NFC功能的,啊,虚拟钱包就是好啊!
此时,我心里闪过的念头 – 我能把它黑掉吗???
白帽心声:没有赏金就当做是一种鼓励吧。 本文来自无奈人生安全网
灰帽心声:就当做练练手吧。
黑帽心声:来吧,伙计,我们去收拾一下那个东西,这样就很牛了!
于是乎,我就决定改天就开黑。
技术分析
某天,我把我的安卓手机设置开启了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 标签中添加一行 android:debuggable=”true” 属性。

内容来自无奈安全网


接下来, 重建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`

但是,没什么收获,我打算再从其源代码中看看能有什么线索。从AndroidManifest.xml文件中,我发现了指向RushOrm的多个引用。
www.wnhack.com
所以,这里首先我找的关键字就是db_name,从这里我发现了argenta.db的影子:

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

然后,我用adb pull方式把手机中的这个文件拷贝到笔记本电脑中来分析:
# adb pull /data/data/com.sitael.vending/databases/argenta.db ./db
并尝试用SQLite的数据库浏览工具SQLiteBrowser来打开这个db文件:

哦,显然,它是有密码保护的,打不开。
www.wnhack.com
逆向工程
在源代码中,我分析了RushAndroidConfig.java:

从其中,我竟然发现了配置数据库的各种方法(method),但是,其中这个键值引起了我的注意:
this.encryptionKey = getDeviceId(context)
它的定义如下:
内容来自无奈安全网

[1] [2]  下一页 copyright 无奈人生

。 (责任编辑:admin)
【声明】:无奈人生安全网(http://www.wnhack.com)登载此文出于传递更多信息之目的,并不代表本站赞同其观点和对其真实性负责,仅适于网络安全技术爱好者学习研究使用,学习中请遵循国家相关法律法规。如有问题请联系我们,联系邮箱472701013@qq.com,我们会在最短的时间内进行处理。