第一次花这么长时间测一个漏洞(主要时间都花在写demo上了。。。),求加精

1.苏宁易购Android最新版客户端使用的是通过本地xml文件和db方式存储用户登录凭证的。

(1)/data/data/com.suning.mobile.ebuy/shared_prefs/EbuyPerferences.xml

其中的

xxxx

xxxxxxxxxxxxx(16位密文)

分别保存了用户的明文用户名与加密过后的密码

(2)/data/data/com.suning.mobile.ebuy/databases/SUNINGEBUY.DB中的table_login_history表同样保存着明文的username与加密过后的password

2.在正常情况下这样保存用户凭证问题不大,因为就算木马(读取应用私有文件需ROOT权限)获取了相关文件也不知道用户密码是多少。但经过分析,由于设计缺陷,用户密码可被逆向分析进行解密。

(1)使用JEB反编绎其APK安装包,以logonPassword为关键词进行初步查找,分析其调用的加/解密方法;

(2)当跟踪到package com.suning.mobile.ebuy.login.login.ui;下的类p(被混淆过的类名)时,发现调用了如下方法:

看包名这应该是个和登录相关的方法,先是通过getPreferencesVal方法读取了xml文件中的logonPassword值赋值给v2,然后通过getPreferencesPassword(v1, v2)来解密出明文密码进行登录,其中的v1是通过getTop5LoginHistory()方法取了登录历史中最后一次登录的用户名。

(3)继续分析getPreferencesPassword方法:

这里直接将传入的两个参数(明文用户名,加密后的密码)传递到了PBECoder类的decrypty方法,然后返回一个字符串值,看这个名字就能猜到是用来解密的~

(4)继续跟踪分析PBECoder类decrypty方法:

调用了decrypt方法,这里decrypt方法传入的三个参数值的第一参数值是PBECoder.hex2byte(arg3)是指将传入arg3(加密后的密码)从hex转换成了byte值,arg2为明文用户名,PBECoder.salt为salt值。继续跟踪调用的decrypt方法

发现这里用的是PBE算法加密,PBE——Password-based encryption(基于密码加密)。其特点在于口令由用户自己掌管,不借助任何物理媒体;采用随机数(这里我们叫做盐)杂凑多重加密等方法保证数据的安全性。如上就混杂了MD5与DES加密,是一种简便的加密方式。看着很安全?

(5)继续分析发现此其salt取值方法是直接设置为sn201209:

static {

PBECoder.salt = "sn201209".getBytes();

}

而正确的生成salt的方法是取随机值:

public static byte[] initSalt() throws Exception {

byte[] salt = new byte[8];

Random random = new Random();

random.nextBytes(salt);

return salt;

}

这样产生了一个问题,我们能获取解密要用的用户名与加密后的密码又逆向出来了salt值与其解密方法,我们完全可以自己写个相同的解密方法。

最后。。。经过三天的编写。。。demo终于出炉了(第一次写完整的android应用,改了多少报错就不说了。。。)

android判断密码字符串,逆向分析苏宁易购安卓客户端加密到解密获取明文密码(附demo验证) | WooYun...相关推荐

  1. 苏宁易购 App 客户端架构演进

    点击上方"开发者技术前线",选择"星标" 13:21 在看 真爱 作者:李呈武 | 来源:前端之巅 摘要 一个电商类 APP,对用户而言,是琳琅满目的商品,是层 ...

  2. xshell密码保存位置_如何用BITLOCKER对移动硬盘进行加密和解密移除密码的方法

    下面说下如何用BITLOCKER程序文件对移动硬盘进行加密和解密删除密码的方法. 1.右键要加密的移动硬盘,选择启用bitlocker选项打开: 2.选择使用密码解锁驱动器选项,输入密码后,点击下一步 ...

  3. Jsoup爬虫案例-苏宁易购图片下载

    Jsoup是一款 Java 的 HTML 解析器,可直接解析某个 URL 地址.HTML 文本内容.它提供了一套非常省力的 API,可通过 DOM,CSS 以及类似于 jQuery 的操作方法来取出和 ...

  4. android字符是否含有字符,android 判断某个字符串包含某个字符串的个数

    释放双眼,带上耳机,听听看~! 今天,简单讲讲如何判断某个字符串包含另一个字符串的个数. 这个很简单,也经常用到,但是有时就不知道怎么写,所以记录一下. public class StringTest ...

  5. 苏宁易购Android架构演进史

    http://www.infoq.com/cn/articles/suning-android-architecture 摘要 一个电商类APP,对用户而言,是琳琅满目的商品,是层出不穷的优惠,既是社 ...

  6. 苏宁易购高鑫跑步进场,“即时零售”或成疫情后时代增长新密码

    疫情后时代,市场存在的诸多不确定性因素,让许多线下实体零售企业面临无计可施的尴尬窘境.在如此情况之下,庆幸的是社区超连锁看到市场上,已经出现了从原来的积极拥抱私域,到积极拥抱直播电商,再到即时零售的新 ...

  7. 破解智慧零售密码 苏宁易购818引爆全民消费狂欢

    对于零售行业来说,2019年上半年的种种迹象都显示,整体市场环境并不让人乐观. 根据国家统计局数据,2019年1-6月,全国实现社会消费品零售总额19.5万亿元,同比增长8.4%,增速同比回落1个百分 ...

  8. 苏宁11.11:苏宁易购订单搜索系统架构及实现

    背景 随着苏宁易购平台规模的飞速发展,平台的订单量呈现指数级的增长,存储容量已达TB级,订单量更是到了万亿级别,尤其在双11大促流量洪峰的场景下,面临两个挑战: 1.如何存储如此巨大的数据量 2.如何 ...

  9. 分布式爬虫系统设计、实现与实战:爬取京东、苏宁易购全网手机商品数据+MySQL、HBase存储...

    http://blog.51cto.com/xpleaf/2093952 1 概述 在不用爬虫框架的情况,经过多方学习,尝试实现了一个分布式爬虫系统,并且可以将数据保存到不同地方,类似MySQL.HB ...

最新文章

  1. maven转gradle ,windows错误重定向
  2. 又一重磅嘉宾来袭 | 国际人工智能联合会理事长杨强助阵2018品友互动人工智能大会
  3. DSP集成开发工具CCS的Git工具使用说明(二)
  4. OPENCV图像创建,保存和复制
  5. Boost:assume aligned假设对齐的测试程序
  6. Linux中网络通信中 使用的结构体
  7. jQuery实现文字向上滚动
  8. c语言中 d 1是啥意思,空开D/C是什么意思?终于有人把它说清楚了!
  9. sql慢查询问题排查
  10. mysql数据库创建表时通过设置什么属性可以设置字段编号自动增加_Mysql数据库创建表样例和解释...
  11. alter table锁表,MySQL出现Waiting for table metadata lock的场景浅析及解决方案
  12. SM2数字签名算法java实现
  13. 小说题目和章节题目还没想好
  14. CGAL license说明
  15. 《微信公众号-腾讯问卷》02-如何在公众号中添加链接
  16. java opts配置_JAVA_OPTS设置
  17. [SageMath] 关于SageMath本地环境的搭建与基本使用
  18. 有甲乙丙丁四个字,取出任意三个字,打印所有可能性
  19. Spring Cloud Hystrix 全解 (1) - 总览篇
  20. Just for a stripe of blue sky!

热门文章

  1. 爬虫项目——xpath练手(1)
  2. 企业如何进行数据质量评估
  3. Selenium处理Select控件
  4. opengl计算帧率_unity如何计算帧率FPS
  5. 计算机网络联网方法实验报告,计算机网络技术》实验报告.doc
  6. 工厂利用计算机实现温度调节属于,工厂利用计算机系统实现温度调节、阀门开关,该应用属于()。A.过程控制B.数据处理C.科学计算D.C...
  7. 以下选项中表述为oracle,oracle 选择题
  8. 修改CDH的HostName和IP
  9. Java中static代码块,main函数,构造函数运行顺序
  10. [数据仓库]我理解的数据中台