• 15 апреля стартует «Курс «SQL-injection Master» ©» от команды The Codeby

    За 3 месяца вы пройдете путь от начальных навыков работы с SQL-запросами к базам данных до продвинутых техник. Научитесь находить уязвимости связанные с базами данных, и внедрять произвольный SQL-код в уязвимые приложения.

    На последнюю неделю приходится экзамен, где нужно будет показать свои навыки, взломав ряд уязвимых учебных сайтов, и добыть флаги. Успешно сдавшие экзамен получат сертификат.

    Запись на курс до 25 апреля. Получить промодоступ ...

создание функции

  • Автор темы ImperoMS
  • Дата начала
I

ImperoMS

доброе время суток!
пишу свою функцию:
по идее она должна преобразованную последовательность Mi(32 байта) преобразовывать в массив DWORD (16 элементов по 4 байта).

[codebox]void _mf_Transform_V(BYTE *Mi, DWORD *VMi)
{
//H=4E4E9C9C 9C9C4E4E 9C9C4E4E 4E4E9C9C 9C9C4E4E 4E4E9C9C 4E4E9C9C 9C9C4E4E
memset((char*)VMi,0,65);
DWORD H[8];
memset((char*)H,0,33);
H[0]= 0x4E4E9C9C;
H[1]= 0x9C9C4E4E;
H[2]= 0x9C9C4E4E;
H[3]= 0x4E4E9C9C;
H[4]= 0x9C9C4E4E;
H[5]= 0x4E4E9C9C;
H[6]= 0x4E4E9C9C;
H[7]= 0x9C9C4E4E;

DWORD v[16];
memset((char*)v,0,65);
v[0]= 0xD1845AC6;
v[1]= 0xAC3D25C6;
v[2]= 0xF467247D;
v[3]= 0x079294AB;
v[4]= 0xF19A24CD;
v[5]= 0xB47D25C6;
v[6]= 0xD4522491;
v[7]= 0x0D817489;
v[8]= 0x87D45A6F;
v[9]= 0x3D5721C6;
v[10]= 0x573714C8;
v[11]= 0x078274DB;
v[12]= 0x2A8A1A76;
v[13]= 0xDC6715C6;
v[14]= 0xB4F1257D;
v[15]= 0x0B1294AC;

DWORD ViSumH[8];
memset(ViSumH,0,33);
DWORD K[8];
memset(K,0,33);
DWORD KsumVi[8];
memset(KsumVi,0,33);
BYTE ki[4];
for(int j = 0; j<=7;j++)
{
memset(ki,0,5);
for (int l=0;l<=3;l++)
{
ki[l] = Mi[l + 4*j];
}
K[0] = *(DWORD*)ki;
KsumVi[j] = (K[0]+v[j])%0xFFFFFFFF;
}
for(int i=8;i<=15;i++)
{
ViSumH[i-8] = (v+H[i-8])%0xFFFFFFFF;
}

for (int i=0;i<8;i++)
VMi = KsumVi;
for (int i=8;i<16;i++)
VMi = ViSumH[i-8];

// ShowMessage("VMi"); - если не комментить, то работает нормально
}[/codebox]

проблема в следующем, когда я в другой функции использую Vmi, то ее длина получается на 8 больше, чем надо, т.е. 72 а не 64.

[codebox] _mf_Transform_V(Mi,V);
_mf_Preobraz_p0(V);[/codebox]

вот объявление переменных:

[codebox] DWORD V[16];
memset((char*)V,0,65);
BYTE Mi[32];
memset((char*)Mi,0,33);[/codebox]
 
E

European

Дебаггер в руки и пошаговая отладка
 
I

ImperoMS

а как организовать сложение по модулю 2 в 32?
вот так мона?

(a+:)%0xFFFFFFFF
 
Мы в соцсетях:

Обучение наступательной кибербезопасности в игровой форме. Начать игру!