BUUCTF-[GWCTF 2019]re3
re3查壳,64位无壳
然后进去发现主函数也比力简单,主要是一个长度校验,然后有一个mprotect函数,阐明应该又是Smc,然后我们用脚本还原sub_402219函数处的代码https://i-blog.csdnimg.cn/img_convert/a13f396e20217c7268841657d6c0a584.png
import idc
addr=0x00402219
size=224
for i in range(addr, addr+size):
idc.patch_byte(i, get_wide_byte(i)^0x99)
print("ok")
先看看sub_40207B函数,内里反复调用了sub_401CF9函数。https://i-blog.csdnimg.cn/img_convert/108c322487233738511d34b1d400a9f3.png
跟进看看sub_401CF9函数干了什么,一开始瞥见v5到v8这个样子还以为是rc4的加密,看了后面的内容发现肯定不是rc4了,看了一下wp,说是md5加密的特性数https://i-blog.csdnimg.cn/img_convert/b685d51459c5605dcc8e6ba48802d100.png
那似乎这个地方的大抵逻辑就是对这些unk数据举行md5加密,唯一不同就是对base64表举行了两次md5加密https://i-blog.csdnimg.cn/img_convert/1e30c11b669d126e3a03140fd8dcad9e.png
然后被加密的表当作这里的a2被传入了,这里感觉也不是标准的base64解码的函数,特别是byte_4023A0是长度为256的数组,那么可以看出肯定不是base64了https://i-blog.csdnimg.cn/img_convert/96bbe76d057a857cd84fdf35d763f5a9.png
用插件可以辨认出aes的特性码,https://i-blog.csdnimg.cn/img_convert/a163bc7a08cef996018be21a2e295b7e.png
然后回头看sub_402219函数,这个函数是,先对v4举行了一次处理,然后应该是将v4在sub_40196E这个函数举行了两次加密,分别传给了a1和a1+16,最后和byte这个密文举行对比https://i-blog.csdnimg.cn/img_convert/dd5daad37c87c57b2ce6b9675b5b2c3c.png
进入sub_40196E,发现下面存在AES特性,那就尝试提取密文和密钥https://i-blog.csdnimg.cn/img_convert/93a1668b0b4f0d8dd1d5610bcce986cb.png
密钥就是给aes加密天生sbox盒的东西,也就是两次对表md5加密后的内容,这里尝试动调解出unk_603170https://i-blog.csdnimg.cn/img_convert/4edb847eb378e3b7ac9ac06351dc4f2d.png
https://i-blog.csdnimg.cn/img_convert/730b9bfcf31517e9d5835f9bdcf201f9.png
免责声明:如果侵犯了您的权益,请联系站长,我们会及时删除侵权内容,谢谢合作!更多信息从访问主页:qidao123.com:ToB企服之家,中国第一个企服评测及商务社交产业平台。
页:
[1]