轩辕杯(2025)
hook me(reverse)

frida脚本
发现是单字节相关的异或
随便输入一些

Java.perform(function() { |

先找密文
Java.perform(function() { |

这里随便改输入,发现这里hook到的密文都是一样的,证明密文跟输入无关

这里发现输入都是单字节相关的,证明它应该就是普通的rc4,那可以直接通过异或拿到密钥,这里hook到的密文可以看出输入是38字节的
输入38字节a

得到相应密文,之后直接异或得到密钥,然后再异或密文就可以得到明文了
a = "a" * 38 |
简单编码(密码学)
猜测A是1,B是零,猜测是二进制,因为这个只有两个字母
def decode_morse_ab(input_str): |
得到的结果是base32编码后的
import base64 |

有%3D,然后URL解码
import urllib.parse |
得到的经典就是base64

感觉排序出了问题,感觉是栅栏编码,
def rail_fence_decrypt(cipher, rails): |
dp(密码学)
dp泄露
直接通过私钥的dp恢复整个私钥,枚举所有可能的k,还原p
import gmpy2 as gp |

easy_rsa(密码学)

分解大质数后计算欧拉函数之后算出私钥解密就行
import gmpy2 |

Terminal Hacker(misc)

按照步骤输入得到flag
你知道Base么(reverse)

先获得key,tea解密
|

再rc4解密获得base32的表,密钥就是前一个的输入

这里虽然分开了但根据长度应该是一起的
|

自定义的base32编码,直接通过得到的表和密文解密就可以了
def decode_custom_base32(encoded_str): |

ezBase(reverse)
用ida打开之后,显示的函数很少
用Exeinfo打开

有UPX壳

用010打开看一下
UPX被改成了upx
修改回来,再进行脱壳


密文加密之后应该是等于
iP}ui7siC`otMgAh5o]Tg<4jPmtIvM5CI4h644K7M~KVg=
sub_140001130应该就是加密函数
双击进去看看

应该是Base64加密
而且编码被改变了

AaBbCcDdEeFfGgHhIiJjKkLlMmNnOoPpQqRrSsTtUuVvWwXxYyZz0123456789+/

最后的时候进行了异或(异或4)
那么解密的时候先异或再base64解密

mTyqm3wmGdkpIcEzl1kYPc80nTipMrI1GzM0l200O3IzORc9

本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来源 Reverse!
