这个函数怎么求逆运算,谢谢
从一个软件分析中得到下面一个函数,伪代码如下
RSA_POW_MOD(M,e,N)
{
CONST = N-M;
CONST2= N-2;
RSI =2;
RDI =M;
While(e>0)
{
if(e and 1 )
{
RSI = (RSI*RDI+CONST)MOD N;
RDI = (RDI*RDI+CONST2) MOD N;
e >>= 1;
}
else
{
RDI = (RSI*RDI+CONST)MOD N;
RSI = (RSI*RSI+CONST2) MOD N;
e >>=1;
}
return RSI;
}
其中e=65537,只是用来保证循环的次数,已知RSI,e,N(N是一个大数),能不能求得M,谢谢
一起玩游戏 本帖最后由 wai1216 于 2022-2-9 11:30 编辑
Lucas序列
http://www.weidai.com/lucas.html
https://eprint.iacr.org/2016/937.pdf
tc使用 可以patch下 可参考
https://xakep.ru/2018/05/16/total-commander-hack/
https://exelab.one/forum/%D0%BA% ... D1%8F/29694-2-22289 wai1216 发表于 2022-2-9 11:28
Lucas序列
http://www.weidai.com/lucas.html
https://eprint.iacr.org/2016/937.pdf
谢谢表哥,666
wai1216 发表于 2022-2-9 11:28
Lucas序列
http://www.weidai.com/lucas.html
https://eprint.iacr.org/2016/937.pdf
https://xakep.ru/2018/05/16/total-commander-hack/
请问一下表哥这个源码下载到了吗,现在不能下载了,如果有能不能发我一下,[email protected]
本帖最后由 wai1216 于 2022-2-9 17:38 编辑
wangwei628 发表于 2022-2-9 13:06
https://xakep.ru/2018/05/16/total-commander-hack/
请问一下表哥这个源码下载到了吗,现在不能下载了 ...
没有
如果是替换n 生成一对p&q 然后逆运算
应该就可以了
可能需要的代码
// 生成p/q/n/u
https://github.com/weidai11/cryptopp/blob/master/luc.cpp#L133
// 计算v
// Integer Lucas(const Integer &e, const Integer &pIn, const Integer &n)
https://github.com/weidai11/cryptopp/blob/master/nbtheory.cpp#L819
// Integer InverseLucas(const Integer &e, const Integer &m, const Integer &p, const Integer &q, const Integer &u)
https://github.com/weidai11/cryptopp/blob/master/nbtheory.cpp#L1005
这是要找私钥吗?N有多少位?不大的话直接分解N试试吧
ps122 发表于 2022-2-9 18:17
这是要找私钥吗?N有多少位?不大的话直接分解N试试吧
谢谢,RSA832,分解是不可能的了,想替换然后自己keygen
wgz001 发表于 2022-2-9 18:28
谢谢,RSA832,分解是不可能的了,想替换然后自己keygen
是有点大,只能替换了
wai1216 发表于 2022-2-9 17:36
没有
如果是替换n 生成一对p&q 然后逆运算
应该就可以了
好的,谢谢表哥 本帖最后由 wai1216 于 2022-2-10 11:17 编辑
wangwei628 发表于 2022-2-9 19:24
好的,谢谢表哥
简单点话windows平台 点开cryptopp-master里的cryptest.sln
编译完成后
在cryptopp-master\test.cpp
找到main函数
修改为如下 可以验证lucas
int CRYPTOPP_API main(int argc, char *argv[])
{
CryptoPP::Integer e("0x10001");
CryptoPP::Integer p("0x7F103E504ACF2A8A8B9C2C4DFB2F3441DEF4B73E47B611BFED43DF24737320909136DB6BA304DB0867C7A9334C6C44F9EA08DE41DEAC3EC2EEE61CBFC100CB1ADE426EA5C602D7FE0590A299D6A2B536E716D267FA547041D677D6CEAAF7D94E053C281DFABA568F");
CryptoPP::Integer n("0xAAD4474DC8387E81BB095D810F4F4F21D5D7CCC756E3D6E5DEE48AC000C25AA0EFAD0AD3A5AC46F15B50249597461BBB87CDC3F1BA37C17A9A207A3603E38E718F9927A5EB38005D8B72EAFDC63931C3D93C1FAD457A17CA85BEB40F3FA9152770DAC12E8E3B912D");
CryptoPP::Integer c = CryptoPP::Lucas(e, p, n);
std::cout << std::hex << c << std::endl;
return CryptoPP::Test::scoped_main(argc, argv);
}