diff --git a/CONTRIBUTION.md b/CONTRIBUTION.md index ea42b0b..4bc05cc 100644 --- a/CONTRIBUTION.md +++ b/CONTRIBUTION.md @@ -18,7 +18,7 @@ ├── pic │   ├── 1.3_byte_order.png ├── README.md -└── source +└── src ├── Crypto ├── Misc ├── Pwn @@ -32,7 +32,7 @@ - `CONTRIBUTION.md`:合作与贡献的相关内容。 - `doc`:该文件夹包含书全部内容的 Markdown 文件。(文字) - `pic`:该文件夹包含所有 Markdown 中引用的所有图片文件。(图片) -- `source`:该文件夹包含书中示例和练习的二进制文件或源代码,分专题保存。(代码) +- `src`:该文件夹包含书中示例和练习的二进制文件或源代码,分专题保存。(代码) ##### 注意事项 - 在开始编写某一个内容之前,请先在下面的表格里注明,以避免重复和冲突。如果是已经完成的章节,则可以直接进行修改。 diff --git a/README.md b/README.md index 928ad84..219d377 100644 --- a/README.md +++ b/README.md @@ -38,6 +38,7 @@ - [四、技巧篇](doc/4_tips.md) - [4.1 AWD模式](doc/4.1_AWD.md) + - [4.2 Linux 命令行技巧](doc/4.2_Linux_terminal_tips.md) - [五、高级篇](doc/5_advanced.md) - [5.1 Fuzz 测试](doc/5.1_fuzz.md) diff --git a/doc/1.3_linux_basic.md b/doc/1.3_linux_basic.md index 892e0a9..dc2560d 100644 --- a/doc/1.3_linux_basic.md +++ b/doc/1.3_linux_basic.md @@ -1,9 +1,11 @@ # Linux 基础 -- [常用基础命令](#command) -- [字节序](#order) +- [常用基础命令](#常用基础命令) +- [字节序](#字节序) +- [输入输出](#输入输出) -## 常用基础命令 + +## 常用基础命令 ```text ls 用来显示目标列表 @@ -32,7 +34,7 @@ nano / vim / emacs 字符终端的文本编辑器 ``` -## 字节序 +## 字节序 目前计算机中采用两种字节存储机制:大端(Big-endian)和小端(Little-endian)。 >MSB (Most Significan Bit/Byte):最重要的位或最重要的字节。 @@ -44,3 +46,15 @@ Big-endian 规定 MSB 在存储时放在低地址,在传输时放在流的开 例如十六进制整数 0x12345678 存入以 1000H 开始的内存中: ![](../pic/1.3_byte_order.png) + + +## 输入输出 +- 使用命令的输出作为可执行文件的输入参数 + - ```$ ./vulnerable 'your_command_here'``` + - ```$ ./vulnerable $(your_command_here)``` +- 使用命令作为输入 + - ```$ your_command_here | ./vulnerable``` +- 将命令行输出写入文件 + - ```$ your_command_here > filename``` +- 使用文件作为输入 + - ```$ ./vulnerable < filename``` diff --git a/doc/1.5.1_c_basic.md b/doc/1.5.1_c_basic.md index 25da7a0..d32b884 100644 --- a/doc/1.5.1_c_basic.md +++ b/doc/1.5.1_c_basic.md @@ -1,8 +1,8 @@ # C 语言基础 -- [从源代码到可执行文件](#compile) +- [从源代码到可执行文件](#从源代码到可执行文件) -## 从源代码到可执行文件 +## 从源代码到可执行文件 我们以经典著作《The C Programming Language》中的第一个程序 “Hello World” 为例,讲解 Linux 下 GCC 的编译过程。 ```c diff --git a/doc/4.2_Linux_terminal_tips.md b/doc/4.2_Linux_terminal_tips.md new file mode 100644 index 0000000..89cbfd1 --- /dev/null +++ b/doc/4.2_Linux_terminal_tips.md @@ -0,0 +1,9 @@ +# Linux 命令行技巧 + +- [重定向输入字符](#重定向输入字符) + + +## 重定向输入字符 +有时候我们需要在 shell 里输入键盘上没有对应的字符,如 `0x1F`,就需要使用重定向输入。下面是一个例子:[源码](../src/Others/4.2_0x1f.c) + +![](../pic/4.2_0x1f.png) diff --git a/doc/6.1_Linuxtools.md b/doc/6.1_Linuxtools.md index b694d60..63d3754 100644 --- a/doc/6.1_Linuxtools.md +++ b/doc/6.1_Linuxtools.md @@ -171,9 +171,9 @@ strings [executable] | grep -i upx ``` #### 练习 -[strings_crackme](../source/Reverse/strings_crackme) +[strings_crackme](../src/Reverse/strings_crackme) -[flag_pwnablekr](../source/Reverse/flag_pwnablekr) +[flag_pwnablekr](../src/Reverse/flag_pwnablekr) ## xxd @@ -193,4 +193,4 @@ xxd -g1 ``` #### 练习 -[xxd_crackme](../source/Reverse/xxd_crackme) (使用 *strings* 再做一次) +[xxd_crackme](../src/Reverse/xxd_crackme) (使用 *strings* 再做一次) diff --git a/pic/4.2_0x1f.png b/pic/4.2_0x1f.png new file mode 100644 index 0000000..a7f4b7c Binary files /dev/null and b/pic/4.2_0x1f.png differ diff --git a/src/Others/4.2_0x1f.c b/src/Others/4.2_0x1f.c new file mode 100644 index 0000000..27fa408 --- /dev/null +++ b/src/Others/4.2_0x1f.c @@ -0,0 +1,14 @@ +#include +#include +void main() { + char data[8]; + char str[8]; + printf("请输入十六进制为 0x1f 的字符: "); + sprintf(str, "%c", 31); + scanf("%s", data); + if (!strcmp((const char *)data, (const char *)str)) { + printf("correct\n"); + } else { + printf("wrong\n"); + } +} diff --git a/source/Reverse/flag_pwnablekr b/src/Reverse/flag_pwnablekr similarity index 100% rename from source/Reverse/flag_pwnablekr rename to src/Reverse/flag_pwnablekr diff --git a/source/Reverse/strings_crackme b/src/Reverse/strings_crackme similarity index 100% rename from source/Reverse/strings_crackme rename to src/Reverse/strings_crackme diff --git a/source/Reverse/xxd_crackme b/src/Reverse/xxd_crackme similarity index 100% rename from source/Reverse/xxd_crackme rename to src/Reverse/xxd_crackme