数字网络安全人才挑战赛2023-逆向区WriteUp
game- misc?情景再现(非预期)附件给了两个, 程序是个贪吃蛇?
查壳
然后拖入ida分析
发现这儿有个png文件 要被读取, 那么根据 经验 给的另一个附件 感觉就是把那个文件变为png 然后读出flag
核心:
计算出 怎么把给的附件 变为 png 的文件头
根本就不用看程序到底是干啥的
计算出 ^ 0x80 正好是png的文件头
然后exp
123456789101112131415161718192021enc = open("sinke", mode="rb")encData = enc.read()encDataLen = len(encData)# 输出的文件decData = open(r"flag.png", "wb")# keykey = bytes(b"0x80")# 循环解密for i in range(encDataLen): decData.write(bytes([encData[i] ^ 0x80]))decData.cl ...
reverse-angr学习-构造堆栈
前言最近在突破学习angr使用
这儿就拿这个例题来写写, 挺好的
方便我复习
构造堆栈的核心: 找到函数调用前的exp情况和调用后的esp的情况以及输入的地址
例题:https://github.com/angr/angr-doc/tree/master/examples/flareon2015_2
直接开整? 我以为是elf文件
查下壳
拖入ida分析
函数这么少??
决定用angr来解题 那么 想想构造堆栈的核心
那就找呗
可以先看下 官方exp
12345678910111213141516171819202122232425262728#!/usr/bin/env pythonimport angrdef main(): b = angr.Project("very_success", load_options={"auto_load_libs":False}) # 创建一个angr项目并且金庸CLE自动解析共享库依赖关系(说白了就是不自动加载c函数的库文件) # 因为这是一个win的二进 ...
kalmarCTF逆向区部分WP
前言第一次 打国际赛
只能说 太有意思啦(难死我吧):sob: :sob: :sob:
首先对师傅们 及 我自己 说句
不管怎么样 我会好好努力学习的
:grin: :grin: :grin: :grin: :grin: :grin:
然后的话 不管怎么说都学到了一点东西
单拿题目来讲 队里师傅出了第一个CycleChaser
笔者呢 就对这道领悟的还算…
(我太菜辣 Orz Orz)
不瞎掰扯了 看题
有所错误, 望指正 诚心希望大家能指明是否有误
笔者万分感谢 (Orz)
CycleChaser查壳 运行(不能运行)
拖入ida分析
思路这就是 关键部分
123456789101112131415161718192021222324252627282930v16 = malloc(0x4009uLL); // malloc分配0x4009空间来存放上面所作的操作 - 理解位初始化也可以 if ( !v16 ) { puts("Error."); exit(6); ...
reverse-有意思的题目
前言第一道题是 某高校第五届“安洵杯”上的题
还是《偷》的别人原题, 什么成分 不说了
但是我没看出来 还卡了很久
看来还是做的少了
还有 是今年主办方 确实有点拉
期待最后一天的发挥
(今天是比赛第二天 话说平台为啥还没有维护好)
ctfshow - re4(有意思的模运算)查壳 运行
了解了 拖入ida64分析
(md 想试试angr 结果win还不会搞)
嘎
都注释好了 自行观看吧
贴exp
123456789101112131415161718192021222324# -26 * (i /26) 就是 % 26table = ')(*&^%489$!057@#><:2163qwe'cipher = '/..v4p$$!>Y59-'d = ''for i in range(len(cipher)): d += chr(ord(cipher[i]) ^ 7)print(d)d = '())q3w##&9^2>*'c = st ...
reverse-反调试-异常处理|tea
简介异常常用于动态反调试技术。正常运行的进程发生异常时,在**SEH(Structured Exception Handling)**机制的作用下,OS会接收异常,然后调用进程中注册的SEH处理。但是,若进程正被调试器调试,那么调试器就会先于SEH接收处理。利用该特征可判断进程是正常运行还是调试运行,然后根据不同的结果执行不同的操作,这就是利用异常处理机制不同的反调试原理。
上面回答 好官方 呃呃
下面我就一道题来讲解
NewStarCTF week4 - exception一看题目 就是考察异常处理的
(题目算法就一个tea加密)
拖入ida静态分析
跟进35100A
搜一下贴一下(看不懂 )
https://blog.csdn.net/u011279649/article/details/12840937
对于这道题 就是干扰我们得到delta
动调一下
触发异常后, 将[ebp+var_48] ^ 0x1234578
(点击查看[ebp+var_48] 其实就是result(记着大小端序的问题))
所以说可以写个脚本跑出值
贴exp
123456sum = ...
reverse-angr自动化技术
前言angr是一种基于z3的自动化解题技术 - 是一个用于分析二进制文件的python框架。
对逆向分析来说 是很有帮助的
当然angr可以用在逆向分析, 但不限于逆向分析
(嘎嘎 摆烂 让电脑自己去跑flag)
然后玩过z3 应该就了解这是个干嘛的了
这个的重点就是 符号执行
项目地址 https://github.com/angr
符号执行简单来说 就是
用符号代替真实值,通过限制条件来进行路径遍历
从而找到(得到flag的路径)正确的答案
就像下面这样
安装踩坑具体操作自行Google 或 BaiDu吧 Orz
简单过一下
安装依赖环境
sudo apt-get install python-dev libffi-dev build-essential virtualenvwrappe
2.设置环境变量
export WORKON_HOME=$HOME/Python-workhome
和我一样就好 没啥影响
启动服务
可以先用whereis virtualenvwrapper.sh找到这个在哪
然后下面 source 后边就填啥
source /usr/ ...
reverse-hash暴破实例
NewStarCTF 公开赛 - week4hash看题目 考点是hash算法
直接拖入ida 看啥逻辑
跟入4113F2
打开MSDN去查看这个模块 看是什么hash
贴网站 https://learn.microsoft.com/en-us/windows/win32/seccrypto/alg-id
欧克 是sha1
以一行00 + 00 00 00 分开了
放入Sublime整理一下
1234567text = ['A2F17ED1C6A8BC31769CDF654DF4B8A937042CB6', '0CA8A2EDB0C1D34A432A5A4464E0D6ABD847C831', 'C359D69F3F08BB920F2C3B51133205533462093E', 'CC5C3FE6E7356A26A134CFF5633349F597C40A9D', '4AC4BB3F27F245BA9178651AA5CDEDCBB2862E2A ...
reverse-buuctf刷题记录2
今天你 RE 了嘛?
[GUET-CTF2019]number_game | 二叉树,数独先查壳 然后运行看一下
然后拖入ida64分析
跟进4006D6
但是嘞 输入啥都Wrong
搞不懂
跟进4007583
跟进400807
跟进400881
跟进400917
可以提取出来sudoku
114#2330#1#0#23##3##042##1
然后 5*5 知道原理直接手解
这儿给出手解的答案
0421421430
然后我的解题方法是动调出output
顺便看下那个Wrong为啥一直触发
发现过不了是因为 要输入10个0-4的数
az 哈哈哈 Orz
我输入的0-9
待会用之对应sudoku
就能够得到flag
1OUTPUT = 7381940526
再步过 得到sudoku填充后的数据
对应关系
123456789101112131415# --> 0421421430对应0 74 32 81 14 92 41 04 53 20 6#然后按 0-9排序即为flag#1134240024
flag{11342400 ...
reverse-[GWCTF 2019]re3-AES加密
情景再现下载先查壳 然后运行一下
没啥好看的 拖入ida64分析
然后也打不开 F5 然后space看下汇编窗口
显然有问题 需要修复 这儿用到了idc脚本执行
不懂去Google 不多赘述了
从开始的地址按D 转化为data
shift + F2 打开 内置脚本命令行
执行脚本Run
12345678910#include <idc.idc>static main(){ auto addr = 0x402219; auto i; for(i = 0; i <= 223; ++i){ PatchByte(addr+i,Byte(addr+i)^0x99); }}
然后
依次按c (机器语言变汇编) p(创建函数)
这个call成功修复了
跟入40207B (双击603170发现没有值 应该是个关键值)
跟进401CF9
跟进call 笔者没看懂 后来了解是MD5加密
这是MD5特征码
(603120是个标准base64表)
看不懂我们就 ...
reverse-[羊城杯 2020]easyre
情景再现先查壳
然后X64dbg运行一下看看 顺便看看字符串
看到了base64的特征 (难道真就base64这么easy——re嘛)
拖入ida64分析一下
一看 哦 原来有是个加密call
第一个 就是正常base64加密
(不确定的话可以动调 试一试)
第二个 仔细看看 是重新排序了一下字符串
13个为一组(刚好密文52个字符 正好4组)
第三个call 是Caesar加密
当然可以直接逆算法写 很好写的
贴exp
12345678910111213141516171819202122import base64encData = 'EmBmP5Pmn7QcPU4gLYKv5QcMmB3PWHcP5YkPq3=cT6QckkPckoRG'encData1 = ''# caesar 加密for i in encData: if 47 < ord(i) <= 57: encData1 += chr((ord(i) - 48 - 3) % 10 + 48) elif 96 < ...