安卓基础语言
APP开发语言App开发主要有两大技术路线,分别是原生开发和混合开发
Android的官方编程语言包括 Java 和 Kotlin
Kotlin定位:Google 官方推荐的首选 Android 开发语言(2019 年起)。优势:简洁高效:语法糖减少样板代码(如 data class 自动生成 equals()/hashCode())。空安全:编译时检查空指针(变量默认不可为 null,需显式声明 var str: String?)。协程支持:简化异步任务处理(替代 AsyncTask 和回调地狱)。完全兼容 Java:可调用 Java 代码,适合逐步迁移旧项目。使用场景:新项目首选,尤其适合快速迭代和复杂业务逻辑。结合 Jetpack Compose 实现声明式 UI(现代化 UI 开发)。
Java定位:Android 早期官方语言,仍广泛用于旧项目维护。优势:生态成熟:海量开源库和教程资源(如 Retrofit、Glide)。跨平台性:代码可复用于后端或其他 Java 平台。劣势:冗长语法(如匿名内部类、getter/setter)。缺乏现代语言特性(需手动处理空指针)。使用场景 ...
汇编前期知识
必要性
纯汇编语言开发
高级语言内联汇编
Windows内核编程
逆向分析
汇编语言种类
x86汇编语言
x64汇编语言
伪指令
高级数据表示
win32汇编入门
内联汇编
环境配置VC->win32应用程序向导(选择空项目)->属性->高级->入口点(main)->生成依赖项(选择masm)->添加汇编程(asm后缀)
扩展:asmdude
代码基本套路1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859.586 ;指令集.MODEL flat,stdcall ;内存模式、语言模式、其他模式includelib user32.lib ;调用静态库includelib kernel32.lib ExitProcess PROTO,dwExitCode:DWORD ;伪指令MessageBoxA PROTO hWnd:DWORD,lpText:BYTE,lpCaption:BYTE, ...
堆栈
堆栈堆栈 :“先进后出”的存储区,存在于堆栈段中,SP在任何时候都指向栈顶。
一、PUSH指令(字入栈)1、格式:PUSH 源操作数(字)
1PUSH AX ;AX进栈
2、功能(1)首先将栈顶 指针 减2,即(SP)-2=>SP;(2)然后将源操作数(字)=>((SP)+1,(SP))。(高字节,低字节)即执行操作:
(SP)<– (SP)-2
((SP)+1,(SP)) <– (源操作数)
3、说明 高字节先进栈,低字节在栈顶
PUSHAD指令
在实际应用中,pushad 和 popad 常用于函数调用或中断处理程序的开头和结尾,以此来保存和恢复寄存器状态,确保这些操作不会对调用者的寄存器值产生影响。不过要留意,这两条指令会对栈进行大量操作,所以在栈空间有限的情形下要谨慎使用。
二、POP指令(字出栈)1、格式:POP 目的操作数
1POP AX ;恢复AX
2、功能(1)首先将栈顶的字((SP)+1,(SP))=>目的操作数;(2)然后将堆栈指针SP加2,即(SP)+2=>SP。即执行操作:
(DST)<– ((SP ...
Linux动态内存管理机制
Linux动态内存管理机制堆堆是用于分配动态内存的一段内存区域,它独立的存在于内存中,介于程序内存基地址和libc地址之间,它是从低地址向高地址生长的
比如说:一个留言板程序,用户可以输入自己的留言,留言长度由用户自己决定,那么栈上存储的是一个函数的局部变量,bss储存全局变量
那么我们怎么储存用户输入的留言,用户的留言可能是1个字符到几百几千个字符,这时候就需要堆来进行动态管理
在lib中,我们可以通过malloc来给用户分配一段长度位size的内存,通过free来释放这段内存空间
这些数据,被统一存放在堆中,维护这些数据的运行机制在glibc中,称为ptmalloc,也就是我们要重点学习的内容
堆的内存管理机制堆的管理机制相比于栈是非复杂,但是堆的漏洞比栈有更多的形式和利用方式,而且堆漏洞所产生的条件比栈更少
一般情况下栈溢出起码需要16个字节,也就是说至少溢出到返回地址才能利用,但是堆的话只需要一个字节就可完成利用,甚至这个字节可以是个\x00,也就是空字节,nullbyte
栈基本都会关闭一两个保护机制,堆的话一般全开
堆块在内存中,堆是一个个堆块构成的,这些堆块称为chunk ...
栈溢出
演示123456789101112131415161718192021222324252627282930#include <stdio.h> #include <string.h>//这是一个带有初始值的全局变量,编译后它会在.data段(数据段) //全局变量,定义在所有函数外部,程序运行期间一直存在,不会随着函数结束而销毁 char global_msg[]="Hello Pwn Data Segent!";//这是一个没有初始值的全局变量,编译后会在.bss段(未初始化数据段) //注意:未初始化的全局变量,系统会默认赋值为0(int类型)、空字符串(char类型)等默认值 int global_bss_var;//这是一个故意留有破绽的函数(漏洞函数),也就是我们重点攻击的目标void vulnerable_function(){ char buf[16];//分配在栈上的局部变量空间(16字节) //局部变量,定义在函数内部,只有函数执行时才存在,函数结束后自动释放 printf("Please input y ...
file协议
概念 1、解释:File协议主要用于访问本地计算机中的文件,就如同在Windows资源管理器中打开文件一样。 2、格式:file://机器的IP地址/目录/文件,例如要打开D盘images文件夹中的111.png文件,那么可以在资源管理器或IE地址栏中键入file://D:/images/111.png 然后回车。
注:
(1)对于本地机器,机器的IP地址可变成127.0.0.1或localhost或什么也不写。(2)“/”符号一个都不能少。
僵尸扫描
概念 僵尸主机是指感染僵尸程序病毒,从而被黑客控制的计算机设备。但是僵尸扫描中的僵尸主机指的是一个闲置的操作系统(这里的闲置是指主机不会主动和任何人通信),且此系统的IP数据包是递增的。
IPID:指的是通信过程中,IP数据包中的ID。
僵尸扫描拥有极高的隐蔽特性,但是实验条件苛刻。
1.目标网络可伪造源地址进行访问。
2.选择僵尸机,僵尸机需要在互联网上是一个闲置的操作系统,需要系统使用递增的IPID,比如XP系统。
原理SYN/ACK是第二次包。
第一次
肉鸡发送SYN/ACK包
僵尸机会返回拒绝包,会泄露IPID=x
第二次
肉鸡向目标发送SYN包,使用僵尸机IP
目标会向僵尸机发送回应请求SYN/ACK
发送IPID=x+1
僵尸机会断开连接
第三次
肉鸡向僵尸机发送SYN/ACK包,IPID=x+2
目的:
如果端口是关闭的,就不会发送请求,因此来勘测开放端口
kali Maltego
1.概念 重点是分析通过互联网访问的数据之间的真实世界关系,其中包括足迹互联网基础设施和收集有关拥有该网络的人员和组织的数据。通过使用OSINT(开源情报)技术,通过询问whois记录,社交网络,DNS记录,不同的在线API,提取元数据和搜索引擎来搜索这些数据之间的连接。该工具将提供广泛的图形布局,允许对数据进行聚类,使关系准确和即时。
2.挖掘子域名子域名是某个主域的二级域名或多级域名,在防御措施严密情况下无法直接拿下主域,那么就可以采用迂回战术拿下子域名,然后无限靠近主域。
挖掘子域名的方式
子域名挖掘工具:Maltego、子域名挖掘机
搜索引擎挖掘
第三方网站查询
证书透明度公开日志枚举
其他途径
scapy的使用
用法ARP函数ARP().display()来查看ARP函数用法。
用法:
[ ARP ]hwtype= 0x1 硬件类型ptype= 0x800 协议类型hwlen= 6 硬件地址长度plen= 4 协议地址长度op= who-has who-has查询hwsrc= 00:0c:29:6a 源MAC地址psrc= 192.168.1.53 源IP地址hwdst=00:00:00:00:00:00 目标MAC地址pdst=0.0.0.0 向谁发送请求
IP/ICMP的方式使用IP().display()来查看格式
[ IP ]version=4 版本:4ihl= None 首部长度tos= 0x0 服务len= None 总长度id= 1 标志flags=frag= 0ttl=64 生存时间proto= hopopt 传输控制协议 IPV6逐跳选项chksum ...
算法与算法复杂度
[toc]
算法概念为了定义某问题,必须给出一系列的运算规则,这一系列的运算规则是有限的,表达了求解问题方法和步骤,这就是算法。
一个算法可以用自然语言描述,也可以用高级程序设计语言描述,也可以用伪代码描述。本书采用C语言对算法进行描述。
基本特征有穷性,算法的执行必须在有限步内结束。
确定型,算法的每一步骤必须确定无二义性的。
输入,算法可以有0个或多个输入。
输出,算法一定有输出结果。
可行性:算法中的运算必须是可以实现的
算法复杂性概念一个算法的优劣主要从算法的执行时间和所需要占用的储存空间两个方面衡量。
对于算法的时间复杂性,采用算法执行过程中其基本操作的执行次数,称为计算量来度量
算法中基本操作的执行时间和所需要占用的存储空间两个方面衡量
对于算法中的时间复杂度,采用算法执行过程中其基本操作的执行次数,称为计算量来度量
算法中基本操作的执行次数一般是与问题规则有关的,对于结点个数为n的数据处理问题,用T(n)来表示算法基本操作的执行次数。
因素
输入数据项数目
输入数据分布
实现算法
使用数据结构
评价(1)合理选择一个或几个操作作为“标准操作”。
(2)计算量=给 ...









