逆向启程(1)

总任务

工具安装: 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)

压缩和解压

  1. gzip(结尾.gz) 调用是-z(eg:tar -czf all.tar.gz)

解压是

gzip -d all.gz

gunzip all.gz

  1. bzip2 (结尾.bz2) 调用是-j

解压是

bzip2 -d all.gz

bunzip2 all.gz

  1. compress(结尾.Z) 调用是-Z

    解压是 uncompress all.Z

  2. 压缩结尾是.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寄存器-优快云博客

(等今晚学了指针之后再有时间了详细看一下)

https://i-blog.csdnimg.cn/blog_migrate/710fbc30ad850c8efdccf0caa1e67026.png

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地址、端口转发等。

  1. 网络访问:如果虚拟机配置了桥接模式或NAT(网络地址转换)模式,它可以作为内网的一部分,与其他设备通过相同的网络协议进行通信,如HTTP、FTP等。

  2. 文件系统共享:内网中的物理主机可以设置共享文件夹,让虚拟机能够读写,这样可以在保持安全性的前提下方便地交换数据。

  3. 端口映射:内网可以通过端口映射技术(如Linux下的Port Mapping或Windows的RDP/TCP/IP映射),将虚拟机的特定端口暴露给外网或其他内网机器,使得远程访问变得可能。

  4. 安全策略:为了防止不必要的外部干扰,管理员可能会限制虚拟机对内网的访问权限,实施防火墙规则或使用安全组策略。

安装虚拟机哦哦哦哦~~~~

安装好了,但是不想弄别的任务了

配置切换国内代理,安装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中的栈回溯操作

我要练几个题看一下

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值