2000-06-14, 18:52
  #1
Medlem
Hejsan, någon som vet hur man ändrar ett JNE eller JE kommando till att alltid hoppa eller aldrig hoppa, NOP och JMP kraschar ju programmet lite då och då...

Alltså jag vill inte byta ut dem mot varandra.
Citera
2000-06-14, 19:10
  #2
Medlem
JNE/JE

hej jag heter också jonas, ska vi träffas?
Citera
2000-06-14, 19:40
  #3
Medlem
JNE/JE

Om det är en CMP någonstans före kunde du ju pröva med att ändra den till ex. CMP 0,1 eller liknande, vilket alltid blir falskt (ZF=0) och då hoppar ju alltid JNE, CMP 1,1 så hoppar JE alltid, osv. Om det inte är en CMP före måste du hitta nåt annat sätt att ändra ZF på.
Citera
2000-06-14, 20:39
  #4
Medlem
JNE/JE

Ok, men detta går alltså att göra med en HEX-editor?
Ändras inte hex värdena för t.ex. AX beroende på vart man är i koden?
Citera
2000-06-14, 21:35
  #5
Medlem
JNE/JE

Jonas:
Brukar JMP krascha program? Jag har aldrig haft några sådana problem... Snackar vi win32 asm eller dos eller vad (utgår från att det är x86 det gäller)?
Vidare, vad fan är NOP bra för? Har aldrig fattat det riktigt, kan man säga att en NOP gör detsamma som:

jmp over
db ?
over:


Jonas & nörd:
Kan man inte sätta ZF på samma sätt som man sätter typ IF och CF? alltså med STI(Set Interrupt Flag) och STC?
Citera
2000-06-14, 22:02
  #6
Medlem
JNE/JE

Ursäkta mig, jag var kanske lite otydlig när jag formulerade min fråga, när program är färdigkompilerade så motsvarar Assemblerkommandona Hex-koder (men det vet du nog). Jag vill alltså ändra t.ex. JNE som är "0F 85" alternativt ett gäng programrader mot något som gör ett ovilkorligt hopp eller mot något som inte gör någonting alls (NOP) och detta hexadecimalt i ett färdigkompilerat program.

Jag har aldrig testat ändra det hexadecimalt i ett program, men jag vet att det brukar hänga sig när man NOP:ar ett JNE i softice.

Förresten är jag över huvud taget osäker på hur man ändrar dem eftersom NOP kommandot tar upp mindre plats än JE, JNE, JB osv...

NOP betyder "No operation" och gör inget över huvud taget
Citera
2000-06-14, 23:16
  #7
Medlem
JNE/JE

skaffa softice eller win32dasm så går det bra..
Citera
2000-06-15, 01:39
  #8
Medlem
JNE/JE

om du ska nop:a en instruktion ska du se till att nop:a hela instruktionen inte bara första byten... du kan se hur stor en instruktion är med kommandot code on i softice. t.ex en jmp/jz/jne instruktion är vanligtvis 2 byte, då lägger du helt enkelt in 2 nopar
ska du sen hex editera programmet sen bör du anteckna vilka bytes som ligger runt dom bytes du ska patcha så du inte patchar fel ställe, ja du fattar säkert.
Citera
2000-06-15, 11:56
  #9
Medlem
JNE/JE

(Nu är mina Assembler kunskaper lite sådär 15 år gamla, men..)

NOP = NO Operation

Typ, du har:

JSR kopierings skydd
Start
...stuff...
JMP Start

Kopierings skydd.

Om du nu i en hex editor skriver in NOP på de bytes det står
JSR kopierings skydd, så har du knäckt spelets kopierings skydd.
Du kan även JMP'a direkt till start. Grundläggande spelcracking.

NOP kan även användas för att timea saker, fast det finns bättre timers.

Mvh
Cd ..
Citera
2000-06-15, 13:32
  #10
Medlem
JNE/JE

Tack för hjälpen, jag ser nu att man måste NOP:a flera gånger i softice för att hela kommandot ska tas bort. Det var nog det jag gjorde fel på förut, annars bildes det ju ett helt nytt komando bakom.
Citera
2000-06-16, 11:35
  #11
JNE/JE

Säg att du är i en hexeditor...

Du ser alltså 7405 (je/jz 5 bytes fram om zflaggan är noll)
eller 7505 (jne/jnz 5 bytes fram om zflaggan inte är noll).

Om du vill ta bort något av ovanstående helt skriver du helt enkelt över med:
9090.

t.ex. 7405 blir 9090 (No Operation)

Allt klart nu eller....?
Citera

Skapa ett konto eller logga in för att kommentera

Du måste vara medlem för att kunna kommentera

Skapa ett konto

Det är enkelt att registrera ett nytt konto

Bli medlem

Logga in

Har du redan ett konto? Logga in här

Logga in