首页|资讯|互联网|电信|硬件|软件|情报|产经|博客|家庭|商用电脑|游戏|评测|学院|下载|网络通信|方案应用|搜索
移动计算|商用软件|外包|开源|中间件|企业|IT经理|发烧友|程序员|IT女性|学生|老板|笔记本|手机|台式机|数码|论坛
安全频道

汇编“免杀”基础知识

2008-03-19 17:26 作者:smtk 来源:赛迪网
[摘要] ultraedit打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.
  一.机械码,又称机器码.

  ultraedit打开,编辑exe文件时你会看到许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码就是机器码.修改程序时必须通过修改机器码来修改exe文件.

二.需要熟练掌握的全部汇编知识

  不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了

  cmp a,b 比较a与b

  mov a,b 把b的值送给a

  ret 返回主程序

  nop 无作用,英文“no operation”的简写,意思是“do nothing”(机器码90)***机器码的含义参看上面

  (解释:ultraedit打开编辑exe文件时你看到90,等同于汇编语句nop)

  call 调用子程序

  je 或jz 若相等则跳(机器码74 或0F84)

  jne或jnz 若不相等则跳(机器码75或0F85)

  jmp 无条件跳(机器码EB)

  jb 若小于则跳

  ja 若大于则跳

  jg 若大于则跳

  jge 若大于等于则跳

  jl 若小于则跳

  jle 若小于等于则跳

  pop 出栈

  push 压栈

  三.常见修改(机器码)

  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 (出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息

  xxxxxxxxxxxx 出错信息,例如:注册码不对,sorry,未注册版不能...,"Function Not Avaible in Demo" 或

  "Command Not Avaible" 或 "Can't save in Shareware/Demo"等 (我们希望把它跳过,不让它出现)

  。。。

  。。。

  xxxxxxxxxxxx 正确路线所在

  2.修改为nop

  je(jne,jz,jnz) =>nop相应的机器码90 (正确信息向上找到的第一个跳转)

  nop的作用是抹掉这个跳转,使这个跳转无效,失去作用,从而使程序顺利来到紧跟其后的正确信息处

  xxxxxxxxxxxx 正确信息,例如:注册成功,谢谢您的支持等(我们希望它不被跳过,让它出现,程序一定要顺利来到这里)

  。。。

  。。。

  xxxxxxxxxxxx 出错信息(我们希望不要跳到这里,不让它出现)它们在存贮器和寄存器、寄存器和输入输出端口之间传送数据.

  1. 通用数据传送指令.

  MOV 传送字或字节.

  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位寄存器里字节的顺序

  XCHG 交换字或字节.( 至少有一个操作数为寄存器,段寄存器不可作为操作数)

  CMPXCHG 比较并交换操作数.( 第二个操作数必须为累加器AL/AX/EAX )

  XADD 先交换再累加.( 结果在第一个操作数里 )

  XLAT 字节查表转换.

  ── BX 指向一张 256 字节的表的起点, AL 为表的索引值 (0-255,即

  0-FFH); 返回 AL 为查表结果. ( [BX+AL]->AL )

  2. 输入输出端口传送指令.

  IN I/O端口输入. ( 语法: IN 累加器, {端口号│DX} )

  OUT I/O端口输出. ( 语法: OUT {端口号│DX},累加器 )

  输入输出端口由立即方式指定时, 其范围是 0-255; 由寄存器 DX 指定时,

  其范围是 0-65535.

  3. 目的地址传送指令.

  LEA 装入有效地址.

  例: LEA DX,string ;把偏移地址存到DX.

  LDS 传送目标指针,把指针内容装入DS.

  例: LDS SI,string ;把段地址:偏移地址存到DS:SI.

  LES 传送目标指针,把指针内容装入ES.

  例: LES DI,string ;把段地址:偏移地址存到ESI.

  LFS 传送目标指针,把指针内容装入FS.

  例: LFS DI,string ;把段地址:偏移地址存到FSI.

  LGS 传送目标指针,把指针内容装入GS.

  例: LGS DI,string ;把段地址:偏移地址存到GSI.

  LSS 传送目标指针,把指针内容装入SS.

  例: LSS DI,string ;把段地址:偏移地址存到SSI.

  4. 标志传送指令.

  LAHF 标志寄存器传送,把标志装入AH.

  SAHF 标志寄存器传送,把AH内容装入标志寄存器.

  PUSHF 标志入栈.

  POPF 标志出栈.

  PUSHD 32位标志入栈.

  POPD 32位标志出栈.
关键词: 汇编, 免杀, 基础知识,
  • 精选专题
关于eNet | 广告服务 | 版权声明 | 加入eNet | 联系我们 | 建议/投诉 | 网站导航 | 加入收藏

网站合作、内容监督、商务咨询、投诉建议:010-65245588
合作建议:hezuo@mail.enet.com.cn
Copyright © 1998--2008 硅谷动力公司版权所有 京ICP证000044号

京ICP证000044号