-
-
[求助]这个.net是如何加密的呢
-
发表于:
2009-12-29 09:34
6606
-
这个.net是如何加密的?
http://kilgray.com/memoq/MemoQSetup.3.6.9.exe
或者这里下载:
http://www.brsbox.com/filebox/down/fc/d26edd42f133a824ebaea41c57bd003e
上面是某网络验证的程序,很容易找到关键的地方:MemoQ.Activator.dll,这里面有几个关键的函数,比如 GetInvalidCredentials等等,但是函数不知道怎么加密了,也不像是混淆,着实看不懂。
以前的版本可以自己写一个新的dll,直接返回新的数据,这个不知道如何处理
新版本的部分代码如下:
[return: MarshalAs(UnmanagedType.U1)]
public virtual unsafe bool IsSerialValid(SerialNumber serialNumber)
{
string message = null;
string str2 = null;
string str3 = null;
byte num4;
bool flag;
cSerialNumber number;
int num2 = (int) stackalloc byte[(__CxxQueryExceptionSize() * 1)];
SerialToImpl(&number, serialNumber);
byte num3 = 0;
try
{
uint num;
try
{
bool flag2 = MemoQ.ActivatorLib.cSerialNumber.IsValid((cSerialNumber modopt(IsConst)* modopt(IsConst) modopt(IsConst)) &number);
num3 = 1;
MemoQ.ActivatorLib.cSerialNumber.{dtor}(&number);
flag = flag2;
goto Label_01FE;
}
catch when (?)
{
num = 0;
int num9 = __CxxRegisterExceptionObject((void*) Marshal.GetExceptionPointers(), (void*) num2);
try
{
try
{
bad_activator modopt(IsConst)* modopt(IsImplicitlyDereferenced) _activatorPtr;
str3 = new string(*_activatorPtr[0][4](_activatorPtr));
throw new ActivatorException(str3);
}
catch when (?)
{
}
if (num != 0)
{
throw;
}
}
finally
{
__CxxUnregisterExceptionObject((void*) num2, (int) num);
}
}
catch when (?)
{
num = 0;
int num8 = __CxxRegisterExceptionObject((void*) Marshal.GetExceptionPointers(), (void*) num2);
try
{
try
{
str2 = "Out of memory";
throw new ActivatorException(str2);
}
catch when (?)
{
}
if (num != 0)
{
throw;
}
}
finally
{
__CxxUnregisterExceptionObject((void*) num2, (int) num);
}
}
catch when (?)
{
num = 0;
int num7 = __CxxRegisterExceptionObject((void*) Marshal.GetExceptionPointers(), (void*) num2);
try
{
try
{
basic_string<char,std::char_traits<char>,std::allocator<char> > local;
std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{ctor}(&local, &?A0xc16b0883.unnamed-global-4);
try
{
exception modopt(IsConst)* modopt(IsImplicitlyDereferenced) exceptionPtr;
std.basic_string<char,std::char_traits<char>,std::allocator<char> >.+=(&local, *exceptionPtr[0][4](exceptionPtr));
message = new string(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.c_str((basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst)* modopt(IsConst) modopt(IsConst)) &local));
throw new ActivatorException(message);
}
fault
{
___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, (void*) &local);
}
}
catch when (?)
{
}
if (num != 0)
{
throw;
}
}
finally
{
__CxxUnregisterExceptionObject((void*) num2, (int) num);
}
}
catch when (?)
{
num = 0;
int num5 = __CxxRegisterExceptionObject((void*) Marshal.GetExceptionPointers(), (void*) num2);
try
{
try
{
throw new ActivatorException("Unkown exception");
}
catch when (?)
{
}
if (num != 0)
{
throw;
}
}
finally
{
__CxxUnregisterExceptionObject((void*) num2, (int) num);
}
}
fault
{
if (num3 == 0)
{
___CxxCallUnwindDtor(MemoQ.ActivatorLib.cSerialNumber.{dtor}, (void*) &number);
}
}
}
fault
{
if (num3 == 0)
{
___CxxCallUnwindDtor(MemoQ.ActivatorLib.cSerialNumber.{dtor}, (void*) &number);
}
}
MemoQ.ActivatorLib.cSerialNumber.{dtor}(&number);
Label_01FE:
num3 = 0;
try
{
num4 = (byte) flag;
}
fault
{
if (num3 == 0)
{
___CxxCallUnwindDtor(MemoQ.ActivatorLib.cSerialNumber.{dtor}, (void*) &number);
}
}
return (bool) num4;
}
[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)