2024年网络安全最全黑客赚钱的路子有多野?CTF逆向入门指南(1)

X86汇编

32位CPU有16个寄存器,32位寄存器存放的是4个字节的数据,它们名称分别为:

4个数据寄存器(EAX、EBX、ECX和EDX);

2个变址和指针寄存器(ESI和EDI);

2个指针寄存器(ESP和EBP);

6个段寄存器(ES、CS、SS、DS、FS和GS);

1个指令指针寄存器(EIP);

1个标志寄存器(EFlags)。

X64汇编

64位CPU有16个通用寄存器,寄存器存放8个字节数据,它们名称分别为:

rax,rbx,rcx,rdx,rsi,rdi,rsp,rbp

r8,r9,r10,r11,r12,r13,r14,r15

32位使用栈帧来作为传递的参数的保存位置,而64位使用寄存器,分别用rdi,rsi,rdx,rcx,r8,r9作为第1-6个参数。rax作为返回值。

64位没有栈帧的指针,32位用ebp作为栈帧指针,64位取消了这个设定,rbp作为通用寄存器使用。

rax 作为函数返回值使用。

rsp 栈指针寄存器,指向栈顶

rdi,rsi,rdx,rcx,r8,r9 用作函数参数,依次对应第1参数,第2参数。。。

rbx,rbp,r12,r13,r14,r15 用作数据存储,遵循被调用者使用规则,简单说就是随便用,调用子函数之前要备份它,以防他被修改。

r10,r11 用作数据存储,遵循调用者使用规则,简单说就是使用之前要先保存原值。



函数(Call)的3种调用约定:_cdecl,_stdcall、_fastcall

_cdecl:是C语言的默认的函数调用方法,所有参数从右到左依次入栈,这些参数由调用者去清除。堆栈恢复常用指令add,esp,x ,x表示参数占用的字节数

_stdcall:是C++标准的函数调用方式,所有参数从右到左依次入栈,如果是调用类成员的话,最后一个入栈的是this指针。

这些堆栈中的参数由被调用的函数在返回后清除,使用的指令是ret x,其中x表示参数占用的字节数。

_fastcall:是编译器指定的函数快速调用方式。由于大多数函数参数个数很少,使用堆栈传递比较费时。因此_fastcall通常规定前两个参数由寄存器传递,其余参数还是通过堆栈传递。但是不同的编译器编译的程序规定的寄存器不同,返回方式一般是ret x。

在这里插入图片描述
总结三个调用约定:函数参数和局部变量区分

函数的局部变量的存在形式:mov eax, dword ptr[ebp -4]

函数参数表示法:mov eax, [esp+arg_0]

Arm32汇编(Android)

ARM微处理器共有37个32位寄存器,其中31个为通用寄存器,6个为状态寄存器。但是这些寄存器不能被同时访问,具体哪些寄存器是可以访问的,取决ARM处理器的工作状态及具体的运行模式。但在任何时候,通用寄存器R14~R0、程序计数器PC、一个状态寄存器都是可访问的。

未分组寄存器 R0 ~ R7,共8个;

分组寄存器 R8 ~ R12,R13 ~ R14 R8 ~ R12:其中FIQ模式下有单独的一组 R8 ~ R12,共5个;

另外 6种模式共用一组R8 ~ R12,共5个;总共10个;

R13 ~ R14:其中USR和SYS模式(表格的第一列)共用一组R13 ~ R14共2个,另外5种模式下各有独自的一组R13 ~
R14共10个;总 共12个;

程序计数器 PC 即R15,共1个;

分组寄存器R13、R14

寄存器R13通常做堆栈指针SP

寄存器R14用作子程序链接寄存器(Link Register-LR),也称为LR,指向函数的返回地址。

Arm64汇编(Android)

汇编中共有34个寄存器。其中包括31个通用寄存器、SP寄存器、PC寄存器,CPSR寄存器。

31个通用寄存器中:

X0-X30:表示是64位的寄存器。

W0-W30:表示是32位的寄存器。

X31 : 也称为零寄存器(它一般用于变量的初始化),它也有两表现形式:XZR:表示是64位的零寄存器, 它在内存中是用8个字节存储。

WZR:表示是32位的零寄存器,它在内存中是用4个字节存储。

SP : 保存栈指针(栈顶指针),使用SP或WSP来进行对SP寄存器的访问,也就是用于操作局部变量地址。

PC:程序计数器(PC指针寄存器),它用于指向即将要执行的下一条指令。

CPSR:状态寄存器

FP(X29):保存栈帧地址(栈底指针)

LP(X30):通常称X30为程序的链接寄存器,保存子程序结束后需要执行的下一条指令。

并熟记以下的条件指令 怎样在ARM汇编中去识别和定位出函数

1.1、 B 跳转指令

1.2、 BL 带返回的跳转指令

1.3、 BLX 带返回和状态切换的跳转指令

1.4、 BX 带状态切换的跳转指令

2.直接向程序计数器 PC 写入跳转地址值。

通过向程序计数器 PC写入跳转地址值,可以实现在 4GB 的地址空间中的任意跳转,在跳转之前结合使用MOV LR,PC

总结:识别函数的方法就是汇编指令中是否有包含:B、BL、BLX、BX、PC的汇编指令。

ARM函数调用约定采用的是:ATPCS

ATPCS的英文全称是ARM-THUMB procedure call standard(ARM-Thumb过程调用标准)

总结:参数1参数4 分别保存到 R0R3 寄存器中 ,剩下的参数从右往左一次入栈,被调用者实现栈平衡,返回值存放在 R0 中。

函数参数:

当参数个数小于等于4个的时候,使用r0到r3这4个寄存器进行参数传递;如果参数个数大于4个,余下的参数就通过sp所指向的数据栈进行参数传递。

比如有3个参数的话,那么r0代表函数的第一个参数,r1代表函数的第二个参数,r2代表函数的第三个参数。

比如有6个参数的话,那么r0-r3表示前面4个参数,然后余下的两个参数通过在栈上开辟8字节的空间进行参数传递。

r0–r3:存储传递给函数的参数值,多余的参数通过压栈传递。

r4 -r11:存储函数的局部变量,Thumb模式不会使用r8以后的寄存器

r12:是内部过程调用暂时寄存器(intra-procedure-call scratch register)。

r13:存储栈指针(sp)。在计算机中,栈非常重要。这个寄存器保存着栈顶的指针。这里可以看到更多关于栈的信息。

r14:链接寄存器(link register)。存储着当被调用函数返回时,将要执行的下一条指令的地址。

r15:用作程序计数器(program counter)。存储着当前执行指令的地址。每条执行被执行后,该计数器会进行自增(+1)。

函数的返回值放到r0中。

fp叫做frame pointer寄存器,即栈帧指针寄存器;sp叫做stack pointer寄存器,即栈指针寄存器。

在ARM指令系统中是地址递减栈,入栈操作的参数入栈顺序是从右到左依次入栈,而参数的出栈顺序则是从左到右的你操作。包括push/pop和LDMFD/STMFD等。

函数返回值

1.结果为一个32位的整数时,可以通过寄存器R0返回。

2.结果为一个64位整数时,可以通过R0和R1返回,依此类推。

3.结果为一个浮点数时,可以通过浮点运算部件的寄存器f0,d0或者s0来返回。

4.结果为一个复合的浮点数时,可以通过寄存器f0-fN或者d0~dN来返回。

5.对于位数更多的结果,需要通过调用内存来传递。

…持续更新

如果你是准备学习网络安全/黑客技术,下面这些你应该能用得上:

①网络安全学习路线
②20份渗透测试电子书
③安全攻防357页笔记
④50份安全攻防面试指南
⑤安全红队渗透工具包
⑥网络安全必备书籍
⑦100个漏洞实战案例
⑧安全大厂内部视频资源
⑨历年CTF夺旗赛题解析

😝有需要的小伙伴,可以点击下方链接免费领取或者V扫描下方二维码免费领取🆓

最后

自我介绍一下,小编13年上海交大毕业,曾经在小公司待过,也去过华为、OPPO等大厂,18年进入阿里一直到现在。

深知大多数网络安全工程师,想要提升技能,往往是自己摸索成长,但自己不成体系的自学效果低效又漫长,而且极易碰到天花板技术停滞不前!

因此收集整理了一份《2024年网络安全全套学习资料》,初衷也很简单,就是希望能够帮助到想自学提升又不知道该从何学起的朋友。

img

img

img

img

img

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

Ih-1715801535543)]

[外链图片转存中…(img-hRinJn9q-1715801535543)]

[外链图片转存中…(img-L4vk3vXq-1715801535544)]

既有适合小白学习的零基础资料,也有适合3年以上经验的小伙伴深入学习提升的进阶课程,基本涵盖了95%以上网络安全知识点!真正的体系化!

如果你觉得这些内容对你有帮助,需要这份全套学习资料的朋友可以戳我获取!!

由于文件比较大,这里只是将部分目录截图出来,每个节点里面都包含大厂面经、学习笔记、源码讲义、实战项目、讲解视频,并且会持续更新!

  • 21
    点赞
  • 25
    收藏
    觉得还不错? 一键收藏
  • 0
    评论
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值