00520076 | 8B0A MOV ECX,DWORD PTR DS:[EDX]
00520078 |. |BF FFFEFE |MOV EDI,7EFEFEFF
0052007D |. |8BC1 |MOV EAX,ECX
0052007F |. |8BF7 |MOV ESI,EDI
00520081 |. |33CB |XOR ECX,EBX
00520083 |. |03F0 |ADD ESI,EAX
00520085 |. |03F9 |ADD EDI,ECX ;这是相加
00520087 |. |83F1 FF |XOR ECX,FFFFFFFF
0052008A |. |83F0 FF |XOR EAX,FFFFFFFF ;这是求反
0052008D |. |33CF |XOR ECX,EDI
0052008F |. |33C6 |XOR EAX,ESI
00520091 |. |83C2 04 |ADD EDX,4
00520094 |. |81E1 00010181 |AND ECX,81010100 ;
0052009A |. |75 1C |JNZ SHORT Insight3.005200B8
做个说明,这是一个字符串变换算法,头一句
MOV ECX,DWORD PTR DS:[EDX],edx是字符串的首地址,
整条指令也即是:ecx被赋值edx指向的字符串ascii码(也就是ecx
存有4个字母),想问的是:后面几条异或和相加指令到底想做什么?
一直没有看明白,其中:开头的MOV EDI,7EFEFEFF中的7EFEFEFF
和结尾的AND ECX,81010100 中的81010100 ,81010100 +7EFEFEFF相加正好是FFFFFFFF(八位),很诡异
这是什么算法,谁见过?谢谢大家
再补充下,以上源码来自于Source Insight 3.5逆向分析,
http://bbs.pediy.com/showthread.php?t=121910
上面的汇编码是来自于Source Insight 3.5逆向分析开头的第六条指令: 004432E5 |. E8 26870D00 call 0051BA10 中的函数调用
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)