首页
社区
课程
招聘
[讨论]请问用OLLDBG怎么判定是RSA加密算法?
发表于: 2015-6-23 16:38 3598

[讨论]请问用OLLDBG怎么判定是RSA加密算法?

2015-6-23 16:38
3598
最近在用OLLDBG逆向一个软件的注册过程,请问根据什么特征能够判定出对用户输入的用户名进行了RSA算法加密,另外怎么能够快速定位到RSA算法的部分呢?有谁能告诉我吗?
谢谢!

[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 0
支持
分享
最新回复 (2)
雪    币: 627
活跃值: (663)
能力值: ( LV9,RANK:270 )
在线值:
发帖
回帖
粉丝
2
单纯从逆向的角度去判断,没有一定的经验是比较困难的。
IDA也没有现成的东西可用,或许有人有自己的脚本或插件。

如果不关心RSA算法的原理,它的计算公式是非常简单,且很容易理解的。
不过,参与计算的数据通常都比较大,所以有两个问题:
1) 一个大数怎么表示、存储;
2) 怎么优化计算,尽可能地快。
计算公式实际上是由多个基本计算单元来实现的,所以有很多的CALLs,一个一个跟进去,可能永远都看不明白。

这个时候需要懂一点编程,找几个大数库的C/C++源码来看看。常用的、公认的、开源的大数库就那么几个,比较好找。

C实现的整个过程差不多是这样:
1. 初始化 Init
实际上就是按大数表示的结构分配内存。好比C++的构造函数。
2. 赋值 Import
把参与计算的大数“导入”到已分配的结构中,这是输入数据。通常有两种方式,按Binary或String“导入”。
3. 计算 Calc
“关键Call”!
调试时,找到并盯紧这个Call就好了。将它的输入、输出用大数计算器验证一下,就可以确定了。不同的平台、编译器等注意一下little-endian和big-endian的问题。
4. 取结果 Export
通常也有按Binary或String“导出”之分。
5. 清理 Free
释放用于大数表示的内存。

楼主的目标用的是C的库,严格遵循上述5个步骤,比较容易一些。C++把这个过程隐藏了,不那么清晰。

剩下的就是时间了,经验会积累起来。
2015-6-25 11:08
0
雪    币: 1556
活跃值: (878)
能力值: ( LV9,RANK:320 )
在线值:
发帖
回帖
粉丝
3
如果只想知道用了什么加密算法,用PEID的krypto analyzer 或 hash&crypto detector等软件检测一下
2015-6-25 11:15
0
游客
登录 | 注册 方可回帖
返回
//