Windows32位程序,无壳,编译器版本还算高。
主函数除了CFG有点诡异外,流程十分简单。
进入第一个check函数,可以看到大量SSE指令,前面一些基本的判断很不好看,直接调试看结果
.text:00401682 060 movd xmm0, eax
.text:00401686 060 pshufd xmm5, xmm0, 0
.text:0040168B 060 test ecx, ecx
.text:0040168D 060 jz loc_401
到达以上基本块时可以发现,第一行eax的结果是string2hex(input[0:8]),刚好32字节,这说明我们的输入必须为十六进制字符。之后可以看到一堆复杂的运算,且都是通过xmm寄存器来实现的
这里操作的变量均为128位,v21是input[8:10]两个字符一直重复8次的hex值,而v9则是之前所说的前8个字符的hex值。最终运算的结果会与一个函数的数据进行比较,如果完全匹配则将这些数据写入到另一个函数中,如下
也就是说&#x