2023柏鹭杯部分wp
Reverse
rev_imm
整个main函数就断点处有对输入的处理
调试可知是输入的两位转16进制即23->0x23
vmovdqu ymm0, ymmword ptr [ebp-40h]把0x31AF220F等数据给ymm0
之后ymm0异或四字节一组的输入
vpshufb ymm0, ymm0, ymmword ptr [ebp-60h] shuffle意为置换,且此时[ebp-60h]开头的内容为上面的常量,观察可以发现每个字节都小于32且无重复,大概可以猜测[ebp-60h]开头的内容作为下标取ymm0中的元素作为新的结果
密文
代码如下
1 | key = [ |
Misc
签到
qd.txt全是空格,空格数量当作ascii码
1 | def count_spaces_per_line(file_path): |
代码吞噬者
打开a反射加载decode.dex
也会打开diff更新dex然后反射调用loadKey
静态无法分析,可以点击提交按钮后在内存中导出所有dex文件
classes.dex对应decode.dex,classes02.dex对应update_1_.dex
分析classes02.dex中的真实loadKey方法
加密两个一组,后一个替换前一个
1 | dict = "9>AG3OCP1N2-4L5K6M7+BQD&EVF=0@8$" |
自毁代码指会把update_1_.dex删掉
对delete进行hook,直接阻止删除
1 | Java.perform(function () { |
这个时候去内存中pull update_2_.dex
看到最终的calculateFlag就是md5加密
通过decrypt方法解出calculateFlag第二个参数
第三个参数来自DIFF_HEX
手动还原也能算出MD5值
1 | import hashlib |
- 标题: 2023柏鹭杯部分wp
- 作者: j1ya
- 创建于 : 2023-10-15 21:58:18
- 更新于 : 2026-10-05 22:11:35
- 链接: https://j1ya-22.github.io/2023/10/15/2023柏鹭杯部分wp/
- 版权声明: 本文章采用 CC BY-NC-SA 4.0 进行许可。
评论