Imam sledecu funkciju
DWORD func(DWORD a)
{
DWORD b;
b = a * 0x12345678 + 0x11111111;
return b;
}
Da je u pitanju cista matematika inverzna funcija bi bila ovakva:
DWORD inverse(DWORD b)
{
DWORD a;
a = (b - 0x11111111) / 0x12345678;
return a;
}
Medjutim ovo nije slucaj zato sto se pri proracunu odbacuju visi delovi rezultata (ne moze da stane u DWORD).
U sustini mislim da je i nemoguce napraviti inverznu funkciju u ovom slucaju ali ajde da pokusam, mozda ovde postoji neko ko provali ovo.
Jedino sto sam ja uspeo je ovaj banalan (brutalan) pristup:
DWORD inverse(DWORD b)
{
DWORD a;
for(a = 0; a < 0xFFFFFFFF; a++)
if(func(a) == b) return a;
return 0;
}
Napominjem da se nikakve izmene ne mogu raditi u prvobitnoj funkciji (odsecanja u racunu su neophodna). Meni treba resenje za inverznu funkciju.