c++花指令:
00460000: 55 PUSH EBP
00460001: 8B EC MOV EBP,ESP
00460003: 6A FF PUSH FF
00460005: 68 2A 2C 0A 00 PUSH 000A2C2A
0046000A: 68 38 90 0D 00 PUSH 000D9038
0046000F: 64 A1 00 00 00 00 MOV EAX,FS:[00000000]
00460015: 50 PUSH EAX
00460016: 64 89 25 00 00 00 00 MOV FS:[00000000],ESP
0046001D: 58 POP EAX
0046001E: 64 A3 00 00 00 00 MOV FS:[00000000],EAX
00460024: 58 POP EAX
00460025: 58 POP EAX
00460026: 58 POP EAX
00460027: 58 POP EAX
00460028: 8B E8 MOV EBP,EAX
0046002A: B8 98 CA 44 00 MOV EAX,0044CA98
0046002F: FF E0 JMP EAX
00460031: 90 NOP
00460032: 00 00 ADD [EAX],AL
00460034: 00 00 ADD [EAX],AL
00460036: 00 00 ADD [EAX],AL
00460038: 00 00 ADD [EAX],AL
0046003A: 00 00 ADD [EAX],AL
0046003C: 00 00 ADD [EAX],AL
0046003E: 00 00 ADD [EAX],AL
OEPCODE: THEAD =
($55, $8B, $EC, $6A, $FF, $68, $2A, $2C, $0A, $00, $68, $38,
$90, $0D, $00, $64, $A1, $00, $00, $00, $00, $50, $64, $89,
$25, $00, $00, $00, $00, $58, $64, $A3, $00, $00, $00, $00,
$58, $58, $58, $58, $8B, $E8, $B8, $00, $10, $40, $00, $FF,
$E0, $90, $00, $00, $00, $00, $00, $00, $00, $00, $00, $00,
$00, $00, $00, $00);
网上收集了几个花指令!
花指令:
push ebp
mov ebp,esp
inc ecx
push edx
nop
pop edx
dec ecx
pop ebp
inc ecx
jmp 原入口
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.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
另外附上几个在线破解MD5的网站
国外——
http://md5.rednoize.com/
这个站是一个搜索引擎的形式.支持双向转换,即:MD5散列-〉字符串 字符串-〉MD5散列
这个使用比较简单,在上面的文本框中输入MD5散列或者字符串,即可得到相应的字符串或者MD5散列,当然,必须是其数据库中有记录的.
目前拥有1,963,442条记录
http://www.milw0rm.com/md5/list.php
这个站目前拥有一万多条记录
-::MD5 HASH中显示的是MD5散列
-::PASS中显示的是字符串,也就是破解出来的密码,但是也有-notfound-出现
-::STATUS中显示的是当前的状态,还没有开始破解时显示的是waiting,如果在破解中,则显示processing,已破解出来的是completed
在[ search ] 中可以输入MD5散列来搜索,字符串
在[ insert ] 中可以提交你没有搜索到的MD5散列,让他们来替你破解,过段时间再来看看.
国内——
MD5收集查询:http://www.neeao.com/md5/ 主页显示目前拥有105595条记录
MD5在线查询:http://www.xmd5.org/ 主页显示目前拥有500W条记录
这两个都是中文的,大家都看的懂,就不多做介绍了.
所以以后再遇到MD5,就先到这几个站搜索一下看看有没有记录,有的话就不用浪费时间,浪费精力的去跑了.当然,如果没的话,还是自己慢慢跑吧..
两段伪装指令.
============================
【深层】伪装 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
============================