智慧的痛苦
未读Psychology and metapsychologyThis chapter is mainly about the ego and maybe the emphasis on the Mirror Phase.
The notion of ego was developed by various philosophers in history, and under this condition Freud came up with a subversive interpretation of the ego.
ⅠFreud’s theory about the notion of the ego has been openly admitted, which can be called “pr-analytical psychology” which contributes to psychology circles to realign the analytic relation and the direction of the practice. More than br ...
You can Run, but you can’t Hideblackhat asia 2023 May 11-12由Elastic的EDR安全工程师john uhlmann分享的一篇议题,内容是关于如何在内存中检测shellcode。
Why do security products scan memory?内存扫描技术主要还是运用在Windows系统中,这是因为Windows系统做的一些局限,比如在Windows x64系统中,微软做的一些限制:
加固了内核;
实现了一些虚拟化技术,比如Hiper-V;
私有化的允许内存对安全产品来说是无法防御的;
综上考虑,只剩下内存扫描这样一个不是办法的办法了,尽管内存扫描不是很完美(效率低、开销大),但仍然是一个有价值的防御面。
Overview of memory scanners传统扫描器:
YARA:内存扫描特征码,Elastic也开源了自己的yara库:https://github.com/elastic/protections-artifacts。
PE-sieve:扫描程序是否被注入、hook,当然PE-sieve并不是 ...
我们可以设想这么一个游戏:在黑板上随意写一些数字,比如0、1、2,然后让人在黑板上写一个没有写在黑板上的数字。这时悖论发生了:当一个“没有写在黑板上的数字”铭刻在黑板上的那一刻(比如“3”),这个数字就已经不再是“没有写在黑板上的数字”了。
这个悖论更加通俗的说法即理发师悖论:
小城里的理发师放出豪言:他要为城里人刮胡子,而且一定只要为城里所有「不为自己刮胡子的人」刮胡子。但问题是:理发师该为自己刮胡子吗?如果他为自己刮胡子,那么按照他的豪言「只为城里所有不为自己刮胡子的人刮胡子」他不应该为自己刮胡子;但如果他不为自己刮胡子,同样按照他的豪言「一定要为城里所有不为自己刮胡子的人刮胡子」他又应该为自己刮胡子。
该悖论的集合论版本便是“罗素悖论”:将所有不是自身元素的集合构成一个集合A,即A={x:x∉x},此时似乎很难说明A∈A或者A∉A。一个更通俗的例子为:A:{A....Z},当A代表一个包含所有大写字母的集合,那么A到底在不在这个集合中是难以说清的。该悖论后续由罗素的学生维特根施打了个补丁解决:任何函数都不能包含自身。维特根施坦的这种解决 ...
在《永不褪色的山楂林》中有这样一个桥段:秦阳为了隐秘地表达对学生马塞的爱意,告诉马塞俄语中“你好”的表达是“Я люблю тебя”并期待马塞以相同的语音回复,而实际上这句话的含义是“我爱你”。这句话在我看来正是山楂林永不褪色的标记,要揭露这个标记,我们须要了解下在语音接收方不了解语音意义时究竟发生了什么。
首先不妨以欲望图1草描下说话时语言系统发生了什么:
横轴:表示能指链,代表能指链历时性的展开;
转向的线:主体构成的矢量图,这里可以看成正在言说的主体;
右下角的空心三角:前语言的主体;
被划的$:被阉割的主体,这里可以看成能了解语音意义的主体;
从语音角度来解释欲望图1:主体在说话时,被语言系统所认可(右边的交叉点),并产生了意义(左边的交叉点),最终产生了自我认同,经过语言确立了自身的存在。右边的交叉点是大他者的位置,而左边的交叉点是大他者给出的讯息,也就是意义的位置。
语音因而是一个回溯性的动作,正如句子只有被标上句号才是完整、有意义的,语音在被表达后也只有通过回溯性的建构才能获得意义。在这样的建构中有两个步骤不可或缺:
语音被听到,或者说被大他者听到;
语音被 ...
这是本人大一上期末水的一篇期末作业,当时刚接触网络安全,整体思想以及技术水平还是比较稚嫩的,但是文末对安全的理解,即“完全的公开或者是相对的保密”是作为我的安全方向的本体论贯穿我的整个学习以及工作生涯的。
今天整理博客一并上传。
内容摘要:XSS(Cross Site Script)作为一种常见的漏洞早已在网络中泛滥成灾,虽然一些安全厂商在这种简单但是一经利用就会有极大威胁的漏洞上还是花费心思进行过滤的,但是企业却似乎毫不重视,联想至网络安全的现状以及以及曾经由乌云开启的乌云众测下的白帽时代,不经感慨万千。
关键词:XSS 网络安全 风险评估 等保
XSS简述XSS的全称是跨站脚本攻击,是在网页中只要有对外的接口很容易发现的漏洞,根据其涉及的攻击方式,普遍将其划分成反射型,存储型和DOM型,其中反射型最为常见也运用最广。反射型XSS最基础的测试方式就是构建类似于“alert(1);”的语句,而成功构建弹窗就是XSS的一个里程碑。而相对的防御XSS的方式也是极为简单的,只要在代码中加入相应的过滤方式(如:用双引号扩起属性值,转义HTML中的特殊字符等)就可以防御这类攻击。可所谓道高一尺 ...
《加密与解密》笔记
未读反跟踪技术BeingDebuggedBeingDebugged标志位Win32 API IsDebuggedPresent可以检测当前进程是否处于调试状态:
123BOOL APIENTRY IsDebuggerPresent(VOID){ return NtCurrentPeb()->BeingDebugged;}
该函数通过读取PEB的BeingDebugged标志位来检测当前进程是否处于调试态,BeingDebugged标志位在PEB的0x002偏移处。
而PEB在TEB的偏移0x30处,又因为TEB被寄存器fs:[18]指向,所以PEB的地址获取方式如下:
12mov eax,fs:[18h]mov eax,[eax+0x30h]
又因为fs:[18h]其实指向自身,所以上面两句可以用一句mov eax,fs:[0x30]替代,结合BeingDebugged偏移,可以得到BeingDebugged获取方式:
12mov eax,fs:[0x30h]mov eax,[eax+0x02]
具体实现如下:
12345678910BOOL is_bei ...
《加密与解密》笔记
未读软件保护技术防范算法求逆堡垒战术
MD5算法
为了确保完整性,有时会在msg末尾加上数字签名等。
RSA算法
一般用于软件保护。
常见的实现:
12R = U^d mod n //注册机U = R^e mod n //验证函数
算法本身没啥问题,但是使用RSA仍有一定的风险:
使用第三方公用代码,这些代码可能有漏洞;
使用不同e,d但是相同N导致共模组攻击;
若解密端使用的函数运用了中国剩余定理就会暴露p,q;
一些伪随机数产生器会产生相同的随机数序列,若使用了这些生成器生成N,可能会暴露p,q;
RSA使用过程中若使用的p,q为某些特殊素数,就会产生弱密钥,产生风险;
游击战术
化整为零
即将要验证的内容分段进行验证函数。
虚虚实实
R分段成R1,R2,R3,R4……后,可以将验证的值U与这些分段关联起来,在运用一些方法使得R和U不呈现一一对应的关系。
战略转移
内存复制;
写入注册表或文件;
同时将注册码复制到多个地址;
突然变化转移注册码的方法;
随机使用上述方案;
抵御静态分析花指令测试代码:
12345678910111213141516171819 ...
《加密与解密》笔记
未读专用加密软件壳压缩壳
UPX
ASPack
加密壳
ASProtect
Armadillo
EXECryptor
Themida
虚拟机保护软件书中介绍的虚拟机与P-CODE类似,将一系列指令解释成字节码后放在一个解释引擎中执行,从而实现对软件的保护。
概念一个虚拟机引擎主要由编译器、解释器、虚拟CPU环境组成,并且搭配一个或多个指令系统。虚拟机在运行时,先根据自定义的指令把已知的x86指令解释成字节码并放在PE文件中,然后将原始代码删除,改成类似这样的代码:
12push bytecodejmp VstartVM
然后进入虚拟机执行循环。
比较典型的有较好保护强度的是VMProtect,使用起来也极为方便,针对要保护的函数,设置保护,然后点击编译即可:
脱壳技术基础知识壳的加载过程
保存入口参数
加壳程序初始化会保存各寄存器的值,待外壳执行完毕后回复各寄存器的内容,最后跳到原程序执行。
通常会使用如下一些指令进行保存和恢复寄存器内容:
12pushad/popadpushfd/popfd
获取壳本身需要使用的API地址
一般情况下,外壳的输入表只有GetProcAddr ...
《加密与解密》笔记
未读Hook的分类Address Hook即修改某些函数的地址,他们可能存放在某个函数表中,可能是存在例程中,可能是在MSR寄存器中,也可能是某个特点函数指针。
各类表中的地址
PE的IAT
仅针对某个PE的模块的IAT进行Hook,想要对加载的所有模块起作用就必须变量进程内模块,对目标API进行Hook。
PE的EAT
EAT存放的是函数地址的偏移,所以想要使用针对EAT的Hook,就需要计算目标函数与修改后函数地址的偏。该方式的Hook进行后,所有试图通过输入表获取函数地址的行为都会收到影响。
user32.dll的回调函数表
user32.dll中的UER32!apfnDispatch的回调函数表存放了各种用于GUI的回调函数,当修改了这里的函数地址后,就可以进行Hook。
IDT
IDT即系统中断ID,IDT的基址存放在idtr寄存器中,表内项目数存放在idtl寄存器中,每个中断项的中断处理例程成为ISR。
SSDT以及Shadow SSDT
SSDT表即系统服务描述符表,在API调用系统服务处理时使用。Shadow SSDT表用于处理各种GUI服务。
C++ ...