2024ciscn 逆向ezCsky和dump详解

ezCsky

Exeinfo看了不是exe

IDA分析不了,使用鸡爪Ghidra进行分析。这边顺带讲一下Ghidra的基础操作方法

下载Ghidra:https://gitcode.com/gh_mirrors/gh/ghidra_installer

下载java11(对版本有要求)

打开.bat文件

第一次用需要先输入jar文件所在的地址,比如我的就是

C:\Program Files\Java\jdk-11

具体根据自己的情况做出调整

新建文件夹

添加文件

双击

看左边函数这一栏

重点关注这几个函数

找到密文

既然是rc4那肯定还有key

后面还有一步异或

stb r0, 0x2470(0)为异或操作,按位与后一位异或

所以exp的思路就是,先对密文进行rc4解密,再从后往前按位异或

完整的exp

key = 'testkey' enc = [0x96, 0x8F, 0xB8, 0x08, 0x5D, 0xA7, 0x68, 0x44, 0xF2, 0x64, 0x92, 0x64, 0x42, 0x7A, 0x78, 0xE6, 0xEA, 0xC2, 0x78, 0xB8, 0x63, 0x9E, 0x5B, 0x3D, 0xD9, 0x28, 0x3F, 0xC8, 0x73, 0x06, 0xEE, 0x6B, 0x8D, 0x0C, 0x4B, 0xA3, 0x23, 0xAE, 0xCA, 0x40, 0xED, 0xD1] # RC4 解密过程 s_box = list(range(256)) j = 0 for i in range(256): j = (j + s_box[i] + ord(key[i % len(key)])) % 256 s_box[i], s_box[j] = s_box[j], s_box[i] res = [] i = j = 0 for s in enc: i = (i + 1) % 256 j = (j + s_box[i]) % 256 s_box[i], s_box[j] = s_box[j], s_box[i] t = (s_box[i] + s_box[j]) % 256 k = s_box[t] res.append(s ^ k) # 格式化输出为十六进制 hex_res = ['0x{:02x}'.format(byte) for byte in res] # 打印十六进制结果 print('[' + ', '.join(hex_res) + ']') for i in range(40, -1, -1): res[i] = res[i] ^ res[i+1] if i + 1 < len(res) else res[i] result = ''.join(chr(byte) for byte in res) print(result)

flag{d0f5b330-9a74-11ef-9afd-acde48001122}

Dump

用winhex打开flag文件

用ida打开re.exe

酷似ollvm混淆

用D810去控制流平坦化时失败。

看到题目提示,字符编码算法,同时flag长度为22?!先运行re.exe看看

显然每个字符数字和字母在运行后输出的结果是固定的hex值,所以可以直接把所有的可能跑出来

然后对照flag的hex值,得到flag

数字比赛时给出了是4

flag{MTczMDc4MzQ2Ng==}


__EOF__

本文作者XFocus
本文链接https://www.cnblogs.com/XFocus/p/18611035.html
关于博主:评论和私信会在第一时间回复。或者直接私信我。
版权声明:本博客所有文章除特别声明外,均采用 BY-NC-SA 许可协议。转载请注明出处!
声援博主:如果您觉得文章对您有帮助,可以点击文章右下角推荐一下。您的鼓励是博主的最大动力!
posted @   XFocus666  阅读(111)  评论(0编辑  收藏  举报
相关博文:
阅读排行:
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通
点击右上角即可分享
微信分享提示