|
XOR加密解密是同一过程,你懂的!
DECLARE integer CallWindowProc IN USER32 Long,Long,Long, Long,Long
DECLARE integer HeapAlloc IN WIN32API integer,integer,integer
DECLARE integer GetProcessHeap IN WIN32API
DECLARE integer HeapFree IN WIN32API integer,integer,integer
AsmCode=0H55; && PUSH EBP
+0H89E5; && MOV EBP,ESP
+0H53; && PUSH EBX
+0h56; && PUSH ESI
+0h57; && PUSH EDI
+0h8B450C; && MOV EAX,Len '测试长度为0的字符串
+0h85C0; && TEST EAX,EAX
+0h7446; && JZ EXIT
+0h8B4514; && MOV EAX,[EBP+14] 'MOVE EAX,PWLEN
+0h85C0; && TEST EAX,EAX
+0h743F; && JZ EXIT
+0h8B4D0C; && MOV ECX,[EBP+C] 'MOV ECX,LEN 'ECX=LEN
+0hD1E1; && SHL ECX,1
+0h8B5508; && MOV EDX,[EBP+8]
+0h01CA; && ADD EDX,ECX
+0hF7D9; && NEG ECX
+0h8B5D14; && MOV EBX,[EBP+14]
+0hD1E3; && SHL EBX,1
+0h8B4510; && MOV EAX,[EBP+10]
+0h01D8; && ADD EAX,EBX
+0h894510; && MOV [EBP+10],EAX
+0hF7DB; && NEG EBX
+0h895D14; && MOV [EBP+14],EBX
+0h8B040A; && MOV EAX,[EDX+ECX]
+0h035D10; && ADD EBX,[EBP+10]
+0h3203; && XOR AL,[EBX]
+0h2B5D10; && SUB EBX,[EBP+10]
+0h81C302000000; && ADD EBX,2
+0h7503; && JNZ SHORT 00000048
+0h8B5D14; && MOV EBX,[EBP+14]
+0h89040A; && MOV [EDX+ECX],EAX
+0h81C102000000; && ADD ECX,2
+0h75DF; && JNZ SHORT 00000032
+0h31C0; && XOR EAX,EAX
+0h5F; && POP EDI
+0h5E; && POP ESI
+0h5B; && POP EBX
+0h89EC; && MOV ESP,EBP
+0h5D; && POP EBP
+0hC21000 && RETN 10
hProcHeap = GetProcessHeap()
PtrAsm=HeapAlloc(hProcHeap,0,LEN(AsmCode))
SYS(2600,PtrAsm,LEN(AsmCode),AsmCode)
uPas='行者孙'&&密匙
PtrPas=HeapAlloc(hProcHeap,0,LEN(uPas))
SYS(2600,PtrPas,LEN(uPas),uPas)
FOR i=1 TO 1000 &&这里你就可以循环加密数据了
uStr='VFP应用程式算法群祝大家2011年万事如意'&&被加密的字符串
PtrStr=HeapAlloc(hProcHeap,0,LEN(uStr))
SYS(2600,PtrStr,LEN(uStr),uStr)
CallWindowProc(PtrAsm,PtrStr,LEN(uStr),PtrPas,LEN(uPas))
EnDeCryptStr=SYS(2600,PtrStr,LEN(uStr))&&获取加密结果
HeapFree(hProcHeap,0,PtrStr) &&用完后及时释放内存,不然直接挂掉
? EnDeCryptStr
ENDF
HeapFree(hProcHeap,0,PtrAsm)
HeapFree(hProcHeap,0,PtrPas)
&&来源:http://hi.baidu.com/myvfp/blog/item/5e0b3fc26a9c83090ff47750.html |
|