Rátaláltam egy rosszindulatú programra, amelyet elemzek, és megállapítottam, hogy valamilyen matematikával véletlenszerűen kiválaszt egy regisztrációt egy adott utasításhoz.
Amit nem értek, hogy ez a művelet számított miben múlik?
Itt van egy példa arra, amire gondolok
Tegyük fel, hogy véletlenszerűen szerettem volna felvenni egy regisztert az utasításhoz
DWORD PTR DS HOZZÁADÁSA: [0], EAX
Úgy tudjuk, hogy az utasítás opkódja 01 05 00 00 00 00
A félkövér szám jelöli az utasítás regisztrációját.
05 == EAX0D == ECX
Ennek jobb megmagyarázásához itt találja az utasítást az összes regiszterrel.
0041580B 0105 00000000 ADD DWORD PTR DS: [0], EAX00415811 010D 00000000 ADD DWORD PTR DS: [0], ECX00415817 0115 00000000 ADD DWORD PTR DS: [0], EDX0041581D 011D 00000000 EBX00415823 0125 00000000 DWORD PTR DS ADD: [0], ESP00415829 012D 00000000 DWORD PTR DS ADD: [0], EBP0041582F 0135 00000000 ADD DWORD PTR DS: [0], ESI00415835 013D 00000000 ADD DWORD PTR DS: [0], EDI
A kártevő 0 (EAX) és 7 ( EDI)
A szám előbb SHLed lesz a 3-as számmal, majd VAGY 5-tel van a megfelelő regiszter opkód megszerzéséhez. Tehát a kérdésem az, hogy a szerző hogyan jutott erre?
Azt mondanám, hogy az SHL REG, 3 megegyezik a REG * 8-mal, vagyis a max regiszterek számával? de miért kell VAGYUNK 05-tel? azért van, mert ennek az utasításnak a kezdő opkódja 05?
Van valakinek jobb magyarázata erre? vagy bármilyen tippszó a jobb megértés érdekében?