免杀整理.docx
- 文档编号:18103152
- 上传时间:2023-08-13
- 格式:DOCX
- 页数:22
- 大小:28.24KB
免杀整理.docx
《免杀整理.docx》由会员分享,可在线阅读,更多相关《免杀整理.docx(22页珍藏版)》请在冰点文库上搜索。
免杀整理
NO.1基础特征修改方法
先讲讲介绍点常见的指令
cmpa,b比较a和b大小意思(cmp是英文compare比较的意思)
mova,b把b的值传送给a(mov是英文move移动的意思)
nop(nooperation)意思是什么事都没做(donothing)常用的修改指令
call调用子程序
pop出栈
push压栈
跳的分几种:
je或jz若相等则跳
jne或jnz若不相等则跳
jmp无条件跳转
jb若小于则跳
ja若大于则跳
jg若大于则跳
jge若大于等于则跳
jl若小于则跳
jle若小于等于则跳
ADD加法.
ADC带进位加法.
INC加1.
SUB减法.
SBB带借位减法.
DEC减1.
AND与运算.
OR或运算.
XOR异或运算.
NOT取反.
TEST测试.
------------------------------------------------------------------------------------------
基础的修改特征码方法
(1)载入c32或者winhex
方法一:
修改特征码的十六进制
修改方法:
把特征码所对应的十六进制改成数字+1或者减1
举例:
载入c32或者winhex输入跳转OFFSET地址定位到的特征码在80的0闪烁可以把0改成1即81
方法二:
大小写
修改方法:
特征码所对应的内容是字符串的,大小字互换.
举例:
大小写间差20
(2)下面是OD载入的分析
方法三:
替换法
修改方法:
特征码所对应的汇编指令替换成相同或相似的.
举例:
jnz换成JMP.
方法四:
顺序调换法
修改方法:
特征码对应的指令顺序互换一下.
举例:
00851A97MOVESI,ECX
00851A98MOVEDI,0
可以换位00851A97MOVEDI,0
00851A98MOVESI,ECX
方法五:
JMP法
修改方法:
把特征码移到零区域,然后一个JMP又跳回来执行.
方法六:
移位法
修改方法:
把定位到函数的特征码复制然后NOP找到0区域写入刚NOP代码然后JMP回到原来NOP的
下面一个地址然后lordpe修改相应函数的地址
举例:
文件PE头移位
NO.2六大常用免杀法
一.入口点加1免杀法:
1.用到工具PEditor
2.特点:
非常简单实用,但有时还会被卡巴查杀
3.操作要点:
用PEditor打开无壳木马程序,把原入口点加1即可
二.变化入口地址免杀法:
1.用到工具:
OllyDbg,PEditor
2.特点:
操作也比较容易,而且免杀效果比入口点加1点要佳.
3.操作要点:
用OD载入无壳的木马程序,把入口点的前二句移到零区域去执行,然后又跳回到入口点的下面第三句继续执行.最后用PEditor把入口点改成零区域的地址.
三.加花指令法免杀法:
1.用到工具:
OllyDbg,PEditor
2.特点:
免杀通用性非常好,加了花指令后,就基本达到大量杀毒软件的免杀.
3.操作要点:
用OD打开无壳的木马程序,找到零区域,把我们准备好的花指令填进去填好后又跳回到入口点,保存好后,再用PEditor把入口点改成零区域处填入花指令的着地址.
四.加壳或加伪装壳免杀法:
1.用到工具:
一些冷门壳,或加伪装壳的工具,比如木马彩衣等.
2.特点:
操作简单化,但免杀的时间不长,可能很快被杀,也很难躲过卡巴的追杀
3.操作要点:
为了达到更好的免杀效果可采用多重加壳,或加了壳后在加伪装壳的免杀效果更佳
五.打乱壳的头文件或壳中加花免杀法:
1.用到工具:
秘密行动,UPX加壳工具.
2.特点:
操作也是傻瓜化,免杀效果也正当不错,特别对卡巴的免杀效果非常好
3.操作要点:
首先一定要把没加过壳的木马程序用UPX加层壳,然后用秘密行动这款工具中的SCramble功能进行把UPX壳的头文件打乱,从而达到免杀效果.
六.修改文件特征码免杀法:
1.用到工具:
特征码定位器,OllyDbg
2.特点:
操作较复杂,要定位修改一系列过程,而且只针对每种杀毒软件的免杀,要达到多种杀毒软件的免杀,必需修改各种杀毒软件的特征码.但免杀效果好
NO.3免杀技术汇总
一.机械码,又称机器码.
ultraedit打开,编辑exe文件时你会看到
许许多多的由0,1,2,3,4,5,6,7,8,9,A,B,C,D,E,F组成的数码,这些数码
就是机器码.
修改程序时必须通过修改机器码来修改exe文件.
二.需要熟练掌握的全部汇编知识(只有这么多)
不大容易理解,可先强行背住,混个脸儿熟,以后慢慢的就理解了
cmpa,b比较a与b
mova,b把b的值送给a
ret返回主程序
nop无作用,英文“nooperation”的简写,意思是“donothing”(机器码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=>7574=>9074=>EB
75=>7475=>9075=>EB
jnz->nop
75->90(相应的机器码修改)
jnz->jmp
75->EB(相应的机器码修改)
jnz->jz
75->74(正常)0F85->0F84(特殊情况下,有时,相应的机器码修改)
四.两种不同情况的不同改方法
1.修改为jmp
je(jne,jz,jnz)=>jmp相应的机器码EB(出错信息向上找到的第一个跳转)jmp的作用是绝对跳,无条件跳,从而跳过下面的出错信息
xxxxxxxxxxxx出错信息,例如:
注册码不对,sorry,未注册版不能...,"FunctionNotAvaibleinDemo"或"CommandNotAvaible"或
"Can’tsaveinShareware/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.输入输出端口传送指令.
INI/O端口输入.(语法:
IN累加器,{端口号│DX})
OUTI/O端口输出.(语法:
OUT{端口号│DX},累加器)
输入输出端口由立即方式指定时,其范围是0-255;由寄存器DX指定时,
其范围是0-65535.
3.目的地址传送指令.
LEA装入有效地址.
例:
LEADX,string;把偏移地址存到DX.
LDS传送目标指针,把指针内容装入DS.
例:
LDSSI,string;把段地址:
偏移地址存到DS:
SI.
LES传送目标指针,把指针内容装入ES.
例:
LESDI,string;把段地址:
偏移地址存到ESI.
LFS传送目标指针,把指针内容装入FS.
例:
LFSDI,string;把段地址:
偏移地址存到FSI.
LGS传送目标指针,把指针内容装入GS.
例:
LGSDI,string;把段地址:
偏移地址存到GSI.
LSS传送目标指针,把指针内容装入SS.
例:
LSSDI,string;把段地址:
偏移地址存到SSI.
4.标志传送指令.
LAHF标志寄存器传送,把标志装入AH.
SAHF标志寄存器传送,把AH内容装入标志寄存器.
PUSHF标志入栈.
POPF标志出栈.
PUSHD32位标志入栈.
POPD32位标志出栈.
二、算术运算指令
───────────────────────────────────────
ADD加法.
ADC带进位加法.
INC加1.
AAA加法的ASCII码调整.
DAA加法的十进制调整.
SUB减法.
SBB带借位减法.
DEC减1.
NEC求反(以0减之).
CMP比较.(两操作数作减法,仅修改标志位,不回送结果).
AAS减法的ASCII码调整.
DAS减法的十进制调整.
MUL无符号乘法.
IMUL整数乘法.
以上两条,结果回送AH和AL(字节运算),或DX和AX(字运算),
AAM乘法的ASCII码调整.
DIV无符号除法.
IDIV整数除法.
以上两条,结果回送:
商回送AL,余数回送AH,(字节运算);
或商回送AX,余数回送DX,(字运算).
AAD除法的ASCII码调整.
CBW字节转换为字.(把AL中字节的符号扩展到AH中去)
CWD字转换为双字.(把AX中的字的符号扩展到DX中去)
CWDE字转换为双字.(把AX中的字符号扩展到EAX中去)
CDQ双字扩展.(把EAX中的字的符号扩展到EDX中去)
三、逻辑运算指令
AND与运算.
or或运算.
XOR异或运算.
NOT取反.
TEST测试.(两操作数作与运算,仅修改标志位,不回送结果).
SHL逻辑左移.
SAL算术左移.(=SHL)
SHR逻辑右移.
SAR算术右移.(=SHR)
ROL循环左移.
ROR循环右移.
RCL通过进位的循环左移.
RCR通过进位的循环右移.
以上八种移位指令,其移位次数可达255次.
移位一次时,可直接用操作码.如SHLAX,1.
移位>1次时,则由寄存器CL给出移位次数.
如MOVCL,04
SHLAX,CL
四、串指令
DS:
SI源串段寄存器:
源串变址.
ESI目标串段寄存器:
目标串变址.
CX重复次数计数器.
AL/AX扫描值.
D标志0表示重复操作中SI和DI应自动增量;1表示应自动减量.
Z标志用来控制扫描或比较操作的结束.
MOVS串传送.
(MOVSB传送字符.MOVSW传送字.MOVSD传送双字.)
CMPS串比较.
(CMPSB比较字符.CMPSW比较字.)
SCAS串扫描.
把AL或AX的内容与目标串作比较,比较结果反映在标志位.
LODS装入串.
把源串中的元素(字或字节)逐一装入AL或AX中.
(LODSB传送字符.LODSW传送字.LODSD传送双字.)
STOS保存串.
是LODS的逆过程.
REP当CX/ECX<>0时重复.
REPE/REPZ当ZF=1或比较结果相等,且CX/ECX<>0时重复.
REPNE/REPNZ当ZF=0或比较结果不相等,且CX/ECX<>0时重复.
REPC当CF=1且CX/ECX<>0时重复.
REPNC当CF=0且CX/ECX<>0时重复.
五、程序转移指令
1>无条件转移指令(长转移)
JMP无条件转移指令
CALL过程调用
RET/RETF过程返回.
2>条件转移指令(短转移,-128到+127的距离内)
(当且仅当(SFXOROF)=1时,OP1JA/JNBE不小于或不等于时转移.
JAE/JNB大于或等于转移.
JB/JNAE小于转移.
JBE/JNA小于或等于转移.
以上四条,测试无符号整数运算的结果(标志C和Z).
JG/JNLE大于转移.
JGE/JNL大于或等于转移.
JL/JNGE小于转移.
JLE/JNG小于或等于转移.
以上四条,测试带符号整数运算的结果(标志S,O和Z).
JE/JZ等于转移.
JNE/JNZ不等于时转移.
JC有进位时转移.
JNC无进位时转移.
JNO不溢出时转移.
JNP/JPO奇偶性为奇数时转移.
JNS符号位为"0"时转移.
JO溢出转移.
JP/JPE奇偶性为偶数时转移.
JS符号位为"1"时转移.
3>循环控制指令(短转移)
LOOPCX不为零时循环.
LOOPE/LOOPZCX不为零且标志Z=1时循环.
LOOPNE/LOOPNZCX不为零且标志Z=0时循环.
JCXZCX为零时转移.
JECXZECX为零时转移.
4>中断指令
INT中断指令
INTO溢出中断
IRET中断返回
5>处理器控制指令
HLT处理器暂停,直到出现中断或复位信号才继续.
WAIT当芯片引线TEST为高电平时使CPU进入等待状态.
ESC转换到外处理器.
LOCK封锁总线.
NOP空操作.
STC置进位标志位.
CLC清进位标志位.
CMC进位标志取反.
STD置方向标志位.
CLD清方向标志位.
STI置中断允许位.
CLI清中断允许位.
六、伪指令
DW定义字(2字节).
PROC定义过程.
ENDP过程结束.
SEGMENT定义段.
ASSUME建立段寄存器寻址.
ENDS段结束.
END程序结束
NO.4免杀原理九步过
免杀的原理大全一、工具
mycll:
特征码定位
PEID:
查壳工具
PEditor:
入口点修改工具加花
c32asm
ollybg
oc:
文件地址到内存地址的换算
resscope:
资源编辑
zeroadd:
加区段的
木马采衣:
加花
maskpe,vmprotect:
加密
upx,aspack北斗壳:
压缩
免疫007:
免疫器
二、效果分析
1、加密:
vmprotectv1.21和MASKPE2.0(对瑞星有特效),比较容易过瑞星表面,不能过卡巴
压缩:
北斗,UPX:
主要是减少体积
加花:
对卡巴有特效,通用性比较好
2、北斗+VMpro,但是北斗+maskpe出错!
无壳木马可以先加花
3、无壳木马直接用maskPE22.0可过瑞星表面但是过不了卡巴。
4、无壳木马加一道花指令后再用VMPRO1.21加密可直接过卡巴但是可能无法过瑞星表面
5、经过免杀处理,过几种杀毒软件,加压缩壳后仍免杀过他们,但是北斗除外,棉纱处理国卡巴的木马北斗后可能被卡巴杀
6、测试操作
1)手工加花+掘北压缩,鸽子
先脱壳,在用OD在零区域添加指令(根据字节编写):
先找原入口点,零区域,记录其地址(新入口点),指令pusheaxpopeaxaddesp1incesppush004A1E48retn保存。
用PE修改入口点。
能过卡巴,过不了瑞星。
用掘北(对瑞星表面有特效)
2)工具加花(花蝴蝶三号)+VMPRO+UPX。
捆绑器
三、手工加花方法
1、直接:
OD,记录入口点;找零区域,复制地址(新入口);写指令:
push0nopaddesp2incespincesppushexppopesppush原入口点retn改入口点(新)(lordpe);可以把这段代码保存为二进制以后方便用。
2、去头:
复制头,并去掉,填加到空白区域(新地址);再填加花指令。
3、加区:
zeroadd加区段,大小一般100左右;OD打开文件,用ALT+M打开内存景象,复制区段入口地址和原程序入口,到区段加花,程序入口地址不变;lordpe修改入口为区段的入口。
4、壳中:
UPX压缩;OD打开,记录壳的入口(即原入口);记录零区域地址(新入口)加花(有的壳不能写入,或保存后不能运行);LORDPE改入口。
5、壳中加区:
UPX;zeroadd加区;OD,记录壳后入口,ALT+M记录区段入口,在区段里加花;改地址。
四、编写花指令
1、相关汇编(王国军汇编64讲,汇编指令查询器)
2、花指令变形修改(用花蝴蝶三号给程序加花,OD打开)
1)替换法:
把moveax程序.地址jmpeax改为push地址retn
2)添加法:
在花指令的上面把nop换成pusheaxpopeax
3)移位法:
在花指令里把pusheaxmovexxxxxxxxxpopeax换成popeaxmovexxxxxxxxxpusheax
4)去除法:
在花指令里把pusheaxmovexxxxxxxxxpopeax换成nopmovexxxxxxxxxnop
5)以上4种方法可综合利用
3、编写技巧:
入口地址最好是:
push地址retn的形式或jb入口地址jnb入口地址或moveax入口地址jmpeax,而不是jmp入口地址,因为容易被卡巴查杀。
五、myccl地位原理与使用介绍
1、基本原则:
开始位置为代码段的其实地址,风乱长度为物理长度,定位一般选复合定位,正向之程序从上到下恢复,定位内存特征码的时候用到后缀。
对体积比较大(10005000K)的程序分块个数可少点,第一次一般10快,定位大致位置后可分非50100块(建议不超过200);体积比较小的程序分块可大点,定位的时间就少。
2、定位黑防鸽子的瑞星文件特征码:
用myccl检测出来以后要用C32打开文件把检测出来的数据段填0后用瑞星检测。
3、定位鸽子的瑞星内存特征码:
要在上步以后用。
1)TK.loader和myccl放在同一目录,tk.loader用来加载木马到内存。
myccl参数与上同,另外加上后缀。
2)点生成,在目录路径上右键用TK.loader带开目录,全部载入内存,用瑞星杀。
3)记录被杀文件名,手工删除。
重复上步。
4)定位好以后,用C32ASM打开已免杀的程序,把定位好的内存特征码全部填0,用OD载入,用瑞星查,测试定位是否正确。
4、技巧总结:
muccl定位文件特征码效率不错,但是定位内存特征码相对比较慢,而有时候对dll文件内存定位不理想,这时候可以用OD手工定位。
六、免杀工具的组合运用
1、工具回顾:
加压缩壳一减少体积为住,部分可过瑞星表面;加密与其他方法组合使用效果较好,一般可过瑞星表面;加花免杀卡巴效果好多,对不常见的黑软这中方法的马杀通用性比较好。
2、工具组合要领:
可以对无壳程序直接加密也可在无壳木马加花后再加密;一般在其他免杀工作做好以后加压缩壳;加花可以对无壳,加密后的和加壳的软件做。
3、实例
1)、超级加花器V1.0(最后一个选项)+VMPRITECTV1.21
2)、maskPE2.0+upx+加区加花:
mask选import;花指令为pushebxpopebxpushebxpopebxincecxdececxjb原入口jnb原入口,lordpe改入口
3)、maskPE2.0加密(鸽子):
找零区域(00482274即新入口),写入jmp原入口;用lordpe改入口;加密(import).
4、工具组合经验:
找特效工具组合,如maskpe对瑞星表面,加花对卡巴,加掘北也对瑞星比较好(加花后不能用maskpe)。
黑防鸽子棉纱花指令后再用MASKPE,将不能正确运行,但是可直接向上找5字节零区域直接写jimp入口地址,然后改入口,再用mask加密,就可运行并免杀。
七、PE头反调试
PE头的修改步骤:
用C32ASM打开目标,计算PEheader的大小(“?
”)记录PE头开始地址,把计算出大小的区块向上复制,则PE头增大,将其HEX大小写入(”?
“),修改PE头的开始地址。
八、免杀新技术(改壳免杀法)
1、改壳特征码:
研究的人少,特征码单一,不脱壳做免杀方便简单,对于放DLL文件类型的木马一定要先脱壳,到处DLL文件分别做免杀。
2、步骤:
用myccl定位加壳软件,用偏移量转换器OC查看特征码地址的内存地址,用跳转法修改。
3、技巧:
用UPX压缩过的木马程序,有两处跳转都是卡巴的特征码,只要修改任一出都可达到免杀,第一处是离入口点的一处JMP跳转,第二出是最末尾的一处JMP,所一可以直接找到用UPX压缩过的任何木马,可以不用定位。
木马复杂的特征码修改经过UPX压缩后就变的简单化。
写花指令的时候找一些比较小的零区域,用一句话花指令等方法,效果不错,这些区域一般写入花指令用maskpe加密以后程序就回出错,但是用一句话花指令或去头免杀法,然后在用maskpe加密,程序不会出错(黑防鸽子的实验结论)。
4、UPX壳的几种免杀方法。
卡巴查到鸽子的一个固定地址是一个固定跳转时,就认为是木马。
若跳转下面有空为则可用:
替换,移位(把”特征代码下移),变换修改,修改头法(把头转移到空白区域再跳到第二句,修改入口),加壳加花。
5、北斗壳的几种免杀。
北斗兼容性好,压缩率高,但是有些本来免杀的软件,被北斗压缩后可能被卡巴查杀。
写花指令(免卡巴),用VMPROTECT加密可过瑞星表面。
polycryptpe也能免杀瑞星表面,007加密可阻止瑞星内存扫描。
6、很多查毒软件只查壳的头
- 配套讲稿:
如PPT文件的首页显示word图标,表示该PPT已包含配套word讲稿。双击word图标可打开word文档。
- 特殊限制:
部分文档作品中含有的国旗、国徽等图片,仅作为作品整体效果示例展示,禁止商用。设计者仅对作品中独创性部分享有著作权。
- 关 键 词:
- 整理
![提示](https://static.bingdoc.com/images/bang_tan.gif)