Dejavu Опубликовано 23 сентября, 2017 Поделиться Опубликовано 23 сентября, 2017 (изменено) Решаю CrackMe с помощью .NET Reflector, нашел функцию, которая проверяет правильность, но не знаю C#. Времени погружаться в язык пока что нет. Не подскажете, как работает данная функция? Скрытый текст [return: MarshalAs(UnmanagedType.U1)] internal static unsafe bool modopt(CallConvCdecl) Check(basic_string<char,std::char_traits<char>,std::allocator<char> > modreq(IsCopyConstructed)* MD5, basic_string<char,std::char_traits<char>,std::allocator<char> > modreq(IsCopyConstructed)* Email) { bool flag; try { try { basic_string<char,std::char_traits<char>,std::allocator<char> > local7; std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{ctor}(&local7, &??_C@_00CNPNBAHC@?$AA@); try { sbyte modopt(IsSignUnspecifiedByte) modopt(IsConst)* numPtr; basic_string<char,std::char_traits<char>,std::allocator<char> > local; basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst) local2; basic_string<char,std::char_traits<char>,std::allocator<char> > local3; basic_string<char,std::char_traits<char>,std::allocator<char> > local4; basic_string<char,std::char_traits<char>,std::allocator<char> > local5; basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst) local6; int start = GetStart(); basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst)* localPtr7 = &local6; *((int*) (&local6 + 16)) = 0; *((int*) (&local6 + 20)) = 0; std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(&local6, false, 0); std.basic_string<char,std::char_traits<char>,std::allocator<char> >.assign(&local6, Email, 0, uint.MaxValue); basic_string<char,std::char_traits<char>,std::allocator<char> >* localPtr4 = md5(&local5, &local6); try { std.basic_string<char,std::char_traits<char>,std::allocator<char> >.=(Email, localPtr4); } fault { ___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, (void*) &local5); } std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(&local5, true, 0); basic_string<char,std::char_traits<char>,std::allocator<char> >* localPtr6 = &local4; *((int*) (&local4 + 0x10)) = 0; *((int*) (&local4 + 20)) = 0; std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(&local4, false, 0); std.basic_string<char,std::char_traits<char>,std::allocator<char> >.assign(&local4, Email, 0, uint.MaxValue); basic_string<char,std::char_traits<char>,std::allocator<char> >* localPtr3 = GetString(&local3, (basic_string<char,std::char_traits<char>,std::allocator<char> > modreq(IsCopyConstructed)*) &local4, start); try { std.basic_string<char,std::char_traits<char>,std::allocator<char> >.=(&local7, localPtr3); } fault { ___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, (void*) &local3); } std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(&local3, true, 0); basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst)* localPtr5 = &local2; basic_string<char,std::char_traits<char>,std::allocator<char> >* modopt(IsConst) modopt(IsConst) str = std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{ctor}(&local2, (basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst)* modopt(IsImplicitlyDereferenced)) &local7); basic_string<char,std::char_traits<char>,std::allocator<char> >* localPtr = md5(&local, str); try { std.basic_string<char,std::char_traits<char>,std::allocator<char> >.=(&local7, localPtr); } fault { ___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, (void*) &local); } std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(&local, true, 0); uint num = *((uint*) (MD5 + 16)); if (16 <= *(((int*) (MD5 + 20)))) { numPtr = *((sbyte modopt(IsSignUnspecifiedByte) modopt(IsConst)**) MD5); } else { numPtr = MD5; } flag = std.basic_string<char,std::char_traits<char>,std::allocator<char> >.compare((basic_string<char,std::char_traits<char>,std::allocator<char> > modopt(IsConst)* modopt(IsConst) modopt(IsConst)) &local7, 0, *((uint*) (&local7 + 16)), numPtr, num) == 0; } fault { ___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, (void*) &local7); } std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(&local7, true, 0); } fault { ___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, MD5); } std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(MD5, true, 0); } fault { ___CxxCallUnwindDtor(std.basic_string<char,std::char_traits<char>,std::allocator<char> >.{dtor}, Email); } std.basic_string<char,std::char_traits<char>,std::allocator<char> >._Tidy(Email, true, 0); return flag; } Изменено 23 сентября, 2017 пользователем Dejavu Ссылка на комментарий Поделиться на другие сайты Поделиться
Рекомендуемые сообщения