normal系列
normal14
分析加密

change函数是将输入转存为十六进制数
这里的gmpz似乎调用的是某个库内的函数,检索一下
__gmpz_init_set_str((mpz_ptr, const char *, int) const char是需要转存的字符串,int是转存的数据进制,mpz_ptr 是目标空间。
简单来讲就是将字符串转化成对应进制存入新位置
1 | v7_raw = "ad939ff59f6e70bcbfad406f2494993757eee98b91bc244184a377520d06fc35" |
78510953323073667749065685964447569045476327122134491251061064910992472210485
这是转换的结果
关于__gmpz_powm函数,在这里引入一个文档,学习一下
十六进制数输入进行pown的运算之后和comparedata比较
该运算详解为
(输入^65537)%1034610359008169141213901012990490444139
50405173712170434161686539878160984549==比较数据

和rsa加密的算法一样
那也可以采用rsa的解密算法

密钥得出方式E * D % φ(N) = 1
其中N是由两个质数做因子相乘得出的,而φ(N) = (P-1)(Q-1)需要得出这两个因子
为了解出因子,借用一下工具https://nchc.dl.sourceforge.net/project/yafu/1.34/yafu-1.34.zip
指令factor()分解

得出两个因子
进行运算的时候需要用到gmpy2 高精度算数运算库
编写脚本
1 | import gmpy2 |
suctf{Pwn_@_hundred_years}
其中binascii是用于返回二进制表示的字符串的函数库
unhexlify是返回hex书的二进制字符串捏
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 kiki的博客!
