作者: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 注: 觉得这个分析很有意思,本人没有开发过类似程序,所以不好评论。这里有没有达人能给解释一下?
分享到:
相关推荐
在2007年的许霆案与汇丰银行的案例对比中,可以看到不同国家和地区对于此类事件的法律和道德判断存在差异。汇丰银行在某次事件中选择不追究客户因ATM机故障多取的现金,而在其他情况下,如英国的朱伯特家族和Joanne ...
* 许霆信用卡取款案:许霆使用信用卡在ATM机上取款,但由于银行卡账户里的金额异常,让他连续取款5.4万元,后经警方查实,许霆先后取款171笔,合计17.5万元。 电子商务法概述教学课件汇总整本书电子讲义全套教学...
然而,近年来,随着一些社会关注案件的曝光,如许霆案,提出了刑罚对构成要件的反向制约作用,即"以刑制罪"的现象。这种观点认为,刑罚的设定可以在一定程度上影响对犯罪构成要件的理解和应用。 "以刑释罪"可被归类...
在讲授新课阶段,学生分享调查结果,分类和讨论不同类型的诱惑,然后通过具体案例(如许霆恶意取款案)探讨金钱诱惑的影响,引导学生思考如何在诱惑面前保持道德底线。 7. **教学反思**:教学过程中,教师应关注...
【项目资源】: 包含前端、后端、移动开发、操作系统、人工智能、物联网、信息化管理、数据库、硬件开发、大数据、课程资源、音视频、网站开发等各种技术项目的源码。 包括STM32、ESP8266、PHP、QT、Linux、iOS、C++、Java、python、web、C#、EDA、proteus、RTOS等项目的源码。 【项目质量】: 所有源码都经过严格测试,可以直接运行。 功能在确认正常工作后才上传。 【适用人群】: 适用于希望学习不同技术领域的小白或进阶学习者。 可作为毕设项目、课程设计、大作业、工程实训或初期项目立项。 【附加价值】: 项目具有较高的学习借鉴价值,也可直接拿来修改复刻。 对于有一定基础或热衷于研究的人来说,可以在这些基础代码上进行修改和扩展,实现其他功能。 【沟通交流】: 有任何使用上的问题,欢迎随时与博主沟通,博主会及时解答。 鼓励下载和使用,并欢迎大家互相学习,共同进步。。内容来源于网络分享,如有侵权请联系我删除。另外如果没有积分的同学需要下载,请私信我。
精选毕设项目-宅男社区
精选毕设项目-扫描条形码
配网两阶段鲁棒优化调度模型 关键词:两阶段鲁棒优化,CCG算法,储能 仿真算例采用33节点,采用matlab+yalmip+cplex编写,两阶段模型采用CCG算法求解。 模型中一阶段变量主要包括01变量和无功优化变量,核心变量主要存在于二阶段,因此在叠加二阶段变量优化过程中更容易得到最优解,所以有限次迭代即得到收敛的结果。 模型以网损为目标,包括功率平衡、网络潮流、电压电流、蓄电池出力以及无功设备出力等约束。 复现《两阶段鲁棒优化的主动配电网动态无功优化》-熊壮壮,具体内容可自行下载了解。
comsol光栅仿真 计算复合波导光栅准BIC增强古斯汉森位移
精选毕设项目-车源宝寻车广场
数字农业产业项目整体解决方案
精选毕设项目-幸运大抽奖
SRS构型七自由度冗余机械臂运动学建模全套matlab代码 代码主要功能: [1]. 基于臂角参数化方法求解机械臂在给定末端位姿和臂角下的关节角度; [2]. 求解机械臂在给定末端位姿下的有效臂角范围,有效即在该区间内机械臂关节角度不会超出关节限位; [3]. 以避关节限位为目标在有效臂角区间内进行最优臂角的选取,进而获取机械臂在给定末端位姿下的最优关节角度。 购前须知: 1. 代码均为个人手写,主要包含运动学建模全套代码; 2. 代码已经包含必要的注释; 包含原理推导文档,不包含绘图脚本以及urdf;
精选毕设项目-微信小程序天气源码
bmjebm-29-6.pdf
chromedriver-linux64_123.0.6273.0
精选毕设项目-腾讯云小程序一站式解决方案
精选毕设项目-仿饿了么
Spring Boot是Spring框架的一个模块,它简化了基于Spring应用程序的创建和部署过程。Spring Boot提供了快速启动Spring应用程序的能力,通过自动配置、微服务支持和独立运行的特性,使得开发者能够专注于业务逻辑,而不是配置细节。Spring Boot的核心思想是约定优于配置,它通过自动配置机制,根据项目中添加的依赖自动配置Spring应用。这大大减少了配置文件的编写,提高了开发效率。Spring Boot还支持嵌入式服务器,如Tomcat、Jetty和Undertow,使得开发者无需部署WAR文件到外部服务器即可运行Spring应用。 Java是一种广泛使用的高级编程语言,由Sun Microsystems公司(现为Oracle公司的一部分)在1995年首次发布。Java以其“编写一次,到处运行”(WORA)的特性而闻名,这一特性得益于Java虚拟机(JVM)的使用,它允许Java程序在任何安装了相应JVM的平台上运行,而无需重新编译。Java语言设计之初就是为了跨平台,同时具备面向对象、并发、安全和健壮性等特点。 Java语言广泛应用于企业级应用、移动应用、桌面应用、游戏开发、云计算和物联网等领域。它的语法结构清晰,易于学习和使用,同时提供了丰富的API库,支持多种编程范式,包括面向对象、命令式、函数式和并发编程。Java的强类型系统和自动内存管理减少了程序错误和内存泄漏的风险。随着Java的不断更新和发展,它已经成为一个成熟的生态系统,拥有庞大的开发者社区和持续的技术创新。Java 8引入了Lambda表达式,进一步简化了并发编程和函数式编程的实现。Java 9及以后的版本继续在模块化、性能和安全性方面进行改进,确保Java语言能够适应不断变化的技术需求和市场趋势。 MySQL是一个关系型数据库管理系统(RDBMS),它基于结构化查询语言(SQL)来管理和存储数据。MySQL由瑞典MySQL AB公司开发,并于2008年被Sun Microsystems收购,随后在2010年,Oracle公司收购了Sun Microsystems,从而获得了MySQL的所有权。MySQL以其高性能、可靠性和易用性而闻名,它提供了多种特性来满足不同规模应用程序的需求。作为一个开源解决方案,MySQL拥有一个活跃的社区,不断为其发展和改进做出贡献。它的多线程功能允许同时处理多个查询,而其优化器则可以高效地执行复杂的查询操作。 随着互联网和Web应用的快速发展,MySQL已成为许多开发者和公司的首选数据库之一。它的可扩展性和灵活性使其能够处理从小规模应用到大规模企业级应用的各种需求。通过各种存储引擎,MySQL能够适应不同的数据存储和检索需求,从而为用户提供了高度的定制性和性能优化的可能性。
精选毕设项目-体育新闻赛事数据