CISCN_2023
CISCN 2023好久没有发博客了x_x
ReverseEzbyte这题是64位无壳从start函数开始看
nput之后将input载入了两个函数sub_46F4F0k看不出什么东西看 sub_404C21
得到flag的头部和尾部,跟进 sub_404BF5,但是函数内部看不出什么东西,回来看看汇编
这里将所有输入传入r12 r13 之类的之后就没有处理了。再回到main函数
看到有没有被调用的block,推测是cpp异常。
但是没有找到try和catch。只有unwind,再看看其他函数,基本上都被unwind了。那推测可能是cpp异常处理中做了手脚
c++ 异常处理(1) - twoon - 博客园 (cnblogs.com)
应该是对unwind中的字节码修改了,然后再unwind的过程中被折叠。
用readelf -Wwf 读取eh_frame 和dwarf 字节码
得出寄存器逻辑 ,但是这样找不到对比的密文。推测为自我异或得出0或者非零来确认flag。写脚本试试
12345678910111213141516171819202122232425262728293 ...
hgame2021
ezapk用jeb打不开
原来是卡了。。。
重载一下
找到关键区域
0x7f0e0027似乎是密文储存位置
jeb好像可以直接把key和flag作为注释显示
那就找找加密方法
AES CBC模式 PKCS7Padding
先照着算法把key用sha_256算出hashkey
以及md5算出偏移量iv
交给在线解密
hgame{jUst_A_3z4pp_write_in_k07l1n}
用python解也可以
12345678910111213141516from Crypto.Cipher import AESimport base64data="EEB23sI1Wd9Gvhvk1sgWyQZhjilnYwCi5au1guzOaIg5dMAj9qPA7lnIyVoPSdRY"key="A_HIDDEN_KEY" sha_256_key="fca5fed0bc096dbb2f21c64b77a908b5c9944dfcaba05a482b2424a44a15ffe6"iv_key="99c6bd34c31b7 ...
hgame2021
pypypython字节码这
(6条消息) 【Python】python字节码_ChenVast的博客-CSDN博客
dis — Python 字节码反汇编器 — Python 3.10.6 文档
12345678910111213141516171819202122232425262728293031323334353637383940414243444546474849505152535455565758596061626364656667686970717273747576777879808182838485868788899091929394954 0 LOAD_GLOBAL 0 (input) 2 LOAD_CONST 1 ('give me your flag:\n') 4 CALL_FUNCTION 1 6 STORE_FAST 0 (raw_flag) ...
hgame2021
helloRe
不明函数
动调试试
异或的这个sub实际上是从0xff开始递减的数据
其他就没什么了
1234data=[0x97, 0x99, 0x9C, 0x91, 0x9E, 0x81, 0x91, 0x9D, 0x9B, 0x9A, 0x9A, 0xAB, 0x81, 0x97, 0xAE, 0x80, 0x83, 0x8F, 0x94, 0x89, 0x99, 0x97]key=[0xff-i for i in range(len(data))]flag=''.join(chr(data[i]^key[i])for i in range(len(data)))print(flag)
hgame2021
apacha函数大致内容
加密函数算法
实际上是xxtea
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647#include <stdio.h> #include <stdint.h> #define DELTA 0x61C88647#define MX (((z>>5^y<<2) + (y>>3^z<<4)) ^ ((sum^y) + (key[(p&3)^e] ^ z))) void btea(uint32_t* v, int n, uint32_t const key[4]){ uint32_t y, z, sum; unsigned p, rounds, e; rounds = 6 + 52 / n; sum = 0x9E3779B9 * (52 / n) - 0x4AB325AA; y = v[0]; ...
hgame2022
hardasm最后一题力
进入主函数,发现大部分是汇编
而且汇编形式不太认识
简单检索一下
似乎是avx2的指令集
Intel® Intrinsics Guide
官方指令集
(6条消息) x86_64汇编之二:x86_64的基本架构(寄存器、寻址模式、指令集概览)_ponnylv的博客-CSDN博客_x86指令集
x86架构
123456x=get_reg_value("ymm4")y=get_reg_value("ymm7")x=x.hex()y=y.hex()print(x,y)#idapython读取寄存器指令
常规方式直接做看着都麻
搞搞黑盒测试
随便拉点数据
在数据存放位置[rsp+70h+var_50]找到加密后数据
和 ’ hgame{ ‘ 一样长度的0xff
看来是获得了正确的输入就会输出0xff
然后根据字符长度相匹的cmp和jz来跳转至正确答案
本来想能不能用idapython或者之类的插件对其进行爆破
但是似乎没有这样的api
改成用python对文件进行爆破,那么就需要一个可以在py中启动子进程并控制输入, ...
hgame2022
ezvmvm类型的题目,第一次做
先简单学习一下该类型的题目结构
(6条消息) 站在巨人的肩膀上学习ctf vm_0xDQ的博客-CSDN博客
[原创]虎符第三题 -vm 虚拟机逆向-CTF对抗-看雪论坛-安全社区|安全招聘|bbs.pediy.com
先来翻译一下每一个case的含义
动调跑一下
把这些dword看作是虚拟机的寄存器
这种类似的操作就相当于
push r0[0xD1+r4++]
栈位于r0的9*4 的位置
而这里的0xD1则是存放异或数据的位置
对比数据也存放在其下面
然后
pop r5
剩下的都大差不差
输入用getchar的方式存放在r3
然后r3入栈
通过从ida提取出来的步骤数据
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657code = [ 0x12, 8, 0x12, 9, 0x10, 4, 1, 0x0F, 0x0D, 2, 0x12, 8, 0x12, 9 ...
hgame2022
Serveramd64架构
go 语言,换成7.7
通过交叉检索快速定位到关键函数
进入encrypt函数
发现参数无显示
按照usercall形式修改成关键字形式
(6条消息) IDA __usercall __userpurge __spoils 关键字说明_xkdlzy的博客-CSDN博客
照抄一遍就行
www
有点点像rsa的算法
利用动调在memequal提取对比数据
算法最后有个异或操作
相当于用得出的rsa结果进行了两次异或
不过第一次的是
data=0123456
【0】^0x66 0^1 1^2 2^3
第二次的是
0^0x66^6(最后一位)0^1^0^0x66
以此类推
奇数位的data可以直接还原
d1=end1^0x66
d3=end3^d1
偶数位是丢失的
可以爆破出来
123456789101112131415161718192021222324252627import gmpy2from Crypto.Util.number import long_to_bytesq=925821847652406633647957676942622731 ...
hgame2022
WOW32位无壳
定位到关键加密位置
第一个函数为str转bin
第二个函数为加密
对dword_924020内容进行检索
得出是des算法的sbox,不过它将数据分割成了字,也拓展了长度
似乎不是寻常的des
看回来,win和error下面有类似布局的函数
动调修内存
1234addr=0x00D3F838data=[0x29, 0x20, 0x98, 0x62, 0xFC, 0x46, 0x79, 0x56, 0xA5, 0x90, 0x4A, 0xF6, 0xA3, 0x70, 0xD9, 0x1B, 0x34, 0x02, 0x1B, 0x50, 0x65, 0x86, 0x33, 0x35, 0xBB, 0xA5, 0x9F, 0x96, 0xBB, 0x2B, 0xE3, 0x2A]for i in range(32): PatchByte(addr+i,(data[i]))
得出flag
12data=[0x68, 0x67, 0x61, 0x6D, 0x65, 0x7B, 0x57, 0x4F, 0x57, 0x4F, 0x57, 0x5F, 0x68, 0 ...
hgame2022
fishmanpyd文件,相当于dll
拖入ida64分析
在function name 内看到init函数
根据索引能找到地址存放位置。
进入查看
发现奇怪的数据组
unk_180003220和unk_1800031D0
对其数据内容检索发现为blowfish算法
而3220这个函数则是blowfish的sbox
31D0似乎是pbox
BlowFish加解密原理与代码实现 - 腾讯云开发者社区-腾讯云 (tencent.com)
这题如果没有魔改的话
知道key 和 对比数据应该就能写出来
推测key为LET_U_D
抄了个大佬的脚本
blowfish.h
123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107 ...