foxshell1.2作为经典的vfp加密工具,已经有好多年了,但因为vfp解密后就是源码,故一直未
公开此算法。但vfp作为小众开发工具,许多软件因为找不到开发者,更新无忘,今天就公开其加解密算法,了解原理后可以直接用高级语言写出解密工具。
用od加载用foxshell1.2加密的tese.exe(vfp编译)
从内存中找到的数据去掉前36个字节。(foxshell加密的程序运行后会在内存中生成一个加密过的app解压数据,一般为最大的那个内存块。小的按以下方法查找)
3E320160 ' FOXSHELL特征字
0E7201 FOXSlock特征字
'foxshell1.2解密算法
'004026A3 |> B8 1A000000 /MOV EAX,1A foxlock为2C
'004026A8 |. 8BCE |MOV ECX,ESI
'004026AA |. 038D F4FEFFFF |ADD ECX,DWORD PTR SS:[EBP-10C]
'004026B0 |. 0FB609 |MOVZX ECX,BYTE PTR DS:[ECX]
'004026B3 |. 33C1 |XOR EAX,ECX
'004026B5 |. 8BCE |MOV ECX,ESI
'004026B7 |. 038D F4FEFFFF |ADD ECX,DWORD PTR SS:[EBP-10C]
'004026BD |. 8801 |MOV BYTE PTR DS:[ECX],AL
'004026BF |. B8 1A000000 |MOV EAX,1A
'004026C4 |. 8B5D 14 |MOV EBX,DWORD PTR SS:[EBP+14]
'004026C7 |. 0FB60B |MOVZX ECX,BYTE PTR DS:[EBX] (这里值为BB) foxlock为E0
'004026CA |. 33C1 |XOR EAX,ECX
'004026CC |. 8B5D 14 |MOV EBX,DWORD PTR SS:[EBP+14]
'004026CF |. 0FB60B |MOVZX ECX,BYTE PTR DS:[EBX]
'004026D2 |. 8945 D4 |MOV DWORD PTR SS:[EBP-2C],EAX A1
'004026D5 |. B8 00010000 |MOV EAX,100
'004026DA |. 894D D8 |MOV DWORD PTR SS:[EBP-28],ECX BB
'004026DD |. 8BCE |MOV ECX,ESI
'004026DF |. 038D F4FEFFFF |ADD ECX,DWORD PTR SS:[EBP-10C]
'004026E5 |. 0FB609 |MOVZX ECX,BYTE PTR DS:[ECX]
'004026E8 |. 03C1 |ADD EAX,ECX
'004026EA |. 3345 D8 |XOR EAX,DWORD PTR SS:[EBP-28]
'004026ED |. 2B45 D4 |SUB EAX,DWORD PTR SS:[EBP-2C]
'004026F0 |. 89C7 |MOV EDI,EAX
'004026F2 |. 81FF FF000000 |CMP EDI,0FF
'004026F8 |. 0F8E 17000000 |JLE ypdemo.'00402715
'004026FE |. 8BC7 |MOV EAX,EDI
'00402700 |. 81E8 00010000 |SUB EAX,100
'00402706 |. 8BCE |MOV ECX,ESI
'00402708 |. 038D F4FEFFFF |ADD ECX,DWORD PTR SS:[EBP-10C]
'0040270E |. 8801 |MOV BYTE PTR DS:[ECX],AL
'00402710 |. E9 0C000000 |JMP ypdemo.'00402721
'00402715 |> 8BC6 |MOV EAX,ESI
'00402717 |. 0385 F4FEFFFF |ADD EAX,DWORD PTR SS:[EBP-10C]
'0040271D |. 8BDF |MOV EBX,EDI
'0040271F |. 8818 |MOV BYTE PTR DS:[EAX],BL
'00402721 |> FFC6 |INC ESI
'00402723 |> 8BC6 MOV EAX,ESI
'00402725 |. 3B85 68FFFFFF |CMP EAX,DWORD PTR SS:[EBP-98]
'0040272B |.^0F8E 72FFFFFF \JLE ypdemo.'004026A3
有了算法直接写一个解密过程就可以了。加密就是再运行一次解密。