F-Hacker-CTF
F-Hacker-CTF
Reverse
先来一道签到
gcc 编译流程
.s 文件,GCC: (Ubuntu 11.4.0-1ubuntu1~22.04) 11.4.0,在liinux内用gcc -c xxx.s -o xxx.o,gcc xxx.o -o xxx.exe,再用IDA打开反编译
1 | .file "chal_custom.c" |
1 | enc = [84, 84, 68, 118, 94, 106, 114, 90, 117, 96, 71, 103, 54, 116, 88, 102, 105, 43, 112, 90, 111, 106, 112, 90, 83, |
holle_re
UPX壳改了对应十六进制标志导致工具脱壳不成功,用010打开找到并改回来就行
查壳,发现有UPX壳
upx -d 脱壳失败,之前遇到过类似的情况,用010打开
把1处改为2处再保存就行,再upx -d 就成功了
IDA打开分析
脚本:
1 | v7 = [ |
让康康你的调试
IDA打开分析
加密部分,对我们的输入只有异或操作,前面也只有一个异或0x14,也就是说,只要把密文重新输进去就可以得到flag
先提取密文,小端序33位,文件是elf要到liunx里启用远程调试服务
1 | s2[0] = 0xA67A02C9047D5B94LL; |
初始输入
使用change byte修改字节码
运行到验证结果处
flag
1 | SYC{welcome_t0_Geek's_3asy_rc4!} |
我嘞个z3
Z3约束求解器
1 | # 0 |
好像是python?
pyc反编译失败,用ai辅助直接看汇编逆向
一个没有后缀的文件,根据题目,应该改成.py或.pyc,再用pycdc或uncompyle6反编译
但都反编译失败,所以就直接看汇编再用ai写逻辑了
1 | # -*- coding=utf-8 -*- |
脚本:
1 | # 逆向推导步骤: |
也许你也听jay
1 | # -*- coding=utf-8 -*- |
玩就行了
方法一:是的,玩就行了,只要玩到对应分数就会在目录下生成一个Data.txt文件
方法二:用CE修改器找到分数修改就行
方法三:用despy打开Assembly-CSharp.dll,找到分数位置修改好后保存就行,或者改每次的得分大小
Data.txt文件里面是16进制数,用010十六进制编辑器打开,发现会被错误的识别然后再用十六进制翻译表示一遍,所以我们按ctrl+shift+v修正,
或者先将Data.txt中的内容复制一遍,再将光标放在第一位十六进制数字前按ctrl+v粘贴,相当于覆盖修改,然后另存为Data.exe文件
再用ID打开后看逻辑分析逆向即可
1 | # -*- coding=utf-8 -*- |
致我的星星
maze,双重迷宫
题目在index.js最后面,是一个迷宫题
1 | from z3 import * |
坑点,之前一直按后面的迷宫图来放起点与终点,结果就是怎么放都不对劲,题解也不对;最后详细看一遍代码才发现,起点与终点是先按这个图填入,再转化为真正的迷宫图
1 | data = [ |
Exp:
将字符串形式的迷宫变为指定行列的列表
1 | # maze_str_to_list |
用之前写好的通用求路径脚本,求解
1 | from collections import deque |
giraffe_eat_rainbow
去除llvm,动态调试,输入32位字符,提取key和密文,进入encrypt( )就可以解密了
1 | enc = [ |
扁平化没处理好还存在一些,但逻辑并不难,让ai处理一下逻辑
1 | size_t encrypt(char *input, const char *key, unsigned char *output) { |
解密:
1 | # -*- coding=utf-8 -*- |
AES!
aes加密,魔改/换了S盒
提取key与密文
1 | enc = [ |
改变的S盒,提取一下
1 | S = [ |
求逆S盒
1 | def generate_inverse_sbox(sbox): |
逆S盒
1 | S_inv = [ |
AES加密,由S盒计算逆S盒程序_逆s盒如何计算-CSDN博客
找个完整的AES加密脚本,换好S盒与逆S盒,解密得flag
1 | SYC{B3l1eue_Th@t_y0u__l3aRn_Aes} |
ez_re
花指令,AES-CBC加密,TLS+API反调试,动态调试得key,iv,密文
IDA打开后发现没有main,因为花指令的影响,去除花指令后反编译得main逻辑,【CTF花指令讲解】&&【长城杯铁三reverse-junk】_哔哩哔哩_bilibili
用keypatch处理掉IsDebugger反调试后,运行发现调试出问题了,可以运行但运行不到main函数,cmd命令窗口也没有任何显示
原因是TLS反调试悄无声息地令调试器失效
用PEview + winhex去掉TLS
【miniLCTF2022】TWIN(TLS回调函数 & PEB反调试 & Windows异常处理_哔哩哔哩_bilibili
key和密文(小端序提取)可以直接提取,iv被处理过了,用动态调试提取
1 | *(_DWORD *)pbIV = 0x941E70C1; |
动态调试提取iv, key,enc
1 | iv = '633BBDFB3A2CC6FF5C0862A2CDA2EAB4' # pdIV |
AES算法的CBC和ECB两种工作模式_aes cbc ebc区别-CSDN博客
分组密码的模式AES-CBC模式流程解析附:应用代码实现-CSDN博客
ez_hook
API反调试处理,hook,VirtualProtect
IDA打开,有反调试,先用keypatch处理掉,再分析
考点(坑点)在这,Address函数被hook了,不然逆向出来的是假的flag
改变了Address函数的页属性,0x40每次保护常量 (WinNT.h) - Win32 apps | Microsoft Learn;重写了函数,也就是hook
按被hook后的xor写脚本
1 | enc = [ |
Crypto一把唆,还看了半天,最后倒一下序就得到flag
奇怪的RC4
用pycdc解包两次(分别获取)(火绒误我),可以在在线网站解包,不同担心python版本(最好自己搭一个本地网站,上网找有开源)
1 | # -*- coding: utf8 -*- |
Rc4.py
1 | # -*- coding: utf8 -*- |
脚本:
1 | # -*- coding=utf-8 -*- |
DH爱喝茶
nop掉jnz/jz 和下面的db 0c7h,再按C转为汇编代码,再选中main按P创建函数,F5反编译即可
根据题目也知道考tea系列加密,魔改了一点,IDA逆向常用宏定义-增加_ida rol4-CSDN博客
1 |
|
CPP_flower
jnz/jz ;call/retn
找到IDA提示不能识别的位置,有花指令
call 后面的数据被识别为地址了,先按D将call转化为数据,nop掉E8,再按C将数据转化为代码,同理下面也一样,还要把jz/jnz也nop掉
call/retn花指令,直接全部nop就可以了,同理下面的也是,一共三个
将错误的函数结尾endp删除掉,edit—>function—>delete function
再从下面最近的一个retn向上选中一直到sub_419D10按P创建函数,再按F5反编译即可
脚本:
1 |
|
Crypto
凯撒加密
1 | # -*- coding=utf-8 -*- |
共模攻击
1 | # -*- coding=utf-8 -*- |
XOR
暴力破解,大概30分钟
1 | from Crypto.Util.number import long_to_bytes |
RSA
1 | # -*- coding=utf-8 -*- |
ncoCRT
1 | # -*- coding=utf-8 -*- |
Misc
Truth of Word
第一部分,全选,很容易就发现
第二部分,解压,有一个图片
第三部分,盲猜在宏里面,但奈何word和wps都默契的对运行宏收费
ez_jpg
flag.txt用notepad++打开,发现只有一行base64编码,解密后发现了逆序的jpg文件头,reverse逆序一下,#3自动提示转化为图片了,再下载保存即可
改一下高宽都为0280(640)
flag
Web
100%的圆
右键检查,可以找到一串base64编码,直接解密就是flag:SYC{5UcH_@_Wo0d3rfUl_CiRc1e}