民生银行直销银行手机登陆加密算法的分析

  • 引言
  • 环境的设置
  • 认证加密算法分析
  • 总结

引言

日常工作中,正好碰到针对银行类系统的安全测试工作,通过Burp抓包发现传输的信息都是一串加密的数据,因此,就针对其中一个系统进行代码分析,了解银行一般是通过何种方式来实现数据的加密,顺便巩固一下JS调试技巧。

环境的设置

1、为了模拟手机访问直销银行登陆页面,利用Chrome F12开发工具,点击左上角"toggle device toolbar",模拟手机访问直销银行主页(www.mszxyh.com)

2、设置Burp代理工具,能够捕捉到用户直销银行账号登陆时的加密字符串,初步可以判断用户输入账号密码后,是在前端对输入的信息进行算法加密。

认证加密算法分析

利用Chrome F12开发工具里面的“network”模块,本地模拟一次登录状态,并捕捉相应的通信流量。

我们可以猜想用户在网页上输入账号密码后,会在前端利用JS进行加密,然后将加密数据以POST的方式提交到认证服务器,因此,如果想要分析加密算法,需要去分析当前主页加载的所有JS文件。

F4w8pLTVHDMq3ExNFPV+GJsc9x55Zc+LIUekAsxqWzCUzZRJac/Fp3MmmnlNBna5inw1KLfcwakWp1ARdIcTAMW4GkOjkkRDul2FXmFVPfhQZbN1TexKORsPEiYPxSCOEVqlsMMTahnxZU+krTRhgdSpGCwDopaVnc+AaAl+2XAZpccY3elnAMUOWdPxx2I0noC5S63Jax6s8KhuMsx8Arx//iYQIHReQZxxuB2f59cDFozgY6HIaMsFGWGhVlDtT9g+LGQdGispdzUWESxne5cyU8+c4hjYHWOzu38IdL/jC+koy+RJe6SA17UYgRuNK+jfvnHbZzVkVmyY3TluD4TYX8RvKYXffAofPB0PeOEuakPKkcpQcB34phrE8mfWefq9ODk/YKNvWgJyfjD9zBpujmwXOb4hURd6FfAKVk4MWJuJLSybko2caUPDZVnoMHMSK9GPRM/cY7wTJRBKlDIB3tYylOzFgTMj/YwhJAHFtrhyTVRVgGqb8qSXFooquD7czpur00c=

根据加密字符,可以判断当前最后一次的加密算法是base64,因此,在JS文件中搜索“base64”关键字,在all.min.js文件中,定位到下面的功能函数:

service("crypto", function() {var f = "2KL89TM3";   //某个常量var e = CryptoJS.enc.Utf8.parse(f);   //对f这个常量做了一个变形return { DESEncrypt: function(i, g) {   var j = CryptoJS.enc.Utf8.parse(g);var h = CryptoJS.DES.encrypt(i, j, {iv: e,    //分析之后其实就是DES中的偏移量mode: CryptoJS.mode.CBC,  //DES加密模式padding: CryptoJS.pad.Pkcs7   //DES填充});return h.ciphertext.toString(CryptoJS.enc.Base64)}}

上段代码中DES算法的偏移量e的值可以直接在Chrome F12开发工具的console接口中计算出来:

DESEncrypt函数有2个参数i,g,结合CryptoJS.DES.encrypt,可以初步判断i为一串需要加密的字符串,g经过一串变形生成j,也就是DES算法的key值,那么结合“DESEncrypt”搜索关键字,定位到如下代码位置:

....
if (H && d.REQUESTENCRYPT && vx.indexOf(a, D) > -1) {var J = t.params.random;H = p.DESEncrypt(vx.toJson(H), J);F.request = {JData: H}
.....

也就是加密的原始数据 vx.toJson(H),key值未J,但是具体是啥没法确认,但是可以认为当前all.min.js文件仅仅是一个存放功能函数的文件,我们先研究到这一步。

我们从登陆主界面开始,右击查看源码,发现点击登陆按钮后,数据将被提交到doIt()函数中,搜索“doIt()”字符串,定位到login.js文件

doIt()部分代码如下:

var DeviceType = $os.type,loginUserId = hasSaveUserId && !hasChangeUserId ? userId : $scope.UserId;var formData = {"UserId": loginUserId,"Password": $scope["_Password"],   //软键盘输入的密码"RandNum": window.Channel.H5?"NA":$scope.RandNum,"_vTokenName": $scope.vTokenName,"BankId": "9999","LoginType": "E","_locale": "zh_CN","CustIdentiType": "1","ChannelId": window.ChannelId,"DeviceType": DeviceType};var staData = {"UserId": loginUserId};$scope.post2SRV("thirdEwebLoginTrans.json",formData, function(data){   //发送数据if($scope.rememberUser){   $localStorage.setItem("CMBCUserId",loginUserId);}else{$localStorage.setItem("CMBCUserId","");}            $rootScope.CIFNAME=data.userInfo.CIFNAME;User.saveUser(data);//indexFactory.init();    //清除之前保存的首页如意宝、定活宝、民生金信息//登录之后重新获取首页菜单数据,首页是我的账户不用更新首页菜单if(window.actionId!="act"){indexFactory.getIndexPageInfo(true).then(function(data){$rootScope.indexMenuList = data.indexMenuList;});}Statistics.reportClickEvent("W000101-01","登录",staData);}

我们就在var formData 处下断点,并输入账号密码,运行:



当F10单步到$scope.post2SRV函数时,从字面意思就可看出该函数时发送认证信息到服务器,因此按F11进入post2SRV函数,根据调试步入的文件名来确认是否进入all.min.js文件。

通过下方Local环境变量可以查看all.min.js文件中各个变量的赋值情况,回到之前DESEncrypt加密函数中vx.toJson(H), J 这个两个参数,来看看DES加密中的key也就是J是怎么来的,一路F10,直到J有具体的赋值。

此时J的值为“C8AD3AD7”,通过分析该值是未登录前,客户端请求get3DesRandomTrans.json文件,服务器返回的一串随机字符串,也就是DES加密的密钥是存储在服务器端,每次打开的时候,客户端主动向服务器请求DES的key值,然后利用key值在客户端对用户输入的账号密码进行加密。

由于直销银行服务器端有超时的设置,因此其中完整的一次成功的解密如下图所示:

总结

直销银行前端主要用的是DES算法加密,利用系统自身的超时设置+存储在服务器端的随机密钥在前端实现对用户输入数据的算法加密,针对用户软件盘输入的密码又有一层加密,利用JS动态调试,应该也可以分析清楚,太困了,睡觉去了。

民生银行直销银行手机登陆加密算法的分析相关推荐

  1. 直销银行:城商行展开渠道反击

    自银行诞生以来,从物理网点到网上银行再到现在的手机终端和新型网络平台,渠道的演进从没有影响其重要性.甚至,在大数据时代,渠道对于银行来说除了承担对接客户.吸引客户的作用外,还被赋予了信息搜集的作用,直 ...

  2. 新一配:看懂直销银行、互联网银行、开放银行的概念和区别

    新一配:看懂直销银行.互联网银行.开放银行的概念和区别 银行业在数字化转型过程中,出现很多新的概念,例如数字银行.直销银行.虚拟银行.互联网银行.开放银行.智慧银行.智能银行等.追其本质,这些概念的背 ...

  3. 【民生银行】直销银行的机遇与挑战

    分享一下我老师大神的人工智能教程!零基础,通俗易懂!http://blog.csdn.net/jiangjunshow 也欢迎大家转载本篇文章.分享知识,造福人民,实现我们中华民族伟大复兴! [缘由] ...

  4. 民生直销银行终端安全修炼秘籍之HMS Core两大安全能力

    在金融行业数字化转型浪潮下,传统商业银行先后推出手机银行.直销银行等移动金融客户端.作为民生银行"数字金融"的试验田,民生直销银行始终秉承"简单的银行"发展理念 ...

  5. 《2018中国直销银行白皮书》发布 银行面临“颠覆式创新”

    16日,民生银行与中国金融认证中心(CFCA)联合发布<2018中国直销银行白皮书>. 魏晞 摄 16日,民生银行与中国金融认证中心(CFCA)联合发布<2018中国直销银行白皮书& ...

  6. 银监会拟试点独立法人直销银行

    银监会拟推动独立法人直销银行试点.记者昨日从业界得到了证实-银监会近日就成立独立法人直销银行事宜,组织了中国工商银行.民生银行(600016,股吧).北京银行(601169,股吧).恒生银行.包商银行 ...

  7. 直销银行二三事之敏捷开户

    目前的直销银行以其快速和便捷的特点来吸引获客,在金融市场上依靠打快节奏来获取客户的第一道门槛就是开户流程,所以今天总结了快速开户的流程,作为直销银行系列的一个先导篇目,整体的全貌和详细的直销银行业务内 ...

  8. 开放OCR API接口助力直销银行

    开放OCR API接口助力直销银行 毋庸置疑,这是个互联网金融时代,我们也称之为"懒人经济时代".人们可以坐在电脑旁静观天下股市,也可以利用手机随时随地购买自己的产品.如此方便的获 ...

  9. 人民满意手机银行服务白皮书——服务分析篇

    易观:商业银行积极践行"金融为民",坚持"以用户为中心"的发展理念,从全客群.全服务.全渠道推动金融服务触达广大人民群众.其中,手机银行作为服务及经营主阵地,是 ...

最新文章

  1. eclipse常用插件介绍
  2. jdk1.8中接口可以写默认方法
  3. node.js Websocket消息推送---GoEasy
  4. JAVA中的toString()方法的用法
  5. arcgis风向_[ArcGIS] 空间分析(六) 追踪分析(台风路径)
  6. 计算机网络实训室建设设备,网络综合布线实训室建设方案
  7. 高中计算机课程事例,[案例教学法在高中信息技术教学中的应用] 教学案例分析100例...
  8. kali linux嗅探图片_kali linux 密码嗅探工具 Dsniff 详解
  9. 计算机怎么设置u盘拷贝,如何快速实现电脑u盘拷贝文件?
  10. Workbench中直接调用ICEM CFD进行网格划分
  11. Python之quote() unquote()使用
  12. jekyll 完整安装教程
  13. AtCoder Beginner Contest 190 E.Magical Ornament
  14. 计算机大作业说明文档,计算机大作业.doc
  15. HTML+CSS梦幻西游动画
  16. 同步下的资源互斥:停运保护(Run-Down Protection)机制
  17. 总结了一下小半辈子发现三点:
  18. 谷歌SEO排名受哪些因素的影响?(一)
  19. IntelliJ idea使用
  20. Python读取\修改word文档中的文本框内容

热门文章

  1. 如何做好体育翻译,翻译体育赛事需要注意什么事项?
  2. 一文读懂CRNN(基于图像序列识别的端到端可训练网络)
  3. 数据结构pintia_数据结构和算法(一)概述
  4. 【app扫码登录】Java app扫码登录功能实现
  5. 计算机考证可以用电子身份证吗
  6. 杨坤diss惊雷到底是什么原因
  7. telnet远程管理(思科)
  8. 【树莓派Zero入门】-第一章:前期准备
  9. 【兰陵王系列】今天给大家讲解下传奇世界开服教程
  10. 有效记忆nginx正反代理定义