总任务
工具安装: IDA,exeinfope 内容学习: linux基础命令,汇编基础指令,32位与64位传参方式,寄存器,知道堆栈是什么,了解栈帧,函数调用栈 安装虚拟机,了解虚拟机的网络模式区别,以及在内网与虚拟机的交互,安装ubuntu虚拟机,配置切换国内代理,安装pwntools,pwndbg,ubuntu的conda以及docker
第一天
Linux命令大全
链接Linux命令大全(非常详细)从零基础入门到精通,看完这一篇就够了【附安装包】linux命令大全手册linux常用命令-优快云博客
命令太多了,根本学不完
4.1 打包和压缩和解压
打包
tar -c 是表示产生新的包 (eg:tar -cf all.tar *.jpg) -f 指定包的文件名 -r 是表示增加文件的意思 -u 是表示更新文件的意思 -t 是列出文件的意思 (eg: tar -xf all.tar)
压缩和解压
-
gzip(结尾.gz) 调用是-z(eg:tar -czf all.tar.gz)
解压是
gzip -d all.gz
gunzip all.gz
-
bzip2 (结尾.bz2) 调用是-j
解压是
bzip2 -d all.gz
bunzip2 all.gz
-
compress(结尾.Z) 调用是-Z
解压是 uncompress all.Z
-
压缩结尾是.tar.*(eg:.tar.Z) 压缩是tar -xZf all.tar.z
如果是另外的tar那么就调用该用的字母
注意: 对于 .rar
要在 linux 下处理 .rar 文件,需要安装 RAR for Linux。下载地址:WinRAR archiver, a powerful tool to process RAR and ZIP files,下载后安装即可。
这样就安装好了,安装后就有了 rar 和 unrar 这两个程序,rar 是压缩程序,unrar 是解压程序。它们的参数选项很多,这里只做简单介绍,依旧举例说明一下其用法:
rar a all *.jpg
这条命令是将所有 .jpg 的文件压缩成一个 rar 包,名为 all.rar,该程序会将 .rar 扩展名将自动附加到包名后。
unrar e all.rar 这条命令是将 all.rar 中的所有文件解压出来
服了以上作废,因为原文总结了
1、.tar 用 tar –xvf 解压 2、.gz 用 gzip -d或者gunzip 解压 3、.tar.gz和.tgz 用 tar –xzf 解压 4、.bz2 用 bzip2 -d或者用bunzip2 解压 5、.tar.bz2用tar –xjf 解压 6、.Z 用 uncompress 解压 7、.tar.Z 用tar –xZf 解压 8、.rar 用 unrar e解压 9、.zip 用 unzip 解压
-z:有gzip属性的 -j:有bz2属性的 -Z:有compress属性的 -v:显示所有过程 -O:将文件解开到标准输出
第二天
1.学习exeinfo pe:exeinfo pe的使用(基本)-优快云博客
2.学习寄存器(不过是大致看了看「因为还没学指针」不过我觉的应该不用学那么详细):STM32新手入门-什么是寄存器_stm32寄存器-优快云博客
(等今晚学了指针之后再有时间了详细看一下)
3.终于看到跟逆向有关的了,不过感觉逆向挺难的:汇编基础-----常见命令基本使用_imul rcx-优快云博客 (汇编指令跟ce上的一样)
MOV:将数据从一个位置复制到另一个位置。 ADD/SUB:将两个操作数相加或相减。 INC/DEC:递增或递减操作数的值。 CMP:比较两个操作数的值。 JMP:无条件跳转到指定位置执行。 JE/JNE:条件跳转,当相等或不相等时跳转。 CALL/RET:调用和返回子程序。 PUSH/POP:将数据推入堆栈或从堆栈中弹出数据。 (我靠,堆栈还没学呢)
AND/OR/XOR/NOT:按位逻辑运算。
AND RAX, RBX ; RAX寄存器和RBX寄存器的值进行按位与运算 OR RDX, RCX ; RDX寄存器和RCX寄存器的值进行按位或运算 XOR RSI, RDI ; RSI寄存器和RDI寄存器的值进行按位异或运算 NOT RAX ; 对RAX寄存器的值进行按位取反
SHL/SHR/SAR:逻辑左移、逻辑右移、算术右移。
SHL RAX, 3 ; 将RAX寄存器中的值向左逻辑移位3位 SHR RCX, 1 ; 将RCX寄存器中的值向右逻辑移位1位 SAR RDX, 2 ; 将RDX寄存器中的值向右算术移位2位
LOOP:循环指令,根据CX/ECX/RCX寄存器中的计数值执行循环。
LOOP label1 ; 循环执行,直到CX/ECX/RCX寄存器中的值减为0
NOP:空操作,不执行任何操作,通常用于填充代码或调试。
NOP ; 空操作
HLT:停机指令,停止CPU执行。
HLT ; 停止CPU执行
注意:后面没看到明天看 ,需要学习的东西有 1.指针(C语言) 2.堆栈 3.寄存器(学完指针后看)
汇编入门指令汇总(复习篇 | 完整易懂)_汇编语言指令大全-优快云博客
上面这个网站堆栈和寄存器和汇编指令我感觉学完指针看这个
第三天
今天已经把指针学完了(看的翁凯,了解了一下皮毛)
接下来今天学习汇编语言,linux指令就先那样了解一下吧,我觉得用不到,用到再认真看。
关于堆栈的讲解
一个由c/C++编译的程序占用的内存分为以下几个部分 1、栈区(stack)— 由编译器自动分配释放 ,存放函数的参数值,局部变量的值等。其操作方式类似于数据结构中的栈。 2、堆区(heap) — 一般由程序员分配释放, 若程序员不释放,程序结束时可能由OS回收 。注意它与数据结构中的堆是两回事,分配方式倒是类似于链表,呵呵。 3、全局区(静态区)(static)—,全局变量和静态变量的存储是放在一块的,初始化的全局变量和静态变量在一块区域, 未初始化的全局变量和未初始化的静态变量在相邻的另一块区域。 - 程序结束后有系统释放 4、文字常量区—常量字符串就是放在这里的。 程序结束后由系统释放 5、程序代码区—存放函数体的二进制代码。
汇编基础-----常见命令基本使用
MOV:将数据从一个位置复制到另一个位置。
MOV destination, source
1
例如:
1 MOV RAX, RBX ; 将RBX寄存器中的值复制到RAX寄存器中
ADD/SUB:将两个操作数相加或相减。
1 ADD destination, source 2 SUB destination, source
例如:
ADD RAX, RBX ; 将RAX寄存器中的值加上RBX寄存器中的值,并将结果存储回RAX
例如:
ADD destination, source SUB destination, source
INC/DEC:递增或递减操作数的值。
INC operand DEC operand
例如:
INC RCX ; 将RCX寄存器中的值加1
CMP:比较两个操作数的值。
CMP operand1, operand2
例如:
CMP RAX, RBX ; 比较RAX和RBX寄存器中的值
JMP:无条件跳转到指定位置执行。
JMP destination
例如:
JMP label1 ; 跳转到标签为label1的位置执行
JE/JNE:条件跳转,当相等或不相等时跳转。
JE destination JNE destination
例如:
JE label1 ; 如果上一次比较结果为相等,则跳转到标签为label1的位置执行
CALL/RET:调用和返回子程序。
CALL subroutine RET
例如:
CALL some_function ; 调用名为some_function的子程序
PUSH/POP:将数据推入堆栈或从堆栈中弹出数据。
PUSH operand POP operand
例如:
PUSH RAX ; 将RAX寄存器中的值推入堆栈
LEA (Load Effective Address):加载有效地址,将一个内存地址加载到一个寄存器中,而不是加载内存中的值。
LEA RDI, [RAX + 8] ; 将RAX寄存器中的值加上8的偏移量的地址加载到RDI中
AND/OR/XOR/NOT:按位逻辑运算。
AND RAX, RBX ; RAX寄存器和RBX寄存器的值进行按位与运算 OR RDX, RCX ; RDX寄存器和RCX寄存器的值进行按位或运算 XOR RSI, RDI ; RSI寄存器和RDI寄存器的值进行按位异或运算 NOT RAX ; 对RAX寄存器的值进行按位取反
SHL/SHR/SAR:逻辑左移、逻辑右移、算术右移。
SHL RAX, 3 ; 将RAX寄存器中的值向左逻辑移位3位 SHR RCX, 1 ; 将RCX寄存器中的值向右逻辑移位1位 SAR RDX, 2 ; 将RDX寄存器中的值向右算术移位2位
LOOP:循环指令,根据CX/ECX/RCX寄存器中的计数值执行循环。
LOOP label1 ; 循环执行,直到CX/ECX/RCX寄存器中的值减为0
NOP:空操作,不执行任何操作,通常用于填充代码或调试。
NOP ; 空操作
HLT:停机指令,停止CPU执行。
HLT ; 停止CPU执行
CDQ/CQO:将双字扩展为四字或将四字扩展为八字。
rubyCDQ ; 将EAX中的有符号数扩展到EDX:EAX中 CQO ; 将RAX中的有符号数扩展到RDX:RAX中
REP:重复指令前缀,用于重复执行字符串操作等。
ruby REP MOVSB ; 重复执行将字节从DS:SI移动到ES:DI的操作
CMOV:条件移动指令,根据条件码执行条件移动。
CMOVZ RAX, RBX ; 如果ZF标志位为1(表示相等),则将RBX的值移动到RAX
BSWAP字节顺序交换指令,用于交换32位或64位寄存器中的字节顺序。
BSWAP EAX ; 交换EAX寄存器中的字节顺序
BSF/BSR:查找最低/高位设置位的指令。
BSF RCX, RAX ; 将RAX寄存器中的值的最低设置位的索引加载到RCX中 BSR RDX, RBX ; 将RBX寄存器中的值的最高设置位的索引加载到RDX中
CPUID:CPU信息指令,用于获取CPU相关信息。
CPUID ; 执行CPUID指令,返回CPU相关信息
RDTSC/RDTSCP:时间戳计数器指令,用于获取时间戳计数器的当前值。
RDTSC ; 将时间戳计数器的当前值加载到EDX:EAX中 RDTSCP ; 类似于RDTSC,但返回值包括了CPU核心编号
XCHG:交换指令,用于交换寄存器或内存中的值。
XCHG RAX, RBX ; 交换RAX和RBX寄存器中的值 XCHG [RDI], RSI ; 交换RDI寄存器指向的内存地址和RSI寄存器中的值
MUL/IMUL/DIV/IDIV:无符号乘法、有符号乘法、无符号除法、有符号除法指令。
MUL RBX ; 无符号乘法,将RAX和RBX中的值相乘,结果存放在RDX:RAX中 IMUL RCX, RDX, 5 ; 有符号乘法,将RDX和5相乘,结果存放在RCX中 DIV RBX ; 无符号除法,将RDX:RAX中的值除以RBX,商存放在RAX中,余数存放在RDX中 IDIV RBX ; 有符号除法,将RDX:RAX中的值除以RBX,商存放在RAX中,余数存放在RDX中
FPU指令:用于浮点数运算的指令集,如加载浮点数、加减乘除等。
FLD real_value ; 将实数值加载到FPU栈顶 FADD ST(0), ST(1) ; 将栈顶和次栈顶的浮点数相加,并将结果存放在栈顶
SIMD指令:用于向量化操作的指令集,如SSE、AVX等。
MOVAPS XMM1, XMM2 ; 将XMM2中的值复制到XMM1中 ADDPS XMM1, XMM2 ; 将XMM1和XMM2中的浮点数向量相加
控制指令:用于程序流程控制的指令,如条件跳转、循环等。
JCXZ label ; 如果CX寄存器为0,则跳转到指定标签 LOOP label ; 循环执行,直到CX寄存器为0
内存访问指令:用于访问内存的指令,如加载、存储等。
MOV [address], EAX ; 将EAX中的值存储到指定内存地址 MOV EAX, [address] ; 将指定内存地址中的值加载到EAX中
系统调用指令:用于与操作系统进行交互的指令,如Linux中的int 0x80、syscall等。
INT 0x80 ; 发起系统调用 SYSCALL ; 发起系统调用(在x86-64 Linux中)
辅助指令:用于辅助调试和优化的指令,如NOP、HLT、PAUSE等。
NOP ; 空操作,不执行任何操作 HLT ; 停止CPU执行 PAUSE ; 暂停CPU执行,用于优化 ————————————————
版权声明:本文为博主原创文章,遵循 CC 4.0 BY-SA 版权协议,转载请附上原文出处链接和本声明。
原文链接:汇编基础-----常见命令基本使用_imul rcx-优快云博客
、
这上面有些汇编指令还是不懂,后面慢慢了解吧
了解虚拟机的网络模式区别
虚拟机的三种主要网络模式是桥接模式、NAT模式和仅主机模式。
1.桥接模式(Bridged Mode)是将虚拟机的网络接口直接连接到物理网络的模式。在这种模式下,虚拟机拥有一个独立的IP地址,可以直接连接到网络中的其他设备,并且可以被视为一个独立的设备。虚拟机可以访问外部网络,同时其他设备也可以访问虚拟机。桥接模式的优点是配置简单,虚拟机可以像真实设备一样在网络中自由通信,但缺点是如果虚拟机数量较多,可能会增加网络的负担12。
2.NAT模式(Network Address Translation Mode)是虚拟机通过主机访问外部网络的模式。在这种模式下,虚拟机被分配一个私有的IP地址,所有出站连接都会通过主机进行网络地址转换(NAT),使得外部网络无法直接访问虚拟机。NAT模式的优点是配置简单,不需要手动设置IP地址和网关,缺点是虚拟机无法直接访问外部网络,只能通过主机进行访问14。
3.仅主机模式(Host-Only Mode)是虚拟机只能与主机通信的模式。在这种模式下,虚拟机被隔离在独立的网络中,只能与主机进行通信,无法访问外部网络。这种模式的优点是安全性高,可以创建一个完全隔离的网络环境进行测试或开发,缺点是只能用于主机和虚拟机之间的通信12。
内网与虚拟机之间的的交互
内网与虚拟机之间的交互通常涉及到网络隔离和资源共享。在虚拟化环境中,比如使用VMware、VirtualBox等工具创建的虚拟机(VM),它们默认会连接到宿主机的网络资源,例如共享IP地址、端口转发等。
-
网络访问:如果虚拟机配置了桥接模式或NAT(网络地址转换)模式,它可以作为内网的一部分,与其他设备通过相同的网络协议进行通信,如HTTP、FTP等。
-
文件系统共享:内网中的物理主机可以设置共享文件夹,让虚拟机能够读写,这样可以在保持安全性的前提下方便地交换数据。
-
端口映射:内网可以通过端口映射技术(如Linux下的Port Mapping或Windows的RDP/TCP/IP映射),将虚拟机的特定端口暴露给外网或其他内网机器,使得远程访问变得可能。
-
安全策略:为了防止不必要的外部干扰,管理员可能会限制虚拟机对内网的访问权限,实施防火墙规则或使用安全组策略。
安装虚拟机哦哦哦哦~~~~
安装好了,但是不想弄别的任务了
配置切换国内代理,安装pwntools,pwndbg,ubuntu的conda以及docker
上面这几个任务到时候再弄
现在写算法题
第四天
今天就学算法
就刷题
第五天
今天看完了逆向第一节培训,我知道怎么解密。跟c语言基础有关系。
IDA快捷键 :
1.shift+f12进入字符串 2.esc返回上一步 3.ALT+Enter 跳转新的窗口 4.F9动态调试程序 5.F5/tab生成伪代码 6.G跳转指定地址 7.N对符号重命名 8.Y设置变量类型 9.H转换16进制 10.C光标坐在地址处内容解析生成伪代码/动调 11.D光标坐在地址处内容解析生成伪数据/动调 12.光标所指出数据转变为ascll码对应字符/静态分析常用 13.Ctrl+x 交叉引用,类似于OD中的栈回溯操作
我要练几个题看一下