-
-
[原创]记一道Android算法逆向题
-
发表于:
2021-7-14 19:31
14021
-
小伙伴发来的题,说是强网杯的题
根据动态调试,如果调试不起来需要运行下断点,取一下运行的内存地址,alt+g改一下thumb 就可以调试了
发现大数
加密函数
输入 “1111”,
入参变为 0x31313131
加密结果为
根据以上信息判断可能是RSA加密,根据RSA加解密的数学原理
加密
c = (p ^ e) mod n;
解密
p = (c ^ d) mod n;
将大数0x1321d2fddde8bd9dff379aff030de205b846eb5cecc40fa8aa9c2a85ce3e992193e873b2bc667dabe2ac3ee9dd23b3a9ed9ec0c3c7445663f5455469b727dd6fbc03b1bf95d03a13c0368645767630c7eabf5e7ab5fa27b94ade7e1e23bcc65d2a7ded1c5b364b51
转为为
2140324650240744961264423072839333563008614715144755017797754920881418023447140136643345519095804679610992851872470914587687396261921557363047454770520805119056493106687691590019759405693457452230589325976697471681738069364894699871578494975937497937
质因数分解
使用py gmpy2 模块求d
ps:e在上图加密函数通过参数可以看到 e=0x10001
验证一下入参“0x31313131”与加密结果关系
至此rsa加密结束
继续调试发现魔改base64
加密后结果
加密过程:
解密过程:
由于base64是魔改的,且table中有2个+和2个-,进行正常的逆推是求不出来结果的,所以要进行破魔,构造出
所有可能加密的字符,然后通过base64解密,rsa解密来求flag
"+"对应"["和"]"
"-"对应"("和")"
构造出2^14个加密字符串
使用
进行base64解密
p
=
33372027594978156556226010605355114227940760344767554666784520987023841729210037080257448673296881877565718986258036932062711
q
=
64135289477071580278790190170577389084825014742943447208116859632024532344630238623598752668347708737661925585694639798853367
p
=
33372027594978156556226010605355114227940760344767554666784520987023841729210037080257448673296881877565718986258036932062711
q
=
64135289477071580278790190170577389084825014742943447208116859632024532344630238623598752668347708737661925585694639798853367
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)