作者:erase 提交日期:2007-12-20 14:58:00
原始地址:
http://www.tianya.cn/New/PublicForum/Content.asp?
idWriter=5696620&Key=531752475&strItem=free&idArticle=1076923&flag=1
从银行ATM的技术角度看许霆案-银行是故意的吗?
刚看到这案子的时候除了觉得许霆很冤外,同时觉得很蹊跷,至少【公开的报道的事实】有很多经不起推敲的地方。
本人以前做过MIS系统个开发和测试,也做过软件硬件的系统集成,不过那是很久前的事情了,也没有涉及到金融系统,所以如果本文有什么问题,请达人指正。
废话少说:
先描述一下我对ATM提款所涉及到的系统硬件、软件的理解:
登陆过程:
ATM接收提款人的身份验证信息(卡+ 密码)-》身份验证信息提交银联网络-》身份验证信息数据提交卡所在银行数据服务器-》卡所在银行数据服务器验证身份信息-》验证结果提交银联网络-》验证结果提交ATM机
登陆成功后ATM机进入操作菜单界面
取款过程:
ATM机 银联网络 卡所在银行数据服务器
输入取款金额
|
验证金额数据合法性(注1)
|
【金额数据】 -》 【金额数据】 -》 【金额数据】
|
验证金额数据合法性(注2)
|
【准予操作】 《- 【准予操作】 《- 如验证数据合法,则【准予操作】
|
吐出纸币
|
生成【操作记录】 -》【操作记录】 -》 【操作记录】
保存操作记录,并从卡中扣除金额
(注1)是否为50或100倍数,是否超过每次提款上限
(注2)是否超过卡中余额,是否超过每次提款上限,是否超过日提款上限,是否超过日提款次数
需要说明的是,ATM机所在的银行并不一定是卡所属的银行,本人目前不知道ATM机所在银行和和卡所属银行究竟是哪些银行。
问题:究竟在什么时候1000变成了1?
推测1:卡所在银行的服务器在保存交易记录时1000变成了1
推测2:ATM将输入的1000变为1然后将1提交给了卡所在银行数据服务器,并且生成的【操作记录】也将吐出的1000记录成1并提交到卡所在银行服务器
推测3:银联网络进行数据处理时将1000变为1
一个小问题需要说明一下,本人认为许霆不可能是输入了1,但ATM吐出了1000,本人没用过广州商业银行的提款机,以在其他银行提款机上的使用经验,许霆如果输入的数字少于50元,应该能够得到类似提示【本提款机只能提供面值50元和100元的人民币,请输入50或100的倍数。。。】,所以许霆输入的不是1元,而应该是1000元。
如果以上的3总推测有1个是正确的,那么本人可以肯定的是,不是ATM机的质量原因或者网络的质量或者是服务器及软件的质量问题引起的,而是人为导致的结果,不管这个人为行为是不是故意的。
相信编过软件和测试过软件的人都清楚,一个隐藏很深的BUG(无论是硬或软的,通常是内存溢出),不可能将1000变为1,因为计算机是2进制的。为什么说是隐藏的很深的BUG呢,那是因为我相信银行的软件及硬件都是经过长时间大负荷地测试联调后才正式上线使用的。那么可能出现的BUG我觉得只是在非常特殊的情况下才出现,象这样连续几个小时都存在的BUG,不能不说非常不可思议。
推测1的解释:
卡所在银行的服务器在保存交易记录时1000变成了1
如果人为地将1000变成1,只需要在程序(一个存储过程)上做小小的改动。可能有人问,为什么卡所在银行的服务器上软件的改动只影响了这一台ATM机呢,那是因为这个ATM向服务器提交数据时同时会告知服务器本ATM机的ID号,在改动程序的时候只需要判断ID号就可以只在这台ATM上实现了。
本人比较相信这种推测:因为实施起来难度较小,至于为什么要这么做,那各位可以去联想。
推测2的解释:
ATM将输入的1000变为1然后将1提交给了卡所在银行数据服务器,并且生成的【操作记录】也将吐出的1000记录成1并提交到卡所在银行服务器。
本人因为没有参与过ATM的开发,所以不知道ATM软件更新的流程是什么。如果仅仅从软件代码的难度上考虑,将ATM机加上一段实现此功能的代码是容易。但是可能碰到的问题是如果卡所在银行限制了每天取款的次数,那么本推测将不成立,因为取款次数高达171次。
推测3的解释
同上,如果卡所在银行限制了每天取款的次数,那么本推测将不成立。银联网络实际上是各银行间进行数据交换的接口,这个接口会将各银行接收到的数据进行格式转换然后转发给其他银行。从技术上讲,修改进行格式转换的代码也有可能达到此目的。
匆匆写就,达人指正。
=================================================================
jolestar 注: 觉得这个分析很有意思,本人没有开发过类似程序,所以不好评论。这里有没有达人能给解释一下?
分享到:
相关推荐
Python_ChatGLM3 series Open Bilingual Chat LLMs 开源双语对话语言模型
附件1:1名男大学生的一日食谱.xlsx
用“假定成功”思路做爆品
STC89C51单片机读取DS18B20的64位序列码并显示在1602液晶上KEIL工程文件+开发板硬件原理图 /*读取DS18B20的64位序列码并显示在1602液晶上,如果读取正确结果,则在 液晶第一行显示DS18B20 OK,第二行显示序列码,如果读取失败,则在液晶上 显示DS18B20 ERR0R PLEASE CHECK ,用户可通过更改18B20接口自己外接。 */ #include <reg51.h> #include <intrins.h> #define uchar unsigned char #define uint unsigned int sbit DQ = P2^2; //定义DS18B20端口DQ sbit BEEP=P2^3 ; //蜂鸣器驱动线 bit presence ; sbit LCD_RS = P3^5; sbit LCD_RW = P3^6; sbit LCD_EN = P3^4; uchar code cdis1[ ] = {" DS18B20 OK "}; uchar code c
实验五 进程间通信.docx
Python_使用oobabooga web的自托管github副驾驶指南
【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码.zip【图像识别】基于计算机视觉实现自动报靶系统(重弹孔)含Matlab源码_
JLink-Windows-V700
对象检测-使用-yolov5 这是一个基于yolov5算法检测图像中多个物体的模型
企业低代码:业务加速和应用程序现代化的杠杆-2024.pdf
随着科学技术的进步,计算机行业的迅速发展,大大提高人们的工作效率。计算机信息处理系统的引进已彻底改变了许多系统的经营管理。恒鑫租赁站长期大量出租各型钢管、扣件、塔吊等建筑施工设备。 本系统为恒鑫租赁站提供了一个方便快捷的物资管理系统,方便出租物资的管理。系统功能主要包括:用户管理,包括管理员信息查看、管理员密码修改;正常订单管理:包括新增正常订单、修改有误订单、删除错误订单;资金结算管理:费用统计;材料租赁管理:包括订单出租查询、器材回收管理、日租金管理、仓库库存管理。 本系统开发工具采用Myeclipse,数据库设计采用MySQL数据库,开发模式采用JSP为视图层的MVC设计模式。系统界面友好、美观,系统程序冗余度度低,系统具有较强的可扩展性和可维护性。
Python_RunWhen Local为Kubernetes环境提供了定制的故障排除备忘单
Python_尝试PyScript
Python_GitHub安全实验室计划提供一个内部学习体验,让学习者保护有意易受攻击的代码
STC15F2K60S2单片机+FT232RL+TLC5615(DA)+TLC0832(AD)+LCD12864屏开发板AD设计硬件(原理图+PCB)文件,硬件采用2层板设计,大小为142*100mm,Altium软件设计,包括完整地原理图及PCB文件,可供学习及设计参考。
Python_社区支持的增压版无纸化扫描索引和存档您的所有物理文档
Python_基于动作扩散的扩散策略视觉运动策略学习
Python_特定于计算机视觉的数据集、转换和模型
CAN总线学习资料总结CAN总线学习资料总结CAN总线学习资料总结CAN总线学习资料总结
本项目是基于Android的JTCharIndexViewDemo通讯录音序列表设计源码,包含48个文件,其中包括17个XML文件、10个PNG文件、4个Gradle文件、3个Gitignore文件、2个PRO文件、2个Java文件、2个Kotlin文件、2个Properties文件和1个SER文件。此外,还包括1个GIF文件。这个项目是一个超轻量级的Android通讯录音序列表,旨在通过Java和Kotlin技术栈实现,为用户提供一个高效、便捷的通讯录音序列表体验。