这题从早上9点开始,做了快3小时,最后被人领先8分钟拿了一血,只拿到一个二血,呜呜呜/(ㄒoㄒ)/~~
这题IDA有点白给,直接上x32dbg动调
可以看到要比较的字符串
我输入的是111d0g,经过某种加密以后变成了OOOBhKaT
前面有判断输入是不是3的倍数,不是则用-补齐的操作
推测是3位一组,一组输出4个字符,有点像base64
加密操作在这个函数里,会调用length/3次,每次输出4个字符
这个函数是动态解密的,而且dump下来后idapython写IDA里patch后也没法F5,懒得修花指令了
读一读汇编能写出他的加密算法
解密脚本:
char table[] = "BCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/A";
char getC1(char* s, int i)
{
int idx = ((s[0] & 0xC0) | (s[1] & 0x30) | ((s[2] & 0x3) << 2)) >> 2;
return table[(idx + i) % 64]