ISCC的一道reverse题目
逆向算法不都是倒着写一遍吗,为啥出来个这个东西我感觉写的也没有毛病啊
#include <stdio.h>
#include <stdlib.h>
#include <string>
#include <memory.h>
int __cdecl mix(char* a1, char* Str, int a3)
{
char v3; // dl
int result; // eax
char v5; //
int n; //
int m; //
int l; //
size_t k; //
int j; //
int i; //
for (i = 0; i < a3; ++i)
a1 -= 64;
for (j = 0; j < a3; ++j)
a1 -= a1;
for (k = 0; k < strlen(Str); ++k)
Str %= 64;
for (l = 0; l < a3; ++l)
a1 += Str;
for (m = 0; a3 / 2 > m; ++m)
{
v5 = a1;
a1 = a1;
a1 = v5;
}
for (n = 0; ; ++n)
{
result = n;
if (n >= a3)
break;
if ((Str & 1) != 0)
v3 = a1 + 2;
else
v3 = a1 + 1;
a1 = v3;
}
return result;
}
void jiemi(char* flag) {
char temp = {67,-33,20};
for (int n = 0; ; ++n)
{
char v3;
int result = n;
if (n >= 3)
break;
if ((temp & 1)== 0)
v3 = flag + 2;
else
v3 = flag + 1;
flag = v3;
}
for (int m = 0; 3 / 2 > m; ++m)
{
int v5 = flag;
flag = flag;
flag = v5;
}
for (int l = 0; l < 3; ++l)
flag =temp- temp;
for (int j = 0; j < 3; ++j)
flag =temp+ flag;
for (int i = 0; i < 3; ++i)
flag =temp+ 64;
}
int __cdecl main()
{
char Str; // BYREF
char v5; // BYREF
int v6; //
char flag; // BYREF
char reverse; // BYREF
int strlength; //
int i; //
v6 = 0;
memset(v5, 0, 4 * (((Str - v5 + 64) & 0xFFFFFFFC) >> 2));
Str = 67;
Str = -33;
Str = 20;
v5 = 3;
v5 = 13;
v5 = 44;
v5 = 9;
v5 = 1;
v5 = 23;
v5 = 23;
v5 = 8;
v5 = -4;
v5 = 43;
v5 = -6;
v5 = 20;
v5 = 23;
v5 = -7;
v5 = 37;
v5 = -11;
v5 = 34;
v5 = 61;
v5 = -50;
v5 = 24;
v5 = 22;
v5 = 10;
memcpy(reverse, "REVERSE", sizeof(reverse));
strlength = strlen(Str);
jiemi(v5);
puts(v5);
puts("\nflag正确!");
return 0;
}
文件下载地址
http://iscc.isclab.org.cn/static/uploads/d651b538a6ac6507c129a5d4339c0363/Analysis.exe
你看一下mix的参数,mix函数内部的Str应该是“REVERSE”
页:
[1]