日常记录(1)

下午在吾爱破解里面乱逛的时候看到了一个看起来蛮有意思的cm。看了下评论发现是21年l3h的题,于是玩了玩,顺便记录一下。

原题:L3HCTF2021 Load

32位 windows文件。

拖进ida长这样,输入满足32位且用flag{}包裹
在这里插入图片描述

蛮明显了,下面的CreateFileMappingW和MapViewOfFile,搞了一个name的映射
在这里插入图片描述

直接猜测是创了子文件。

然后直接看下面的函数,往下一翻,好家伙,这不是傀儡进程吗
在这里插入图片描述
没看出来的可以看看这个文章
https://bbs.pediy.com/thread-269588.htm
直接一套组合拳打脸上了属于是。
由于这里输入后直接作为共享内存存到这个l3hsec里了,所以我们只需要看傀儡进程的逻辑就行。这下看来前面的都不用分析了。
在这里插入图片描述
直接在第一个WriteProcessMemory下了个断点,看lpBuffer处的内存
在这里插入图片描述

很好。

接下来找文件的大小。可以直接在WriteProcessMemory处下断看nSize,加起来就是傀儡文件的大小。这个题里面也可以通过查这串数据的交叉引用找到。我懒得一个个数,直接看交叉引用的函数来得到了。
在这里插入图片描述
在这里插入图片描述
在这里插入图片描述

简单分析可知这里是先通过smc将该大数组全部异或之后得到的傀儡进程的二进制文件。然后上面的448是轮数,一轮6个字节,总共4个函数,4*448*6=0x2a00。网上随便找个idapython脚本dump即可

得到的dump文件拖入ida,查看主函数。发现引用了我们的输入
在这里插入图片描述

限定了输入为0~9,a~f的字符,然后转化为数字存在内存里

我的输入是flag{12345678123456781234567812}
在这里插入图片描述

然后下方就是将前9字节存入src数组里,将后4字节存入v29里,然后在7e1370那个函数进行矩阵运算。由于我是转专业选手,还没学线代,所以看了半天不晓得是啥(悲
下面就是一堆比较,全部满足输出正确
在这里插入图片描述
以下是脚本

duibi1 = [-8, 18, -9, 6, -13, 6, -1, 2, -1]
duibi2 = [13, -3, -30, 7]
print('flag{',end="")
for i in duibi1:
    print(hex(i & 0xff)[2:].ljust(2,'0'),end="")
for i in duibi2:
    print(hex(i & 0xff)[2:].ljust(2,'0'),end="")
print('}')
  • 1
    点赞
  • 0
    收藏
    觉得还不错? 一键收藏
  • 0
    评论

“相关推荐”对你有帮助么?

  • 非常没帮助
  • 没帮助
  • 一般
  • 有帮助
  • 非常有帮助
提交
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值