BUUCTF--[GWCTF 2019]re3学习记录
Posted lens7
tags:
篇首语:本文由小常识网(cha138.com)小编为大家整理,主要介绍了BUUCTF--[GWCTF 2019]re3学习记录相关的知识,希望对你有一定的参考价值。
又是一道很操(没做出来)的题目,学习其他师傅的思路。
第一步:
常规操作,无壳64位,放入IDApro中。
搜索找到main函数,出现红色提示
查看main函数,读取,mproct函数,一种保护函数,不是很重要。
SMC自修改代码
在真正执行某一段代码时,程序会对自身的该段代码进行自修改,只有在修改后的代码才是可执行的。在程序未对该段代码进行修改之前,在静态分析状态下,均是不可读的字节码,IDA之类的反汇编器无法识别程序的正常逻辑。
第一次看,一脸懵逼,到这里就卡住了,把函数+i??? wtf???点进去查看
大概意思是将sub_402219函数的汇编代码修改了,最后再次执行,我们静态分析看不出来。而且这里无法动态调试。
查看汇编代码
发现这里出现了一大堆数据,应该就是我们需要处理的数据。
选中402219数据段 D键转换为数据段。
这时我们就需要使用IDC脚本进行数据修改(一种类c语言)shift+F2
#include <idc.idc>
static main()
{
auto addr = 0x402219; //声明局部变量 addr是起始地址
auto i = 0;
for(i=0;i<224;i++)
{
PatchByte(addr+i,Byte(addr+i)^0x99); //设置虚拟地址addr处的一个字节值
}
}
然后将修改后的数据选中,右键分析,选择force强制执行,然后把代码按P键形成函数。
我们分析一下函数,点进去都是好长一段,试试findcrypt插件,可能是某种加密,发现是AES
byte_6030A0就是最后加密后的内容
BC0AADC0147C5ECCE0B140BC9C51D52B46B2B9434DE5324BAD7FB4B39CDB4B5B
现在我们需要来求密钥unk_603170.linux远程动态调试(输入一个长为32位的字符串)
CB8D493521B47A4CC1AE7E62229266CE
最后学习别的师傅的脚本
from Crypto.Cipher import AES
from Crypto.Util.number import *
key = long_to_bytes(0xcb8d493521b47a4cc1ae7e62229266ce) #密钥
mi = long_to_bytes(0xbc0aadc0147c5ecce0b140bc9c51d52b46b2b9434de5324bad7fb4b39cdb4b5b) #密文
lun = AES.new(key, mode=AES.MODE_ECB)
flag = lun.decrypt(mi)
print(flag)
得到最后的flag为
flag{924a9ab2163d390410d0a1f670}
以上是关于BUUCTF--[GWCTF 2019]re3学习记录的主要内容,如果未能解决你的问题,请参考以下文章