常見修改(機器碼)

字號:

74=>75 74=>90 74=>EB
    75=>74 75=>90 75=>EB
    jnz->nop
    75->90(相應的機器碼修改)
    jnz -> jmp
    75 -> EB(相應的機器碼修改)
    jnz -> jz
    75->74 (正常) 0F 85 -> 0F 84(特殊情況下,有時,相應的機器碼修改)
    四.兩種不同情況的不同修改方法
    1.修改為jmp
    je(jne,jz,jnz) =>jmp相應的機器碼EB (出錯信息向上找到的第一個跳轉(zhuǎn))jmp的作用是絕對跳,無條件跳,從而跳過下面的出錯信息
    xxxxxxxxxxxx 出錯信息,例如:注冊碼不對,sorry,未注冊版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can’t save in Shareware/Demo"等 (我們希望把它跳過,不讓它出現(xiàn))
    。。。
    。。。
    xxxxxxxxxxxx 正確路線所在
    2.修改為nop
    je(jne,jz,jnz) =>nop相應的機器碼90 (正確信息向上找到的第一個跳轉(zhuǎn)) nop的作用是抹掉這個跳轉(zhuǎn),使這個跳轉(zhuǎn)無效,失去作用,從而使程序順利來到緊跟其后的正確信息處
    xxxxxxxxxxxx 正確信息,例如:注冊成功,謝謝您的支持等(我們希望它不被跳過,讓它出現(xiàn),程序一定要順利來到這里)
    。。。
    。。。
    xxxxxxxxxxxx 出錯信息(我們希望不要跳到這里,不讓它出現(xiàn))它們在存貯器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù).
    1. 通用數(shù)據(jù)傳送指令.
    MOV 傳送字或字節(jié).
    MOVSX 先符號擴展,再傳送.
    MOVZX 先零擴展,再傳送.
    PUSH 把字壓入堆棧.
    POP 把字彈出堆棧.
    PUSHA 把AX,CX,DX,BX,SP,BP,SI,DI依次壓入堆棧.
    POPA 把DI,SI,BP,SP,BX,DX,CX,AX依次彈出堆棧.
    PUSHAD 把EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI依次壓入堆棧.
    POPAD 把EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX依次彈出堆棧.
    BSWAP 交換32位寄存器里字節(jié)的順序
    XCHG 交換字或字節(jié).( 至少有一個操作數(shù)為寄存器,段寄存器不可作為操作數(shù))
    CMPXCHG 比較并交換操作數(shù).( 第二個操作數(shù)必須為累加器AL/AX/EAX )
    XADD 先交換再累加.( 結(jié)果在第一個操作數(shù)里 )
    XLAT 字節(jié)查表轉(zhuǎn)換.
    ── BX 指向一張 256 字節(jié)的表的起點, AL 為表的索引值 (0-255,即
    0-FFH); 返回 AL 為查表結(jié)果. ( [BX+AL]->AL )
    2. 輸入輸出端口傳送指令.
    IN I/O端口輸入. ( 語法: IN 累加器, {端口號│DX} )
    OUT I/O端口輸出. ( 語法: OUT {端口號│DX},累加器 )
    輸入輸出端口由立即方式指定時, 其范圍是 0-255; 由寄存器 DX 指定時,
    其范圍是 0-65535.
    3. 目的地址傳送指令.
    LEA 裝入有效地址.