74=>75 74=>90 74=>EB
75=>74 75=>90 75=>EB
jnz->nop
75->90(相應(yīng)的機(jī)器碼修改)
jnz -> jmp
75 -> EB(相應(yīng)的機(jī)器碼修改)
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情況下,有時(shí),相應(yīng)的機(jī)器碼修改)
四.兩種不同情況的不同修改方法
1.修改為jmp
je(jne,jz,jnz) =>jmp相應(yīng)的機(jī)器碼EB (出錯(cuò)信息向上找到的第一個(gè)跳轉(zhuǎn))jmp的作用是絕對(duì)跳,無(wú)條件跳,從而跳過(guò)下面的出錯(cuò)信息
xxxxxxxxxxxx 出錯(cuò)信息,例如:注冊(cè)碼不對(duì),sorry,未注冊(cè)版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can’t save in Shareware/Demo"等 (我們希望把它跳過(guò),不讓它出現(xiàn))
。。。
。。。
xxxxxxxxxxxx 正確路線(xiàn)所在
2.修改為nop
je(jne,jz,jnz) =>nop相應(yīng)的機(jī)器碼90 (正確信息向上找到的第一個(gè)跳轉(zhuǎn)) nop的作用是抹掉這個(gè)跳轉(zhuǎn),使這個(gè)跳轉(zhuǎn)無(wú)效,失去作用,從而使程序順利來(lái)到緊跟其后的正確信息處
xxxxxxxxxxxx 正確信息,例如:注冊(cè)成功,謝謝您的支持等(我們希望它不被跳過(guò),讓它出現(xiàn),程序一定要順利來(lái)到這里)
。。。
。。。
xxxxxxxxxxxx 出錯(cuò)信息(我們希望不要跳到這里,不讓它出現(xiàn))它們?cè)诖尜A器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù).
1. 通用數(shù)據(jù)傳送指令.
MOV 傳送字或字節(jié).
MOVSX 先符號(hào)擴(kuò)展,再傳送.
MOVZX 先零擴(kuò)展,再傳送.
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é).( 至少有一個(gè)操作數(shù)為寄存器,段寄存器不可作為操作數(shù))
CMPXCHG 比較并交換操作數(shù).( 第二個(gè)操作數(shù)必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結(jié)果在第一個(gè)操作數(shù)里 )
XLAT 字節(jié)查表轉(zhuǎn)換.
── BX 指向一張 256 字節(jié)的表的起點(diǎn), AL 為表的索引值 (0-255,即
0-FFH); 返回 AL 為查表結(jié)果. ( [BX+AL]->AL )
2. 輸入輸出端口傳送指令.
IN I/O端口輸入. ( 語(yǔ)法: IN 累加器, {端口號(hào)│DX} )
OUT I/O端口輸出. ( 語(yǔ)法: OUT {端口號(hào)│DX},累加器 )
輸入輸出端口由立即方式指定時(shí), 其范圍是 0-255; 由寄存器 DX 指定時(shí),
其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.
75=>74 75=>90 75=>EB
jnz->nop
75->90(相應(yīng)的機(jī)器碼修改)
jnz -> jmp
75 -> EB(相應(yīng)的機(jī)器碼修改)
jnz -> jz
75->74 (正常) 0F 85 -> 0F 84(特殊情況下,有時(shí),相應(yīng)的機(jī)器碼修改)
四.兩種不同情況的不同修改方法
1.修改為jmp
je(jne,jz,jnz) =>jmp相應(yīng)的機(jī)器碼EB (出錯(cuò)信息向上找到的第一個(gè)跳轉(zhuǎn))jmp的作用是絕對(duì)跳,無(wú)條件跳,從而跳過(guò)下面的出錯(cuò)信息
xxxxxxxxxxxx 出錯(cuò)信息,例如:注冊(cè)碼不對(duì),sorry,未注冊(cè)版不能...,"Function Not Avaible in Demo" 或 "Command Not Avaible" 或 "Can’t save in Shareware/Demo"等 (我們希望把它跳過(guò),不讓它出現(xiàn))
。。。
。。。
xxxxxxxxxxxx 正確路線(xiàn)所在
2.修改為nop
je(jne,jz,jnz) =>nop相應(yīng)的機(jī)器碼90 (正確信息向上找到的第一個(gè)跳轉(zhuǎn)) nop的作用是抹掉這個(gè)跳轉(zhuǎn),使這個(gè)跳轉(zhuǎn)無(wú)效,失去作用,從而使程序順利來(lái)到緊跟其后的正確信息處
xxxxxxxxxxxx 正確信息,例如:注冊(cè)成功,謝謝您的支持等(我們希望它不被跳過(guò),讓它出現(xiàn),程序一定要順利來(lái)到這里)
。。。
。。。
xxxxxxxxxxxx 出錯(cuò)信息(我們希望不要跳到這里,不讓它出現(xiàn))它們?cè)诖尜A器和寄存器、寄存器和輸入輸出端口之間傳送數(shù)據(jù).
1. 通用數(shù)據(jù)傳送指令.
MOV 傳送字或字節(jié).
MOVSX 先符號(hào)擴(kuò)展,再傳送.
MOVZX 先零擴(kuò)展,再傳送.
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é).( 至少有一個(gè)操作數(shù)為寄存器,段寄存器不可作為操作數(shù))
CMPXCHG 比較并交換操作數(shù).( 第二個(gè)操作數(shù)必須為累加器AL/AX/EAX )
XADD 先交換再累加.( 結(jié)果在第一個(gè)操作數(shù)里 )
XLAT 字節(jié)查表轉(zhuǎn)換.
── BX 指向一張 256 字節(jié)的表的起點(diǎn), AL 為表的索引值 (0-255,即
0-FFH); 返回 AL 為查表結(jié)果. ( [BX+AL]->AL )
2. 輸入輸出端口傳送指令.
IN I/O端口輸入. ( 語(yǔ)法: IN 累加器, {端口號(hào)│DX} )
OUT I/O端口輸出. ( 語(yǔ)法: OUT {端口號(hào)│DX},累加器 )
輸入輸出端口由立即方式指定時(shí), 其范圍是 0-255; 由寄存器 DX 指定時(shí),
其范圍是 0-65535.
3. 目的地址傳送指令.
LEA 裝入有效地址.