-Qfrost-

Qfrost真是个fw(

ByteCTF 2021 Re 部分题解

languages binding GO+LUA 整了个类似解释器的东西。可以看出程序是GO编译的,并且混淆了符号。没有符号的Go,实现了Lua的虚拟机,我只能说非常恐怖。 随便往文件里输点啥 总能通过报错得到一段输出 对比源文件内输入和报错输出,发现就是逐位字节异或了85。然后对文件解密,发现文件少了头。现场学习lua文件结构 Lua chunk文件结构 修文件头前6字节,尝试用unl......

OLLVM 之指令替换源码学习

指令替换,Instruction-Substitution(sub),是一种比较简单的混淆方式,会将代码中一些简单的数学运算复杂化,但这种方式容易被代码优化给去除,且目前 OLLVM 只实现对整数运算的混淆。如: 1234567891011121314151617181920212223242526272829303132原式子:a=b+c混淆后:a = b - (-c)a = -(-b +......

LLVM 调试环境配置

感谢@Richar,教我配出了超级方便的LLVM Pass源码级调试环境 Orzzzz 准备工作 按照前一篇博客 LLVM编译与FirstPass 配置好LLVM环境和环境变量,LLVM必须用Debug模式编译 安装好vscode 如果用的是虚拟机则配好vscode remote ssh,WSL的话配好vscode remote WSL 调试环境配置 本来我是想直接将调试环境配置到LL......

LLVM 编译与First Pass

要开始正儿八经认真学LLVM了。先吐槽一下,这东西是真的麻烦,编译起来一堆坑,项目还贼大,一编译就是十几分钟至一个小时。还吃电脑各种环境,各种小版本,前前后后至少编译了好几天才整出一个跨平台、可集成多种工具链的成品。下面做个记录。 编译 编译这一步应该是最麻烦的,编译时间长,小版本多,github各种仓库,鱼龙混杂。这里有个很大的坑,就是LLVM的版本。如果就是随便用用,那版本无所谓,但是如......

【Design Patterns】创建型模式

工厂模式(Factory Method) 意图:定义一个创建对象的接口,让其子类自己决定实例化哪一个工厂类,工厂模式使其创建过程延迟到子类进行。 主要解决:主要解决接口选择的问题。 何时使用:我们明确地计划不同条件下创建不同实例时。 如何解决:让其子类实现工厂接口,返回的也是一个抽象的产品。 关键代码:创建过程在其子类执行。 应用实例: 需要一辆汽车,可以直接从工厂里面提货,而不用去管这辆汽......

【Design Patterns】设计模式

总的来说就是,越来越觉得自己开发有问题。写东西,我能写,能实现,但是代码越看越丑,尤其是代码量高的一些大项目,写到后面就会觉得语法和结构上各种不满意。故有了此系列文章。 本人Python、C/C++、Go用的比较多,故这一系列,Demo以Python为主,但也可能穿插C\C++、Go的Demo。设计模式灵活,本人开发能力又比较菜,需要一定时间理解,故本系列慢更。 设计模式 设计模式(Desi......

【安卓】NDK配置与项目集成

折腾了一下Android+SO,用的环境是IDEA+NDK。主要因为IDE和各种环境依赖迭代太快,网上教程很乱,方法基本都是过时的,自己踩了很多坑,这里做个记录。 0x01 下载NDK 先去下载NDK : https://developer.android.google.cn/ndk/downloads?hl=zh-cn 解压,并将该目录配置到环境变量。 0x02 Java接口声明 Java......

【安卓】APK反编译、修改、重打包、签名

有的时候做安卓逆向,需要脱壳、patch SO、改代码等操作,需要对安卓apk包做修改。APK包是一个带签名的Package,对其做修改,需要进行反编译解包、修改其中内容、重打包、重签名四步操作。以下记录过程。 0x01 反编译解包 现有一APK,需对其进行调试,但是jadx解析其BuildConfig发现APK Debug的标志为false。需对其进行修改,而修改的第一步就是要先反编译解包......

OLLVM 之虚假控制流源码学习

本来这篇文章5月就写好了,然后因为各种各样的事情咕了好久,以至于今天才发出来。 虚假控制流,Bogus-Control-Flow(BCF),该⽅法通过在当前基本块之前添加⼀个基本块来修改函数调⽤图。这个新的基本块包含⼀个不透明的谓词,然后有条件地跳转到原始基本块。原始的基本块也将被克隆并填充以随机选择的垃圾指令,这⾥和我们在CTF中的⼀些看到的很多if…else…语句相对应了,中间会有很多的......

无痕HOOK(硬断+VEH)

平常常用的三环Hook通常是InlineHook和虚Hook,这两种Hook方式均是通过修改内存来劫持控制流,InlineHook通过修改代码段上的代码而虚Hook通过修改虚表指针。因为均对内存做了修改(且往往Hook的位置都是敏感内存),很容易被诸如CRC之类的手段检测到。故学习了一下三环下的无痕HOOK,注意这里的无痕指的仅仅是不对代码段等内存产生修改,而不是不会被发现。 在x86架构下......

浙ICP备19044916号-1