APP密码算法通用分析方法

2019/10/29 15:02
阅读数 49

No.1

声明

由于传播、利用此文所提供的信息而造成的任何直接或者间接的后果及损失,均由使用者本人负责,雷神众测以及文章作者不为此承担任何责任。

雷神众测拥有对此文章的修改和解释权。如欲转载或传播此文章,必须保证此文章的完整性,包括版权声明等全部内容。未经雷神众测允许,不得任意修改或者增减此文章内容,不得以任何方式将其用于商业目的。


No.2

前言

    在APP测试过程经常会遇到报文被加密的情况,之前在大部分的情况,可能需要进行脱壳,逐行分析代码,获取算法,编写解密的程序(工具)—— 适用于任何情况下的万能解法。

    因为过程实在是有些繁琐,文章里是我尝试分析app加密算法的一些取巧的方式,可以进行尝试。


No.3

密码算法介绍

1. 密码算法强度依赖

    密码算法源头可以追溯到古典算法。一般而言古典算法依赖于两种方式——移位和代换混淆明文,从而无法破译。但是对于大多数的古典密码而言,其加密强度依赖于算法保密性以及密钥保密。

    但是对于现代密码学而言,加密强度完全依赖于密钥(算法在某种程度上一定会被获取,而设计好的算法存在一定的难度)。

    对于我想要做的app算法分析而言,我在大部分的情况是在寻找密钥。找到密钥,套用几个现代密码学算法,完成分析。


2. 涉及概念

我在实际的接触过程中,大部分的人其实对于密码涉及到的相关概念其实认识的很模糊,经常统称为密码算法,这里进行简单的介绍


1.Hash算法(哈希算法)

    常见的包括md5、sha1、sm3。这类算法主要对信息进行摘要,从摘要两个字应该能够意识到进行这种算法获取的数据无法还原成原来的信息,因为只保存了部分数据。

    那么我们常说的md5解密、sha1解密,又是什么呢?其实这是在说明一类情况 Hash碰撞,—— A通过hash函数生成了C,B也通过hash函数生成了C,这样一种情况。由于hash字符串的空间几乎无限大,那么我们可以理解A与B是相同的内容,所以说C通过md5解密生成了B 。我们通过提交B来代替A——对于接受对象而言的输出都是C所以是一致的(当然实际上A,B也可以不同,具体可以了解下王小云破解md5)


2.编码算法

    这一类就比较容易和密码算法混淆了,这类算法主要是为了解决传输或者转换过程中可能出现的错乱。一般而言没有密钥这样的说法,就是规定了一套编码和解码的算法,常见算法有base64、十六进制字符串


3.密码算法

    其实到现在为止,密码算法一般指的就是现代密码学——几类对称密码和非对称密码。

    两者的区别就在于,加密和解密的密钥是否能够互相还原。


4.分组算法(block cipher mode)

    密码算法都是针对具体的块进行加密,多个块之间怎么连接,就是分组算法

    例如ECB、CBC等,具体可以去wiki 搜索 block cipher mode


5.填充模式

    长度不够的块,怎么填充。


No.4

分析原理

    为什么我们在理论上一定能够突破密码算法?我作为客户端的角色进行操作,理论上我能控制客户端所有的内容。数据在客户端完成加密、发送。 只要客户端能够提供加密的能力,我理论上也能。

    既然我们不想要直接分析应用app的源代码,那么我们能够工程化控制的就是执行环境,就说下图架构中除了application的所有内容

    众所周知,越到下面难度越高,数据被处理和变化也越多。

    当然这里比较好的消息是,大部分应用调用了java扩展包中的加密算法。那我们是不是能够通过hook相关的函数来获取密码算法的调用情况呢?


No.5

工具准备

Xposed

CryptoFucker  ,可以稍微改一改代码更加好用。

inspeckage

lxhToolHTTPDecrypt


No.6

分析过程

1. inspeckage

使用inspeckage加载app,查看调用情况以及一些其他属性

点到crypto模块下,可以看到使用加密算法的情况

+ 密钥是:B9DC7BFD361F8348 IV: nmeug.f9/Om+L823 算法是Java 默认的AES

从列表里也可以看到,密码没有打印调用栈,有时候可能不清楚哪个数据包是正确的(SDK、本地数据等等都可能调用密码算法)


2. CryptoFucker

    通过hook,输出到ydsec文件夹下,把应用包名作为文件名

    运行后,可以查看相关的信息,定位调用栈(后续可以修改相关代码)


3. 总结

其他类似工具都自己去尝试吧,上述工具都是github上的,可以根据自己的需要去修订一个合适的版本。


常见的算法组合


AES/DES

    仅仅采用AES,密钥可能通过简单的编码或者置换存放在数据包中。

    硬编码在应用当中,这类情况用文中的方式较容易解决。


RSA + AES

     通过RSA加密AES密钥,与客户端进行协商,或者保存在数据包中。


添加MAC

    MAC(消息认证码),数据包的hash值作为数据包一部分。一般hash算法采用md5或者sha-1


No.7

加解密

知道相关密钥信息和IV等信息,就按照提前准备好的密码工具进行加解密即可


No.8

招聘启事

安全招聘
————————

公司:安恒信息
岗位:Web安全 安全研究员
部门:安服战略支援部
薪资:13-30K
工作年限:1年+
工作地点:杭州(总部),广州
岗位剩余编制:3人
工作环境:一座大厦,健身场所,医师,帅哥,美女,高级食堂…

【岗位职责】
1.定期面向部门、全公司技术分享;
2.前沿攻防技术研究、跟踪国内外安全领域的安全动态、漏洞披露并落地沉淀;
3.负责完成部门渗透测试、红蓝对抗业务;
4.负责自动化平台建设
5.负责针对常见WAF产品规则进行测试并落地bypass方案

【岗位要求】
1.至少1年安全领域工作经验;
2.熟悉HTTP协议相关技术
3.拥有大型产品、CMS、厂商漏洞挖掘案例;
4.熟练掌握php、java、asp.net代码审计基础(一种或多种)
5.精通Web Fuzz模糊测试漏洞挖掘技术
6.精通OWASP TOP 10安全漏洞原理并熟悉漏洞利用方法
7.有过独立分析漏洞的经验,熟悉各种Web调试技巧
8.熟悉常见编程语言中的至少一种(Asp.net、Python、php、java)

【加分项】
1.具备良好的英语文档阅读能力;
2.曾参加过技术沙龙担任嘉宾进行技术分享;
3.具有CISSP、CISA、CSSLP、ISO27001、ITIL、PMP、COBIT、Security+、CISP、OSCP等安全相关资质者;
4.具有大型SRC漏洞提交经验、获得年度表彰、大型CTF夺得名次者;
5.开发过安全相关的开源项目;
6.具备良好的人际沟通、协调能力、分析和解决问题的能力者优先;
7.个人技术博客;
8.在优质社区投稿过文章;


岗位:安全红队武器自动化攻城狮
薪资:13-30K
工作年限:2年+
工作地点:杭州(总部)

【岗位职责】
1.负责红蓝对抗中的武器化落地与研究;
2.平台化建设;
3.安全研究落地。

【岗位要求】
1.熟练使用Python、java、c/c++等至少一门语言作为主要开发语言;
2.熟练使用Django、flask 等常用web开发框架、以及熟练使用mysql、mongoDB、redis等数据存储方案;
3:熟悉域安全以及内网横向渗透、常见web等漏洞原理;
4.对安全技术有浓厚的兴趣及热情,有主观研究和学习的动力;
5.具备正向价值观、良好的团队协作能力和较强的问题解决能力,善于沟通、乐于分享。

【加分项】
1.有高并发tcp服务、分布式等相关经验者优先;
2.在github上有开源安全产品优先;
3:有过安全开发经验、独自分析过相关开源安全工具、以及参与开发过相关后渗透框架等优先;
4.在freebuf、安全客、先知等安全平台分享过相关技术文章优先;
5.具备良好的英语文档阅读能力。

设计师

————————

【职位描述】
负责设计公司日常宣传图片、软文等与设计相关工作,负责产品品牌设计。

【职位要求】
1、从事平面设计相关工作1年以上,熟悉印刷工艺;具有敏锐的观察力及审美能力,及优异的创意设计能力;有 VI 设计、广告设计、画册设计等专长;
2、有良好的美术功底,审美能力和创意,色彩感强;精通photoshop/illustrator/coreldrew/等设计制作软件;
3、有品牌传播、产品设计或新媒体视觉工作经历;

【关于岗位的其他信息】
企业名称:杭州安恒信息技术股份有限公司
办公地点:杭州市滨江区安恒大厦19楼
学历要求:本科及以上
工作年限:1年及以上,条件优秀者可放宽


简历投递至 strategy@dbappsecurity.com.cn


安恒雷神众测SRC运营(实习生)
————————
【职责描述】
1.  负责SRC的微博、微信公众号等线上新媒体的运营工作,保持用户活跃度,提高站点访问量;
2.  负责白帽子提交漏洞的漏洞审核、Rank评级、漏洞修复处理等相关沟通工作,促进审核人员与白帽子之间友好协作沟通;
3.  参与策划、组织和落实针对白帽子的线下活动,如沙龙、发布会、技术交流论坛等;
4.  积极参与雷神众测的品牌推广工作,协助技术人员输出优质的技术文章;
5.  积极参与公司媒体、行业内相关媒体及其他市场资源的工作沟通工作。

【任职要求】 
 1.  责任心强,性格活泼,具备良好的人际交往能力;
 2.  对网络安全感兴趣,对行业有基本了解;
 3.  良好的文案写作能力和活动组织协调能力。


【工作地点】

杭州、广州


简历投递至 strategy@dbappsecurity.com.cn


安全服务工程师/渗透测试工程师


工作地点:新疆


1、掌握渗透测试原理和渗透测试流程,具备2年以上渗透测试工作经验,能够独立完成渗透测试方案和测试报告;
2、熟悉风险评估、安全评估;
3、熟练掌握各类渗透工具,如Sqlmap、Burpsuite、AWVS、Appscan、Nmap、Metasploit、Kali等;
4、熟练掌握Web渗透手法,如SQL注入、XSS、文件上传等攻击技术;
5、至少熟悉一种编程语言(php/java/python),能够独立编写poc者优先;
6、具有良好的沟通能力和文档编写能力,动手能力强;
7、对工作有热情,耐心、责任心强,具备沟通能力和良好的团队意识;
8、加分项:有安全开发经验/可进行代码审计工作;
9、加分项:有安全和网络相关证书,如CISSP、CISA、CISP 、CCNP、CCIE等认证者;
岗位职责:
1、参与安全服务项目实施,其中包括渗透测试与安全评估,代码审计,安全培训,应急响应;
2、独立完成安全服务项目报告编写,输出安全服务实施报告;

专注渗透测试技术

全球最新网络攻击技术


END


本文分享自微信公众号 - 雷神众测(thorsrc)。
如有侵权,请联系 support@oschina.cn 删除。
本文参与“OSC源创计划”,欢迎正在阅读的你也加入,一起分享。

展开阅读全文
打赏
0
0 收藏
分享
加载中
更多评论
打赏
0 评论
0 收藏
0
分享
返回顶部
顶部