Kezdőoldal » Számítástechnika » Programozás » Native Image (*.ni.dll)...

Native Image (*.ni.dll) fájban egy adott JNZ utasítást hogyan tudnék megpatch-elni az eredeti fájlban?

Figyelt kérdés

Van egy program, ami használ egy dll fájlt. Szeretném módosítani a program futását, ezért az OllyDbg használatával megtaláltam egy bizonyos JNZ utasítást, amit NOP-ra át kellene írni.

A gondom az, hogy ez az utasítás nem az eredeti *.dll-ben van, hanem egy *.ni.dll-ben, vagyis egy native image-ben.


Az lenne a kérdésem, hogy ilyen esetben hogyan tudnám hex editorral megpatch-elni az eredeti dll-t, hogy a kiválasztott JNZ megváltozzon?


Olvasgattam bizonyos CIL utasításokról, amik az eredeti DLL-ből futásidőben létrehozzák a tényleges kódot, hogy elvileg ezeket a CIL utasításokat kellene módosítani. De ezt hogyan? Hogy találom meg, melyiket kell átírni és hogyan kell átírni?



#patch #.dll #native image
2023. okt. 21. 01:04
 1/5 anonim ***** válasza:
72%

Elképzelhető, hogy nem lehet, mert önellenőrzést hajt végre a .dll

Ha lehet, akkor ki kell nézni a NOP gépi kódját (általában zéró (00h)) és azt beírni a JNZ helyett.

2023. okt. 21. 06:15
Hasznos számodra ez a válasz?
 2/5 anonim ***** válasza:
71%

x86-on a NOP opcode-ja 0x90, ezt kell beütni. De arra figyelj, hogy két féle jnz van:

Short jump: 75 cb

Near jump: 0f 85 cw


Mindkettönél az argumentumát is ki kell patchelni(a cb az 1 byte, a cw az 2 byte)



Olvasgasd az Intel® 64 and IA-32 Architectures Software Developer’s Manual-t

2023. okt. 21. 13:25
Hasznos számodra ez a válasz?
 3/5 anonim ***** válasza:
59%
Ha esetleg önellenőrzést hajt végre a .dll, akkor nem úszol meg egy jó kis debug sessiont, de azért nem kell megijedni. Megpatcheled az önellenőrző függvényt is.
2023. okt. 21. 20:05
Hasznos számodra ez a válasz?
 4/5 A kérdező kommentje:

Köszönöm a válaszokat, de sajnos félreértettétek a kérdésemet.

Ha csak simán, hagyományos módon meg kellene patchelni az adott utasítás byte-ját hex editorban, az nem lenne gond. A gondom az, hogy debuggerrel a gépi kódú, assemler utasítást találtam meg (JNZ), de ez csak ki van csomagolva futásidőben a CIL leíró nyelvből.


Azóta olvasgattam, hogy ez tipikus megoldás dotnet alatt írt programoknál.


Az eredeti dll-t visszafejtve nem az assembler utasításokat látom, hanem a CIL (intermediate language) nyelven írt utasításokat. Ilyeneket, hogy btrue, bfalse, callvirt, ldarg, stb. A kérdésem, hogy ha az OllyDbg debuggerben, a már kicsomagolt assembler utasítások között megtaláltam a keresett JNZ-t, azt hogyan tudom visszakeresni, hogy az eredeti dll fájlban melyik vonatkozó CIL utasítást kell NOP-ra tennem?

2023. okt. 23. 23:53
 5/5 anonim ***** válasza:
A jump utasítás lehet if, vagy fv hívás eredménye is. Ha tudod, hogx az adott kódrészlet mit csinál assemblyben, akkor meg tudod keresni, hogy logikailag a CIL-ben ez melyikhez tartozhat. Ha nagy a fájlod, akkor ez elég hoszadalmas kód olvasgatás lesz viszont.
2023. okt. 24. 14:05
Hasznos számodra ez a válasz?

További kérdések:




Minden jog fenntartva © 2025, www.gyakorikerdesek.hu
GYIK | Szabályzat | Jogi nyilatkozat | Adatvédelem | Cookie beállítások | WebMinute Kft. | Facebook | Kapcsolat: info(kukac)gyakorikerdesek.hu

A weboldalon megjelenő anyagok nem minősülnek szerkesztői tartalomnak, előzetes ellenőrzésen nem esnek át, az üzemeltető véleményét nem tükrözik.
Ha kifogással szeretne élni valamely tartalommal kapcsolatban, kérjük jelezze e-mailes elérhetőségünkön!