算法逆向6——RSA识别
本文原创作者:i春秋作家——icq5f7a075d
1. 算法介绍
RSA算法是一种用数论构造的、基于大合数因子分解困难性的公开密钥密码。由于RSA密码既可用于加密,又可用于数字签名,安全、易懂,因此RSA密码已成为目前应用最广泛的公开密钥密码。许多勒索软件就是使用RSA加密,在没有私钥的情况下很难恢复数据。
在正式介绍RSA加密算法前,我们还需要知道一些数论的概念:
(1)互素关系(互质关系):如果两个正整数,除了1以外,没有其他公因子,我们就称这两个数是互素关系(互质关系);
(2)乘法逆元(模反元素):如果两个正整数a和n互质,那么一定可以找到整数b,使得ab-1被n整除,或者说ab被n除的余数是1。这时,b就叫做a的乘法逆元(模反元素)。
(3)欧拉函数;任意给定正整数n,计算小于n的正整数中与n互质的数的数目的方式就叫做欧拉函数,以φ(n)表示。如果n是质数,则 φ(n)=n-1
,因为质数与小于它的每一个数,都构成互质关系。如果n可以分解成两个互质的整数之积,n = p1 × p2,则φ(n) =φ(p1p2)
= φ(p1)φ(p2)=(p1-1)*(p2-1)。
(4)欧拉定理:如果两个正整数a和n互质,则n的欧拉函数φ(n)可以让下面的等式成立:
a^φ(n)=1 (mod n)
有了以上数论的知识,我们就可以理解RSA加密算法了。
加密算法描述 :
(1)密钥的产生
a.选两个保密的大素数(素数又称质数)p和q;
b.计算n=p*q,φ(n) =(p-1)(q-1);
c.选一整数e,满足1<e<φ(n),且φ(n)与e互质;
d.计算d,满足d*e=1 (mod φ(n)),即d是e在φ(n)下的乘法逆元,因e与φ(n)互素,由模运算可知,它的乘法逆元一定存在;
e.以{e,n}为公开钥,{d,n}为秘密钥;
(2)加密
加密时首先将明文比特串分组,使得每个分组对应的十进制数小于n,即分组长度小于log 2 n,然后对每个明文分组m,作加密运算:c=m^e mod n ;
(3)解密
对密文分组的解密运算为:m=c^d mod n ;
2. RSA24程序逆向
24指的是密钥长度。
2.1. 定位关键位置
数据验证的过程在sub_4029B0中进行,也是RSA计算的过程。
2.2. Serial计算
小知识点:计算字符串长度:
cld
xor eax,eax
or ecx,-0x1 ;ecx=0xFFFFFFFF
repne scas byte ptr es:[edi] ; [edi]=字符串
not ecx
dec ecx ;计算出字符串长度
计算的过程可以用如下代码表示:
一个经典的 m e mod n 算法:
m=7167622 #m的值不固定
n=12790891L
e=9901
c=1
while(e>0):
if(e%2==0):
e=e>>1
m=(m*m)%n
else:
e=e-1
c=(c*m)%n
print c
3. 总结
RSA的学习需要较高的理论基础,但是RSA实际上很简单,反汇编出的程序流程简单,很容易识别。
文末照例来点彩蛋:
① 在线分解质因数[/url] :http://www.atool.org/quality_factor.php
②python中 的 gmpy2 模块。
gmpy2是Python的一个扩展库, 可以进行高精度运算,适用于 Miller-Rabin素数测试算法、大素数生成、欧几里德算法、求域中元素的逆、Jacobi符号、legendre符号等 。
RSA中经常进行 大素数 计算,gmpy2模块是一个不错的选择。
本次逆向程序中的n=12790891,e=9901,使用
在线分解质因数[/url] 工具,很容易计算出q=1667,p=7673,分解出借助 gmpy2 模块计算d,d=
gmpy2.invert(e, (p-1)*(q-1)) 。 q,p,n,d,e都有了,我们可以进行任意的RSA加密解密了。
注册机:
import gmpy2
n=12790891L
e=9901
c1=8483678
c2=5666933
q=1667
p=7673
d=gmpy2.invert(e, (p-1)*(q-1))
m1=pow(c1,d,n)
m2=pow(c2,d,n)
print m1,m2
本文属i春秋原创奖励计划,未经许可禁止转载!
本文如果出现错误,欢迎指出,感激不尽!
本文中的所有程序请在虚拟机中运行。
参考资料:
《加密与解密实战攻略》
《应用密码学》 曹天杰著
http://www.ruanyifeng.com/blog/2013/06/rsa_algorithm_part_one.html
>>>>>>《黑客入门必备技能》 带你入坑,和逗比表哥们一起聊聊黑客的事儿,他们说高精尖的技术比农药都好玩!
算法逆向6——RSA识别的更多相关文章
- 秀尔算法:破解RSA加密的“不灭神话”
RSA加密 VS 秀尔算法 作为RSA加密技术的终结者——“太多运算,无法读取”的秀尔算法(Shor’s algorithm)不是通过暴力破解的方式找到最终密码的,而是利用量子计算的并行性,可以快速分 ...
- 秀尔算法:破解RSA加密的“不灭神话” --zz
http://netsecurity.51cto.com/art/201508/488766.htm RSA加密曾被视为最可靠的加密算法,直到秀尔算法出现,打破了RSA的不灭神话. RSA加密 VS ...
- 论RSA算法的重要性 -RSA 简介
地球上最重要的算法 (这个说法似乎有点夸张了,但是当你了解了RSA算法后,就觉得不夸张了.) 如果没有 RSA 算法,现在的网络世界毫无安全可言,也不可能有现在的网上交易.上一篇文章 ssh 协议为什 ...
- 湖北校园网PC端拨号算法逆向
湖北校园网PC端拨号算法逆向 前言 上一文 PPPoE中间人拦截以及校园网突破漫谈我们谈到使用 PPPoE 拦截来获取真实的账号密码. 在这个的基础上,我对我们湖北的客户端进行了逆向,得到了拨号加密算 ...
- 第二十一个知识点:CRT算法如何提高RSA的性能?
第二十一个知识点:CRT算法如何提高RSA的性能? 中国剩余定理(The Chinese Remainder Theorem,CRT)表明,如果我们有两个等式\(x = a \mod N\) 和\(x ...
- stanford coursera 机器学习编程作业 exercise4--使用BP算法训练神经网络以识别阿拉伯数字(0-9)
在这篇文章中,会实现一个BP(backpropagation)算法,并将之应用到手写的阿拉伯数字(0-9)的自动识别上. 训练数据集(training set)如下:一共有5000个训练实例(trai ...
- 【Machine Learning in Action --2】K-近邻算法构造手写识别系统
为了简单起见,这里构造的系统只能识别数字0到9,需要识别的数字已经使用图形处理软件,处理成具有相同的色彩和大小:宽高是32像素的黑白图像.尽管采用文本格式存储图像不能有效地利用内存空间,但是为了方便理 ...
- 010 Editor v8.0.1(32 - bit) 算法逆向分析、注册机编写
010 Editor 的逆向分析整体算下来还是比较简单的,将程序拖入OD,通过字符串搜索定位到核心代码,经过分析,主要是如下图所示的两个关键函数,返回正确的值,才算是注册成功. 00409C9B 这个 ...
- CNN算法解决MNIST数据集识别问题
网络实现程序如下 import tensorflow as tf from tensorflow.examples.tutorials.mnist import input_data # 用于设置将记 ...
随机推荐
- Jmeter Ant Task如何让beanshell断言失败的详细信息展示在report里面
首先必须给beanshell断言添加FailureMessage if(${TotalClient_SS}+2!=${TotalClient_SS2}){Failure=true; Fai ...
- 2018.10.19 NOIP训练 yk赚钱记(01分数规划)
传送门 其实是一个裸的最优比率生成树. 注意精度的控制就行了. 代码
- 2018.07.01洛谷P2617 Dynamic Rankings(带修主席树)
P2617 Dynamic Rankings 题目描述 给定一个含有n个数的序列a[1],a[2],a[3]--a[n],程序必须回答这样的询问:对于给定的i,j,k,在a[i],a[i+1],a[i ...
- EF生成的SQL语句执行顺序问题。
//实体被更改后,再做删除,EF只生成删除语句 //实体删除后再更改,EF报错 //添加语句会再,更改,删除后执行,更AddObject位置无关 //一个实体多个字段被改,只会生成一句update / ...
- Unit Testing of Spring MVC Controllers1
我们的pom.xml文件相关的部分看起来如下: <dependency> <groupId>com.fasterxml.jackson.core</groupId& ...
- IntelliJ IDEA 2017版 spring-boot 报错Consider defining a bean of type 'xxx' in your configuration问题解决方案
问题分析: 通过问题的英文可知,这个错误是service的bean注入失败,那么为什么会产生这个问题呢? 主要是框架的Application产生的,所以我们建立项目的时候,要保证项目中的类跟Appli ...
- Apache Struts 2 Documentation Big Picture
http://struts.apache.org/docs/big-picture.html 1. HttpServletRequest 穿越各个过滤器到达FilterDispatcher(这个已经不 ...
- Blender3d做大型项目真实地形快速建模
https://www.rr-sc.com/thread-16531254-1-1.html Blender3d是一款优秀的动画和建模工具,但在做一些大型建设项目时需要在真实地形上来表现,Blende ...
- Codeforces807 C. Success Rate 2017-05-08 23:27 91人阅读 评论(0) 收藏
C. Success Rate time limit per test 2 seconds memory limit per test 256 megabytes input standard inp ...
- 用idea简单创建web项目——两种方式
最近同学让我教她们用idea创建web项目,于是我用两种方式创建web项目,并整理截图给她们看,一种是用maven创建,一种是不用maven创建,适合菜鸟哈哈~ 方法一:不用maven 1.解压tom ...