64位无壳直接进

可以看出 ]P_ISRF^PCY[I_YWERYC 是最终的密文(20位)
第一个循环:进行逐位异或
第二个循环:将字符串中的B和X换掉,但是IDA默认编译出来的-101-66显然是负数,本不应该输出任何字符,但是在C中却可以运行,分别换成了Y和C

苦思冥想后我发现,256-101-155,155-66=89正好对应Y,电脑自动把-101转换成155进行计算,因为出现了整数溢出,完整的0-256表从后往前溢出,才造成了这样的结果
选中“-101”(一定要包括负号),先转化为16进制,再换成十进制,就会变成155(IDA榆木脑袋!)

第三个循环:看似是一个字符串逆序,实际上是将前半部分字符串对称到后半部分去,损失了一般的数据。这里好像是编错了,如果真是这样就没法解密。
如果当成是逆序,可以写出解密脚本:


出现了正常的flag,应该是题目出错了。
文章讲述了在64位无壳代码中,通过逐位异或和字符串操作加密的过程,涉及到整数溢出导致的意外字符映射。作者发现一个可能的解密脚本,但指出可能存在编码错误。
438

被折叠的 条评论
为什么被折叠?



