能力值:
( 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++把这个过程隐藏了,不那么清晰。
剩下的就是时间了,经验会积累起来。
|
能力值:
( LV9,RANK:320 )
|
-
-
3 楼
如果只想知道用了什么加密算法,用PEID的krypto analyzer 或 hash&crypto detector等软件检测一下
|
|
|