使用ida脚本去除ollvm混淆
纸上得来终觉浅。尝试一下通过ida脚本解ollvm混淆。样本来自看雪 前言首先放上经典图片 函数的开始地址为序言(Prologue)的地址 序言的后继为主分发器(Main dispatcher) 后继为主分发器的块为预处理器(Predispatcher) 后继为预处理器的块为真实块(Relevant blocks) 无后继的块为retn块 剩下的为无用块与子分发器(Sub dispatchers) 举个例子,ollvm混淆前,程序的执行流程如下: 混淆后,变成: 我们要做的就是将其还原成: 分析接下来看样本。序言块如图所示。除了初始化W8外还初始化了W20-W28用于分发。 解ollvm混淆首先要找到主分发器,这里我们可以认为入度大于某个阈值的块即为主分发器。 针对这个样本,真实块的后继节点就是主分发器,通过一个无条件跳转跳转到主分发器。所以只需要通过寻找主分发器的前驱节点即可找到所有真实块。 真实块会在最后更新W8,可以以此作为根据来还原控制流。其更新的W8的Index所对应的真实块即为其真实后继。 对于真实块的index,可以通过真实块的前驱分发块来获取到真实...
小白写给小白的wp-腾讯游戏安全竞赛2024安卓
0x0 逆向前的准备(本文中引用的代码基于UE4.27) 笔者是第一次接触虚幻引擎相关的逆向,所以这里先速览一下基础知识 先快速看一眼UE5的文档,核心的开发模型应该变化不会太大。 UE5文档速览直接看虚幻引擎术语。这里摘要自认为重要的地方 虚幻引擎术语 对象Object 是虚幻引擎中最基本的类。虚幻引擎中的几乎所有功能都继承自object(或使用其中的部分功能)。 在C++中,UObject 是所有object的基类,可以实施多种功能,例如垃圾回收、用于将变量提供给虚幻编辑器的元数据(UProperty)支持以及用于加载和保存的序列化。 ActorActor 是可以放到关卡中的任何object,例如摄像机、静态网格体或玩家出生点位置。 在C++中,AActor 是所有Actor的基类。 PawnPawn 是Actor的子类,作为游戏内的形象或人像(例如游戏中的角色)。玩家或游戏的AI可以控制Pawn,将其作为非玩家角色(NPC)。 角色角色(Character) 是计划用作玩家角色的Pawn Actor的子类。角色子类包括碰撞设置、双足运动的输入绑定以及用于玩家控制动作的其他...
Hello World
Welcome to Hexo! This is your very first post. Check documentation for more info. If you get any problems when using Hexo, you can find the answer in troubleshooting or you can ask me on GitHub. Quick StartCreate a new post1$ hexo new "My New Post" More info: Writing Run server1$ hexo server More info: Server Generate static files1$ hexo generate More info: Generating Deploy to remote sites1$ hexo deploy More info: Deployment