LLVM IR研究分析
前置知识
LLVM是C++编写的构架编译器的框架系统,可用于优化以任意程序语言编写的程序。
LLVM IR可以理解为LLVM平台的汇编语言,所以官方也是以语言参考手册(Language Reference Manual))的形式给出LLVM IR的文档说明。既然是汇编语言,那么就和传统的CUP类似,有特定的汇编指令集。但是它又与传统的特定平台相关的指令集(x86,ARM,RISC-V等)不一样,它定位为平台无关的汇编语言。也就是说,LLVM IR是一种相对于CUP指令集高级,但是又是一种低级的代码中间表示(比抽象语法树等高级表示更加低级)。
LLVM IR即代码的中间表示,有三种形式:
.ll 格式:人类可以阅读的文本(汇编码) –>这个就是我们要学习的IR
.bc 格式:适合机器存储的二进制文件
内存表示
下面给出.ll格式和.bc格式生成及相互转换的常用指令清单:
12345.c -> .ll:clang -emit-llvm -S a.c -o a.ll.c -> .bc: clang -emit-llvm -c a.c -o a.bc.ll -> ...
MFC框架软件逆向研究
MFC框架简介什么是mfc?
MFC库是开发Windows应用程序的C++接口。MFC提供了面向对象的框架,采用面向对象技术,将大部分的Windows API 封装到C++类中,以类成员函数的形式提供给程序开发人员调用。
简单来说,MFC是一种面向对象,用于开发windows应用程序的框架,突出特点是封装了大部分windows API,便于开发人员使用(写win挂方便)。
MFC程序的运行过程分为以下四步:
利用全局应用程序对象theApp启动应用程序。
调用全局应用程序对象的构造函数,从而调用基类(CWinApp)的构造函数,完成应用程序的一些初始化工作,并将应用程序对象的指针保存起来。
进入WinMain函数。在AfxWinMain函数中获取子类的指针,利用指针实现上述的三个函数,从而完成窗口的创建注册等工作。
进入消息循环,一直到WM_QUIT。
那么问题来了,我们如何逆向mfc程序呢?因为其封装了大部分windows API,逆向起来也复杂了不少,因为需要了解大量的windows api 并且熟悉windows编程。下面进行讲解。
MFC如何逆向如下图,是MFC框架软件 ...
游戏安全入门-扫雷分析/远程线程注入
前言无论学习什么,首先,我们应该有个目标,那么入门windows游戏安全,脑海中浮现出来的一个游戏 – 扫雷,一款家喻户晓的游戏,虽然已经被大家分析的不能再透了,但是我觉得自己去分析一下还是极好的,把它作为一个小目标再好不过了。
我们编写一个妙妙小工具,工具要求实现以下功能:时间暂停、修改表情、透视、一键扫雷等等。
本文所用工具:
Cheat Engine、x32dbg(ollydbg)、Visual Studio 2019
扫雷游戏分析游戏数据在内存中是地址,那么第一个任务,找内存地址
打开CE修改器
修改时间->时间暂停计数器的时间是一个精确的值,所以我们通过精确数值扫描出来,游戏开始之前计数器上的数是0,所以我们扫描0。
时间在变化,选择介于什么数值之间再次扫描
可得 0x100579c — winmine.exe+579C
我们发现这个数据都是直接通过基址 + 固定偏移能直接得到的。
然后我们对这个数据去找出 是什么改写了这个地址,得到一个指令和指针:
时间:0x100579c
修改表情 - 没啥用修改表情这个功能怎么搞我觉得还是很容易想到的,这个按钮的作用是重新 ...
记由长城杯初赛Time_Machine掌握父子进程并出题
前言 掌握一道题目的最好办法就是由做题人变成出题人()
本文所说的题目是长城杯某区逆向Time_Machine,题目反编译纯gs,所以本文主要讲解笔者出的题目
:笔者出的题目准备给iscc擂台的,但是没轮上(感觉擂台被控了,怎么说hh)
出题思路额,不算是思路,站在前人的肩膀上罢了。出这道题目的初心是因为比赛的时候用心的做了这道题写了出来感觉收获颇多,但当时只局限于写了出来,并不能全面理解,所以有了这么一个想法。俗话说,实践出真知,熟能生巧,自己去亲手实操将题目敲一遍写一遍,对一个知识点理解的才到位,记忆也更加的深刻。主要加密算法是使用 SuperFastHash 算法对flag逐字节进行哈希处理,然后通过改变环境变量来进入不同的分支,分支里面对内存进行复写和触发异常来实现父子进程的交互,子进程是一大坨代码块,通过以下指令块控制父进程调试子进程实现加密。
12345movabs r11,%dxor r11,0x1337ror r11,13movabs r13,1 #0或1ud2
程序分析程序是64位的exeida64分析拖入ida64后映入眼帘,有一个小的主函数,用于检查环境变量的值 ...
2023强网杯WriteUp
前言2023-12-18创建的文件夹,搁到现在才上传,忘了,麻麻了
rev === 强ollvm杯
babyreTls附加dbg
过掉
把程序运行,在这儿附加
静态密文,key都是假的
动调起来得到真的
密文
Key
这是delta
调到跳出循环,得到sum
Exp
12345678910111213141516171819202122232425262728293031323334353637#include <iostream>#include <cstdint>void XTEA_decrypt(uint32_t v[2], uint32_t const key[4]) { unsigned int i; unsigned int sum = 0xd192c263; uint32_t v0 = v[0], v1 = v[1]; for (int j = 0; j < 4; j++) { for (i = 0; i < 33; i++) { sum - ...
2023楚慧杯初赛WriteUp
前言这周末,四级英语考试,强网杯,楚慧杯,还通宵打强网,我滴妈,差点猝si =。=
然后这篇写的楚慧杯的,就重点说(吐槽)一下
vocal,就3个小时的比赛,还得比赛结束前交WP,写了re1,misc1,misc2,0.o真的极限=。=
楚慧杯学生组
还好,收获满满,强网先锋应该够了,楚慧杯也晋级了,四级的话,阿巴阿巴 =。=
revbabyre - ollvm/tea?xtea打完强网库库打ollvm,这玩意又来
好好,周末就ollvm大赛
D810去混淆
D810是插件 搜到直接用 前提:angr要装好
main函数
Encode 离谱,我去玩ollvm脚本没跑出来
然后我没去ollvm改了一下跑出来了,vocal
这个是去ollvm
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960#include &l ...
2023典型工业行业锦标赛WriteUp
前言不知道是啥比赛,稀里糊涂的就打了
然后发现里面的题型好多是逆向
就把逆向都给做了
(都做了也晋级不了,工控题,不会工控打个锤子 =。=)
baby_go - go/base32go语言写的
Base32变表加密
base32变表
密文
N2XHD244PSVED53BHG2W7ZSVNK5W7ZSVPOTUHNU
table
AC-Z2-7B=
flag{th1s_1s_b4by_b4se32}
签到题简单加密
xor + add
密文
1234567891011121314151617a = [0x87, 0x8C, 0x80, 0x8B, 0x98, 0x57, 0x83, 0x54, 0x8D, 0x5D, 0x5B, 0x58, 0x55, 0x55, 0x59, 0x8D, 0x93, 0x42, 0x90, 0x47, 0x41, 0x96, 0x4C, 0x4F, 0x4D, 0x4C, 0x9F, 0x41, 0x4D, 0x44, 0x4F, 0x81]flag = ''for i ...
2023河南省金盾杯WriteUp
前言题目质量不错
打穿逆向区跟杂项区(bushi)
累死了,我靠,比赛刚结束就得赶高铁去青岛,在高铁上写Wp,我的天,要晕过去的节奏
嗨嗨嗨 Orz
RevRE1 - tls/小花指令/RC4主要是RC4加密有个tls,不用管
主要RC4的call在这儿
这儿应该算是花指令的一种吧
unk_473040是RC4函数的地址
c一下即可
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118#include <stdio.h>#include <iostream>__int64 RC4_encode(u ...
2023山东省职业技能大赛WriteUp
前言啦啦啦啦啦啦啦~ 打完脑子宕机了
打穿逆向跟杂项 =。=
(杂项差个IC卡破解,真没时间看了)
Revbabyrebase64解密
flag{12246231b2e4b2544ff2f4ec36f343e9}
TEA
EasyRejadx打开,看到密文AES-ECB解密即可注意有个\n,把他去掉
GORC密文提取+key
RC4解密
XXTEA - rustrust逆向
居然输入flag,输出flag
替换密文为加密之后的密文不就可以解密了?
找到解密函数开搞
Hardre - 反调试/xtea/Base64反调试、Xtea、Base64、异或
写出解密脚本,看了半天了
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283 ...
2023强网拟态初赛WriteUp
前言尽力了,呼呼呼
fisher - sha1/反调试
sha1
反调试
下载附件运行无果
OK,没思路就动调,找输入的地方下断点
有几个反调试
遇到jz/jnz的指令,改标志位直接过
(通常过反调试的方法,那就是运行,退出程序的前几条指令修改即可)
然后会到输入的地方
N17EHf1DWHD40DWH/f79E05EfIH1E179E1
2e95a5c5f9643df668d3965a6cdf19541bc0496b
发现了主要将函数call
好熟悉的函数,
查MSCN
ALG_ID (Wincrypt.h) - Win32 apps | Microsoft Learn
结合上面的字符串
2e95a5c5f9643df668d3965a6cdf19541bc0496b
解密,得到
6c324d2c86a72b864a22f30e46d20220
提交,正确
flag{6c324d2c86a72b864a22f30e46d20220}
find me and crack me - md5/DES
md5
D ...