这个网名有点难 发表于 2017-7-11 18:38

置入代码与远程汇编 的问题,来个大神解释一下

.版本 2
.子程序 置入坐标CALL
.参数 触发地址, 整数型
.参数 X, 整数型
.参数 Y, 整数型
.参数 Z, 整数型

置入代码 ({ 139, 117, 8, 139, 62, 255, 117, 20, 255, 117, 16, 255, 117, 12, 139, 135, 168, 0, 0, 0, 139, 206, 139, 192, 139, 192, 139, 192, 255, 208 })

转换器,转换汇编结果
mov esi,
mov edi,
push
push
push
mov eax,
mov ecx,esi
mov eax,eax
mov eax,eax
mov eax,eax
call eax

远程汇编易语言写法
.版本 2

.子程序 顺图坐标CALL
.参数 触发地址, 整数型, , +8
.参数 X, 整数型, , +c
.参数 Y, 整数型, , +10
.参数 Z, 整数型, , +14

置汇编代码 ({})
Pushad ()
Mov_ESI (触发地址)
Mov_EAX_Ptr_ESI ()
Mov_EDI_EAX ()
Mov_EAX_Ptr_EAX_Add (十六到十 (“c4”))
Mov_ECX_ESI ()
Call_EAX ()
Mov_EAX (Z)
Mov_ECX (Y)
Mov_EDX (X)
Push_EAX ()
Push_ECX ()
Push_EDX ()
Mov_EAX_Ptr_EDI_Add (十六到十 (“A0”))
Mov_ECX_ESI ()
Call_EAX ()
Popad ()
ret ()
开始Virus (进程id)
汇编远程执行 (取汇编代码 ())
结束Virus ()
清空汇编代码 ()

这个是怎么变换过来的,为什么远程汇编和汇编的套路不一样,
有大神解释一下吗,不想一成不变的复制张贴!
汇编到远程汇编的写法,真的没看懂!

梦幻110110 发表于 2017-7-11 20:12

mov esi,      =触发地址
Mov_ESI (触发地址)
-----------------------------------------
mov edi,
是地址的值给edi,需要下面的来写,意思一样先给eax,eax在给edi,   Ptr_ESI ()是把的值给eax,不是esi给eax,他2个是不一样的。
Mov_EAX_Ptr_ESI ()
Mov_EDI_EAX ()
-------------------------------------------
push
push
push
是push3个参数
堆栈操作指令
  1压栈指令
  (1) 格式:PUSH SRC
  功能:将源操作数压下堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器。当操作数数据类型为字类型,压栈操作使SP值减2;当数据类型为双字类型,压栈操作使SP值减4。
Mov_EAX (Z)
Mov_ECX (Y)
Mov_EDX (X)
---------------------------------------------------
mov eax,
=Ptr_EAX_Add (十六到十 (“c4”))给eax
Mov_EAX_Ptr_EAX_Add (十六到十 (“c4”))
Mov_ECX_ESI ()
这2个好像写法不一样
我也没办法你自己多看看汇编就懂了





MOV MOVZX MOVSX的不同点
将源操作数由8位扩展到16位送目的操作数,或由16位扩展到32位送目的操作数。其中MOVSX是按有符号数扩展,MOVZX是按无符号数扩展。无符号数或正数高位扩展为0,负数高位扩展为全“1”。

交换指令
格式:XCHG OPR1,OPR2
  功能:交换操作数OPR1和OPR2的值,操作数数据类型为字节、字或双字。允许通用寄存器之间,通用寄存器和存储器之间交换数据。
  例 3.17
纯文本查看 复制代码
?
1
2
3
4
XCHG AX,BX;通用寄存器之间交换数据(16位)
XCHG ESI,EDI;通用寄存器之间交换数据(32位)
XCHG BX,/;通用寄存器和存储器之间交换数据(16位)
XCHG AL,/;通用寄存器和存储器之间交换数据(8位)

  使用该指令应注意以下问题:
  ·操作数OPR1和OPR2不允许同为存储器操作数;
  ·操作数数据类型必须一致;
  ·交换指令不影响标志位。
  如要实现存储器操作数交换,可用如下指令实现:
纯文本查看 复制代码
?
1
2
3
MOV AL,BLOCK1
XCHG AL,BLOCK2
MOV BLOCK1,AL

二、堆栈操作指令
  1压栈指令
  (1) 格式:PUSH SRC
  功能:将源操作数压下堆栈,源操作数允许为16位或32位通用寄存器、存储器和立即数以及16位段寄存器。当操作数数据类型为字类型,压栈操作使SP值减2;当数据类型为双字类型,压栈操作使SP值减4。
  例 3.19
纯文本查看 复制代码
?
1
2
3
4
5
6
PUSH AX          ;通用寄存器操作数入栈(16位)
PUSH EBX          ;通用寄存器操作数入栈(32位)
PUSH          ;存储器操作数入栈(16位)
PUSH DWORD PTR     ;存储器操作数入栈(32位)
PUSHW 0A123H        ;立即数入栈(16位)
PUSHD 20H         ;立即数入栈(32位)

  (2) 格式:PUSHA
       PUSHAD
  功能:PUSHA将16位通用寄存器压入堆栈,压栈顺序为AX,CX,DX,BX,SP,BP,SI,DI。
PUSHAD将32位通用寄存器压入堆栈,压栈顺序为EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI。
  2出栈指令
  (1) 格式:POP DEST
  功能:从栈顶弹出操作数送入目的操作数。目的操作数允许为16或32位通用寄存器、存储器和16位段寄存器。当操作数数据类型为字类型,出栈操作使SP加2;当操作数数据类型为双字类型,出栈操作使SP加4。
  例 3.20
纯文本查看 复制代码
?
1
2
3
4
POP AX          ;操作数出栈送寄存器(16位)
POP ECX          ;操作数出栈送寄存器(32位)
POP          ;操作数出栈送存储器(16位)
POP DWORD PTR     ;操作数出栈送存储器(32位)

  (2) 格式:POPA
       POPAD
  功能:POPA从堆栈移出16字节数据,并且按顺序存入寄存器DI,SI,BP,SP,BX,DX,CX,AX中。
  POPAD从堆栈移出32字节数据,并且按顺序存入寄存器EDI,ESI,EBP,ESP,EBX,EDX,ECX,EAX中。
  使用堆栈操作指令应注意以下问题。
  (1) 目的操作数不允许为CS以及立即数。
  (2) 堆栈操作指令不影响标志位。
算术运算指令
  80x86指令包括加、减、乘、除四种基本算术运算操作及十进制算术运算调整指令。二进制加、减法指令,带符号操作数采用补码表示时,无符号数和带符号数据运算可以使用相同的指令。二进制乘、除法指令分带符号数和无符号数运算指令。
  一、加法指令
  格式:ADDDEST,SRC
     ADCDEST,SRC
  功能:ADD是将源操作数与目的操作数相加,结果传送到目的操作数。ADC是将源操作数与目的操作数以及CF(低位进位)值相加,结果传送到目的操作数。
  源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。
ADD,ADC指令影响标志位为OF,SF,ZF,AF,PF,CF。
  例 3.26
纯文本查看 复制代码
?
1
2
3
MOV AX,9876H
ADD AH,AL;AX=0E76H CF=1 SF=0O F=0 ZF=0 AF=0 PF=0
ADC AH,AL;AX=8576H CF=0 SF=1O F=1 ZF=0 AF=1 PF=0

  二、减法指令
  格式:SUB DEST,SRC
     SBB DEST,SRC
  功能:SUB将目的操作数减源操作数,结果送目的操作数。SBB将目的操作数减源操作数,还要减CF(低位借位)值,结果送目的操作数。
  源操作数可以是通用寄存器、存储器或立即数。目的操作数可以是通用寄存器或存储器操作数。
SUB,SBB指令影响标志位为OF,SF,ZF,AF,PF,CF。
      三、加1减1指令
  格式:INC DEST
     DEC DEST
  功能:INC指令将目的操作数加1,结果送目的操作数。DEC指令将目的操作数减1,结果送目的操作数。目的操作数为通用寄存器或存储器操作数。
  INC,DEC指令影响标志位为OF,SF,ZF,AF,PF。
      四、交换相加指令
  格式:XADDDEST,REG
  功能:目的操作数加源操作数,结果送目的操作数。原目的操作数内容送源操作数。源操作数允许为通用寄存器。目的操作数允许为通用寄存器、存储器操作数。
  XADD指令影响标志位为OF,SF,ZF,AF,PF,CF。
  五、求补指令
  格式:NEGDEST
  功能:对目的操作数求补,用零减去目的操作数,结果送目的操作数。目的操作数为通用寄存器、存储器操作数。
  NEG指令影响标志位为OF,SF,ZF,AF,PF,CF。
  六、乘法指令
  (1) 格式:MULSRC
       IMULSRC
  功能:MUL为无符号数乘法指令,IMUL为带符号数乘法指令。源操作数为通用寄存器或存储器操作数。目的操作数缺省存放在ACC(AL,AX,EAX)中,乘积存AX,DX:AX,EDX:EAX中。
  字节乘:ALSRC→AX
  字乘:AXSRC→DX∶AX
  双字乘:EAXSRC→EDX∶EAX
  MUL,IMUL指令执行后,CF=OF=0,表示乘积高位无有效数据;CF=OF=1表示乘积高位含有效数据,对其它标志位无定义。
  例 3.31
纯文本查看 复制代码
?
1
2
3
4
MUL BL;字节乘
MUL WORD PTR ;字乘
IMUL BYTE PTR ;字节乘
IMUL DWORD PTR ;双字乘

  如果使用IMUL指令,积采用补码形式表示。
  (2) 格式:IMULDEST,SRC
  功能:将目的操作数乘以源操作数,结果送目的操作数。目的操作数为16位或32位通用寄存器或存储器操作数。源操作数为16位或32位通用寄存器、存储器或立即数。
  源操作数和目的操作数数据类型要求一致。乘积仅取和目的操作数相同的位数,高位部分将被舍去,并且CF=OF=1。其它标志位无定义。
  (3) 格式:IMUL DEST,SRC1,SRC2
  功能:将源操作数SRC1与源操作数SRC2相乘,结果送目的操作数。目的操作数DEST为16位或32位,允许为通用寄存器。源操作数SRC1为16位或32位通用寄存器或存储器操作数。源操作数SRC2允许为立即数。
  例 3.32  IMULEAX,,12H
  要求目的操作数和源操作数SRC1类型相同,当乘积超出目的操作数部分,将被舍去,并且使CF=OF=1,在使用这类指令时,需在IMUL指令后加一条判断溢出的指令,溢出时转错误处理执行程序。
  七、除法指令
  格式:DIV SRC
     IDIV SRC
  功能:DIV为无符号数除法,IDIV为带符号数除法。源操作数作为除数,为通用寄存器或存储器操作数。被除数缺省在目的操作数AX,DX:AX,EDX:EAX中。
  字节除法:AX/SRC商→AL,余数→AH
  字除法:DX·AX/SRC商→AX,余数→DX
  双字除法:EDX·EAX/SRC商→EAX,余数→EDX
  由于被除数必须是除数的双倍字长,一般应使用扩展指令进行高位扩展。当进行无符号数除法时,被除数高位按0扩展为双倍除数字长。当进行有符号数除法时,被除数以补码表示。可使用扩展指令CBW,CWD,CWDE,CDQ进行高位扩展。例如:
纯文本查看 复制代码
?
1
2
3
4
MOV AX,BLOCK
CWD;被除数高位扩展
MOV BX,1000H
IDIV BX

  对于带符号除法,其商和余数均采用补码形式表示,余数与被除数同符号。当除数为零或商超过了规定数据类型所能表示的范围时,将会出现溢出现象,产生一个中断类型码为“0”的中断。执行除法指令后标志位无定义。
  八、BCD算术运算
  十进制数在机器中采用BCD码表示,以压缩格式存放,即一个字节存储2位BCD码,BCD加减法是在二进制加减运算的基础上,对其二进制结果进行调整,将结果调整成BCD码表示形式。
  (1) 格式:DAA
  功能:将存放在AL中的二进制和数,调整为压缩格式的BCD码表示形式。
  调整方法:若AL中低4位大于9或标志AF=1(表示低4位向高4位有进位),则
         AL+6→AL,1→AF,
若AL中高4位大于9,或标志CF=1,(表示高4位有进位),则
         AL+60H→AL,1→CF,
  DAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义。
  例 3.33
纯文本查看 复制代码
?
1
2
ADD AL,BL
DAA

  (2) 格式:DAS
  功能:将存放在AL中的二进制差数,调整为压缩的BCD码表示形式。
  调整方法:若AL中低4位大于9或标志AF=1(表示低4位向高位借位),则
         AL-6→AL,1→AF
若AL中高4位大于9或标志CF=1(表示高4位向高位借位),则
         AL-60H→AL,1→CF
  DAS指令一般紧跟在SUB或SBB指令之后使用,影响标志位为SF,ZF,AF,PF,CF。OF无定义。
  例 3.34
纯文本查看 复制代码
?
1
2
SUB AL,BL
DAS

  九、ASCII算术运算
  数字0~9的ASCII码为30H~39H,机器采用一个字节存放一位ASCII码,对于ASCII码的算术运算是在二进制运算基础上进行调整。调整指令有加、减、乘、除四种调整指令。
  (1) 格式:AAA
  功能:将存放在AL中的二进制和数,调整为ASCII码表示的结果。
  调整方法:若AL中低4位小于或等于9,仅AL中高4位清0,AF→CF。若AL中低4位大于9或标志AF=1(进位),则AL+6→AL,AH+1→AH,1→AF,AF→CF,AL中高4位清0。
  AAA指令一般紧跟在ADD或ADC指令之后使用,影响标志位为AF,CF。其它标志位无定义。
  例 3.35
纯文本查看 复制代码
?
1
2
3
MOV AX,0036H
ADD,AL,35H
AAA;AX=0101H

  (2) 格式:AAS
  功能:将存放在AL中的二进制差数,调整为ASCII码表示形式
  调整方法:若AL中低4位小于等于9,仅AL中高4位清0,AF→CF。若AL中低4位大于9或标志AF=1,则AL-6→AL,AH-1→AH,1→AF,AF→CF,AL中高4位清0。
  AAS指令一般紧跟在SUB,SBB指令之后使用,影响标志位为AF,CF。其它标志位无定义。
  例 3.36
纯文本查看 复制代码
?
1
2
3
MOV AX,0132H
SUB AL,35H
AAS;AX=0007H

  (3) 格式:AAM
  功能:将存放在AL中的二进制积数,调整为ASCII码表示形式。
  调整方法:AL/10商→AH,余数→AL
  AAM指令一般紧跟在MUL指令之后使用,影响标志位为SF,ZF,PF。其它标志位无定义。
  例 3.37
纯文本查看 复制代码
?
1
2
3
4
MOV AL,07H
MOV BL,09H
MUL BL;AX=003FH
AAM;AX=0603H

  (4) 格式:AAD
  功能:将AX中两位非压缩BCD码(一个字节存放一位BCD码),转换为二进制数的表示形式。
  调整方法:AH10+AL→AL0→AH
  AAD指令用于二进制除法DIV操作之前,影响的标志位为SF,ZF,PF。其它标志位无定义。
  例 3.38
纯文本查看 复制代码
?
1
2
3
4
MOV AX,0605H
MOV BL,09H
AAD;AX=0041H
DIV BL;AX=0207H

  使用该类指令应注意,加法、减法和乘法调整指令都是紧跟在算术运算指令之后,将二进制的运算结果调整为非压缩BCD码表示形式,而除法调整指令必须放在除法指令之前进行,以避免除法出现错误的结果。
  使用算术运算类指令应注意:
  ·如果没有特别规定,参与运算的两个操作数数据类型必须一致,且只允许一个为存储器操作数;
  ·如果参与运算的操作数只有一个,且为存储器操作数,必须使用PTR伪指令说明数据类型;
  ·操作数不允许为段寄存器。
  ·目的操作数不允许为立即数;
  ·如果是存储器寻址,则存储器各种寻址方式均可使用。

这个网名有点难 发表于 2017-7-11 18:40

大牛来一个~!~!~

孟婆汤 发表于 2017-7-11 19:33

DNF挂里很常见的写法

babyqi 发表于 2017-7-11 22:23

梦幻110110 发表于 2017-7-11 20:12
mov esi,      =触发地址
Mov_ESI (触发地址)
------------------------------------- ...
厉害了大神{:301_1003:}

chen1234 发表于 2017-7-12 06:39

页: [1]
查看完整版本: 置入代码与远程汇编 的问题,来个大神解释一下