这次献上我po叔的大作
come on baby~
直接静态分析,主流程伪代码如下:
通过加密函数的分组、及具体算法里的swap,mul,add我操作,看出是idea算法。
直接dump伪随机数生成的固定key(hex):18fe9c970a7296f5c2fdeeae147592aa
。
通过简单异或得到目标加密串。
直接用工具解密得到flag(去除尾部补位): flag{f53fc1db-b7d3-4643-9b48-725f13129d07}
还是直接静态分析,有壳,不过壳比较简单,简单跟下,对照静态分析,发现OEP跳转位置。
去除动态基地直接在40640E
下断,f8,dump,利用偏移2000
处API地址修复IAT,脱壳完成。
主要伪代码如下:
更多代码就不上了。算法比较简单,除了CRC32 hash,也没有通用加密算法。
先是格式检查,前5字节为:
42bytes输入字串index 为 13 18 23 28 处的字符是_
。
然后生成三张表,其中一张是通过伪随机数生成。对输入hex并进行简单置换。得到84bytes的字串,最后异或比较79bytes,其余5bytes通过crc32校验,5bytes中其中有1字节是由{
的低4位生成,值已确定,众所周知,通过最后4bytes能更改到任何crc32值,所以crc32只能确定唯一的4byte。
虽然以前做gslab把crc32其及4byte逆推都做了查表实现,为了简化代码,crc32部分只能跑一下了。代码如下:
最终flag为:flag{12345678-1234-1234-1234-1234567890ab}
同样有壳,简单静态看下就能看到OEP的跳转:
0040817C .- E9 F398FFFF jmp Explain.00401A74
还是同样的下断,dump,修复IAT。
此题是简单的VM题。做题过程中,作了简单的记录,记录不全,将就看吧。
VM代码有部分解析没记录,大概流程能看出来
就是先初始化目标校验字串,然后输入35字节,并将其与自身index异或,最后与目标字串比较校验。然后打印结果。
做了icm,ccm,再做到这题也没什么了。大概流程相同。输入为42bytes。然后进行分组加密,最后进行异或并与常量串校验。
至于加密算法,很容易就能看出,国密4,因为算法没有进行过任何更改,所以SBOX,FK等都没有变,直接能对应上加密算法。
异或得到加密串:
密钥为伪随机数生成的固定钥,
dump:DA98F1DA312AB753A5703A0BFD290DD6
。
直接工具解密得到:flag{e4435341-401a-4bc4-96c1-eadf1951d904}
此题是借助堆的格式化漏洞利用题。 在角色建立时,只有2角色是先分配存储name
的堆,后分配存储格式化串的堆。而角色1在写格式化串时有个选择,如果不为1或2则不写格式化串。
利用思路就是先创建角色2,name处写上格式化串,删除,再创建角色1,并不写格式化串。这时角色1的格式化串就是角色2时写的name。因为free再分配堆时还有转large bin的过程。所以name的前16字节会被覆盖,格式化串要偏移16字节。
剩下的就是格式化的利用了。不多说,主要是改atoi
调用为system
调用。因为此函数一直调用,所以需要中转下,最后一步再让其跳转到system。直接看exp代码。
好了 我滚去睡觉了 狗命重要 笔芯