llvm&ollvm初探
LLVMLLVM的核心思想是将编译器分为前端和后端两个部分,前端负责将源代码转换为中间表示LLVM Intermediate Representation (IR)(以库的形式提供接口),后端负责将中间表示转换为目标机器的汇编代码。 LLVM IR三种表示: .ll 格式:人类可以阅读的文本。 .bc 格式:适合机器存储的二进制文件。 内存表示 LLVM Pass https://llvm.org/docs/WritingAnLLVMPass.html#the-immutablepass-class Pass就是“遍历一遍IR,可以同时对它做一些操作”的意思,Pass 是 中间 IR 处理环节的主要模块。llvm pass的作用: 插桩 优化机器无关的代码 ModulePass (基于模块)如果函数传递不需要任何模块或不可变传递,则模块传递可以使用接口的函数级传递(例如支配者)来提供检索分析结果的函数。 FunctionPass (基于函数)CallGraphPass (基于调用图)LoopPass (基于循环)PASS 注册方式1、修改...
Linux中的进程通信与多线程
进程与线程 线程是 CPU 调度的最小单位,进程是资源分配的最小单位。 进程(Process) 资源分配的基本单位。 每个进程拥有自己独立的地址空间(代码段、数据段、堆、栈)和文件描述符表。 进程之间不能直接访问彼此的内存空间,只能通过 IPC(如 pipe、shm、socket)通信。 切换进程涉及完整的上下文切换,开销相对较大。 一个进程挂掉不会影响其他进程 线程(Thread) CPU 调度的基本单位。 一个线程属于某个进程,多个线程共享进程的地址空间、堆、文件等资源。 每个线程有自己独立的栈空间和寄存器上下文。 使用线程可以更轻量地实现并发(上下文切换比进程快)。 线程之间通信无需系统调用,效率高;但一个线程崩溃可能拖垮整个进程。 协程(coroutine)协程是在用户态调度的更轻量级的执行单元,不涉及系统调用或上下文切换,因此更快,但不适合多核并行。 线程通信 vs 进程通信 线程之间通过共享内存通信,进程之间通信必须借助系统提供的 IPC 机制。 线程通信:基于共享内存 + 同步控制 线程间共享内存,不需要...
Heaven's Gate
天堂之门前置知识Windows 架构概览 用户层 内核层 32 位或 64 位进程 始终为 64 位内核 Windows 的内核(ntoskrnl.exe)永远是 64 位。 即使运行的是 32 位程序,它也是通过 WOW64 子系统(Windows-on-Windows64) 模拟运行的 WOW64WOW64 是 Windows x64 系统的一个兼容子系统,用于支持 32 位应用的运行。 在 64 位系统中为 32 位程序提供一个运行时环境。 WOW64 的三大组件:| 模块 | 位数 | 作用 || ———————— | —— | ———————————- || wow64.dll | 32 位 | 桥接层,将 32 → 64 位参数封装 || wow64win.dll | 64 位 | 处理 GUI / 用户模式接口 || wow64cpu.dll | 64 位 | CPU 上的 thunk 机制(切换执行模式) | 拦截 32...
常见加密算法整理
TEA家族TEA算法每一次可以操作64bit(8byte),采用128bit(16byte)作为key,算法采用迭代的形式,推荐的迭代轮数是64轮,最少32轮(可以改变)。 TEA系列算法中均使用了一个DELTA常数,但DELTA的值对算法并无什么影响,只是为了避免不良的取值,推荐DELTA的值取为黄金分割数(5√-2)/2与232的乘积,取整后的十六进制值为0x9e3779B9(也可以改变),用于保证每一轮加密都不相同。 XTEA:使用与TEA相同的简单运算,但四个子密钥采取不正规的方式进行混合以阻止密钥表攻击。Block TEA算法可以对32位的任意整数倍长度的变量块进行加解密的操作,该算法将XTEA轮循函数依次应用于块中的每个字,并且将它附加于被应用字的邻字。 XXTEA使用跟Block TEA相似的结构,但在处理块中每个字时利用了相邻字,且用拥有两个输入量的MX函数代替了XTEA轮循函数。上面提到的相邻字其实就是数组中相邻的项。 算法 年代 设计目标 缺点 /...
ollvm_BCF源码阅读
虚假控制流 BCF (Bogus Control Flow)原理: 虚假控制流混淆通过加入包含不透明谓词的条件跳转(永真or永假)和不可达的基本块,来干扰 IDA 的控制流分析和 F5 反汇编。 反混淆:1、将全局变量赋值并将 segment 设为只读。 对于常规的 ollvm 的 bcf 混淆来说,bcf 的不透明谓词都是处于 .bss段 中。 Edit->Segments->Edit segment 将 Write 复选框取消勾选, .bss段 就设为只读 2、d810 3、idapython patch 不透明谓词 源码位置:obfuscator\lib\Transforms\Obfuscation\BogusControlFlow.cpp 源码解析Pass结构与参数12345struct BogusControlFlow : public FunctionPass { static char ID; // Pass identification bool flag; BogusControlFlow() :...
IDA使用技巧
这两天做题的时候同届的pwn师傅sakura来问有没有可以修改IDA局部变量的方法。研究了一下感觉很有意思,于是单独开一篇文章记录我经常用到的IDA小技巧。 修改局部变量IDAIDA有两种实现方式,我在网上查到可以force new variable,但是我一直没成功。 实现效果: 步骤:因为可以观察到都是分开赋值的 我们在var_5那边按U 我们的目标是分出一个char+int,因为我得需求是让v2[0]单独分出来变成char,v2[1]-v2[4]变成四字节的int,所以我们选择1+4 在01的地方按N重命名成i,在05的地方选择建立数组(可以按A)在N成opcode 回到executeBrainfuck按F5 接着来改汇编 因为IDA在反编译的时候,会根据变量的访问方式和指令来推断变量类型 1mov dword ptr [rbp+opcode+1], 0 ; 赋值了 4 个字节 opcode[1]之后是 4 个连续的字节,IDA会推测opcode[5]这样的存储 我们把它nop掉 1、opcode+1字节数显着地4初始化,IDA...
AI_agent_zer0_to_one(二)
AI Agent 架构设计Agent 架构的基本组件AI Agent的架构通常包含以下基本组件:感知模块、推理引擎和行动执行模块。这些组件共同工作,使Agent能够感知环境、做出决策并采取行动。 感知模块:负责从环境中收集信息,并将其转换为Agent可以处理的格式。 关键特点: 多模态感知:处理视觉、听觉、触觉等多种输入。 数据预处理:滤波、归一化、特征提取等。 传感器融合:整合多个传感器的数据。 推理引擎:Agent的”大脑”,负责处理感知到的信息,做出决策,并生成行动计划。 关键特点: 知识表示:存储和组织Agent的知识和信念。 推理机制:基于规则、概率或神经网络的推理。 学习能力:从经验中更新知识和策略。 行动执行模块:将推理引擎的决策转化为具体的行动,并与环境进行交互。 关键特点: 动作映射:将高级决策转换为低级控制命令。 反馈控制:根据执行结果调整行动。 安全机制:确保行动不会危及Agent或环境。 常见的 Agent...
AI_agent_zer0_to_one(一)
AI Agent 概述与理论基础AI Agent 的定义&特点AI Agent:智能代理,一种能够感知环境并在其中采取行动以实现特定目标的计算系统 交互方式: 传统AI系统:通常是被动的,只在接收到输入时才进行处理。 AI Agent:主动与环境交互,持续感知和行动。 决策能力: 传统AI系统:往往基于预定义的规则或模型进行决策。 AI Agent:能够根据环境变化动态调整决策策略。 学习能力: 传统AI系统:学习能力有限,通常需要人工调整。 AI Agent:具有持续学习和自我改进的能力。 目标导向: 传统AI系统:通常专注于解决特定问题。 AI Agent:能够处理多个目标,并在目标之间进行权衡。 适应性: 传统AI系统:对环境变化的适应能力较弱。 AI Agent:能够快速适应新环境和新任务。 AI Agent 的类型与应用领域基于规则的 Agent通过预定义的规则来做出决策和执行操作。 12345678910111213class RuleBasedAgent: def __init__(self): ...
从零开始的大模型搭建之旅
一、搭建开发环境 python3 pytorch 1pip install numpy tqdm matplotlib 依赖库 1pip install numpy tqdm matplotlib vscode / Jupyter 二、准备一个数据集 WikiText OpenWebText anythingelse 1.准备环境(以openwebtext为例)12git clone https://github.com/JCPETERSON/OpenwebText.gitcd OpenwebText python版本得高一点,我用的3.12,3.8不行。 1pip install -r requirements.txt 如果老报错版本问题就直接下(没报错就不改) 1pip install beautifulsoup4 certifi chardet cssselect feedfinder2 feedparser htmlmin idna jieba3k lxml newspaper3k nltk numpy pandas pillow...
Android-课程总结
参考 正己老师的《安卓逆向这档事》 基础知识与手机建立连接模拟器123adb connect 127.0.0.1:端口号adb devicesadb -s 127.0.0.1:端口号 shell 注意:我的是mumu模拟器,每次都要到多开器里面查看adb端口建立连接,但是正常应该可以直接adb devices&adb shell。模拟器是这样的TT 真机手机开开发者版本和USB调试,然后通过数据线连接 有一些数据线只能充电,第一次连接电脑的时候手机上会弹出要求允许 USB 调试访问。确保你点击了“允许”按钮。 如果没弹出就换一根数据线/重启。 12adb devicesadb shell 文件传输传文件进windows123adb -s 127.0.0.1:16384 shell pm list packagesadb -s 127.0.0.1:16384 shell pm path com.chaoxing.mobileadb -s 127.0.0.1:16384 pull...