高手帮忙看下这段代码是什么意思
这是我找到的一个像是算法call的内容。高手帮忙看下这段代码是什么意思,最好给个详细的说明,谢谢。
0040122E/$56 PUSH ESI
0040122F|.68 20334000 PUSH tsrh-cra.00403320 ; /String = "tsrh-2008-"
00401234|.E8 1B010000 CALL <JMP.&KERNEL32.lstrlenA> ; \lstrlenA
00401239|.8B3D 14354000 MOV EDI,DWORD PTR DS:
0040123F|.BE 01000000 MOV ESI,1
00401244|.8BC8 MOV ECX,EAX
00401246|>B8 B0344000 MOV EAX,tsrh-cra.004034B0 ;ASCII "asdfg"
0040124B|.0FB64406 FF MOVZX EAX,BYTE PTR DS:
00401250|.04 0C ADD AL,0C
00401252|.0FB6D0 MOVZX EDX,AL
00401255|.83EA 11 SUB EDX,11
00401258|.03D0 ADD EDX,EAX
0040125A|.2BD1 SUB EDX,ECX
0040125C|.33C2 XOR EAX,EDX
0040125E|.50 PUSH EAX ; /<%X>
0040125F|.68 18354000 PUSH tsrh-cra.00403518 ; |%X
00401264|.8D81 20334000 LEA EAX,DWORD PTR DS: ; |
0040126A|.50 PUSH EAX ; |s
0040126B|.E8 A8000000 CALL <JMP.&USER32.wsprintfA> ; \wsprintfA
00401270|.83C4 0C ADD ESP,0C
00401273|.68 20334000 PUSH tsrh-cra.00403320 ; /String = "tsrh-2008-"
00401278|.E8 D7000000 CALL <JMP.&KERNEL32.lstrlenA> ; \lstrlenA
0040127D|.8BC8 MOV ECX,EAX
0040127F|.46 INC ESI
00401280|.4F DEC EDI
00401281|.^ 75 C3 JNZ SHORT tsrh-cra.00401246
00401283|.33C0 XOR EAX,EAX
00401285|.5E POP ESI
00401286\.C3 RETN 对应的c代码如下, 不知道是什么东西..我假设它是asdfg的长度. 匆匆写的, 不知道有没有什么地方错了.#include <stdio.h>
int main()
{
char tsrh = "tsrh-2008-";
int tsrh_len = strlen(tsrh);
char key[] = "asdfg";
int key_len = strlen(key);
int idx;
int dd, ss;
for (; key_len>0; key_len--) {
idx = key_len - 1;
ss = key + 0xc;
dd = (ss - 0x11 + ss - tsrh_len) ^ ss;
sprintf(tsrh+tsrh_len, "%X", dd);
tsrh_len = strlen(tsrh);
}
printf("%s", tsrh);
return 0;
} 这是一个CM的反汇编代码
楼上的高人/:good
页:
[1]