[FlareOn4]IgniteMe
无壳,32位
先进入ida,可以看到start函数,重要的就是4010F0()和if判断里的401050()
先进入4010F0
其中的一个函数,表示的是获取字符串长度(遇到null字符就返回i)
后面就是将字符写入byte_403078这个数组
接下来看401050(),可以看到获取长度后,执行了一个401000,然后让数组从末尾开始和v4异或并存入目标数组,然后再让这一个字符和前一个字符异或,都存入目标数组,最后进行字符串相符判断。
我们来看一下这个401000,直接看函数太看明白是什么,直接看汇编
xor ax,dx就是将这个eax的值后16位都变成0
rol eax,4将eax的值循环左移4位
shr ax,1将ax算数右移一位(在二进制中这个操作就是除以2),保留符号
所以ax中的值变成了0000 0000 0000 0100 (4)
然后在循环时可以看到和eax(数组元素)异或的ecx里的值[ebp-1],就是al的值,就是0000 0100(4),所以v4就是4
然后就可以写EXP了
text = [0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, 0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17, 0x2B, 0x44, 0x6F, 0x6E, 0x56, 0x9, 0x5F, 0x45, 0x47, 0x73, 0x26, 0xA, 0xD, 0x13, 0x17, 0x48, 0x42, 0x1, 0x40, 0x4D, 0xC, 0x2, 0x69][::-1] flag = '' v4 = 0x4 for i in range(len(text)): flag += chr(text[i] ^ v4) v4 = ord(flag[i]) print('flag{'+flag[::-1]+'}')
得到结果flag{R_y0u_H0t_3n0ugH_t0_1gn1t3@flare-on.com}
本文作者:yee-l
本文链接:https://www.cnblogs.com/yee-l/p/18304682
版权声明:本作品采用知识共享署名-非商业性使用-禁止演绎 2.5 中国大陆许可协议进行许可。
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 25岁的心里话
· 闲置电脑爆改个人服务器(超详细) #公网映射 #Vmware虚拟网络编辑器
· 基于 Docker 搭建 FRP 内网穿透开源项目(很简单哒)
· 零经验选手,Compose 一天开发一款小游戏!
· 通过 API 将Deepseek响应流式内容输出到前端