初学者的静态分析挑战writeup
aureal
题⽬来源:新标准大学英语综合教程4
所有挑战都是在不使⽤调试器的情况下完成的,你的⽬标应该是能够在不运⾏exe的情况下完成每个挑战。
隐藏和搜索
exe包含⼀个或多个未加密的flag,需要找到正确flag。
>>>>
string1难度等级为1星
<包含存储在可执⾏⽂件中的未加密flag。运⾏时,程序将输出flag的MD5哈希值,但不输出原始值。你能得到flag吗?本地解压后如下:
拖进IDA⾥,查看下:
很明显,IDA很智能地识别了⼀些关键的⽅法,如md5_hash,猜测这就是⽣成flag的主⽅法。
call上⾯为push eax,⼊栈操作,很智能地显⽰了eax的类型,这⾥可以断定eax为md5_hash函数的参数。
mov eax, off_432294
eax的值来⾃⼀个地址,跟进此地址中,在IDA中双击此地址,来到了数据区域,发现此地址为FLAG字符串的起始地址。
那 FLAG{CAN-I-MAKE-IT-ANYMORE-OBVIOUS} 到底是不是flag呢?
在⽹页中进⾏检查:
是真的flag。
>>>>
化学培训string2难度等级为1星
<包含存储在可执⾏⽂件中的未加密flag。运⾏时,程序将输出flag的MD5哈希值,但不输出原始值。你能得到flag吗?本地解压后如下:
拖进IDA⾥,查看下,此时与string1完全不⼀样了。
前⾯是⼀些IDA为局部变量与参数设置的标识,先不看,来到计算hash的地⽅。
从最上⾯翻到eax赋值这⾥,发现mov操作为规律赋值,猜测可能是⼀个字符串或者字符数组。
右键转换为字符,查看下var_28赋值了什么,发现是⼤写字母F。
tdscdma是什么意思
国际高中
发现了是,猜测这就是flag。
转换完成后,将这段字符串进⾏检测即可 ,这⾥不再记录过程。
高一英语课本
aam>>>>
string3难度等级为2星
talk dirty
<包含存储在可执⾏⽂件中的未加密flag。运⾏时,程序将输出flag的MD5哈希值,但不输出原始值。你能得到flag吗?本地解压后如下:
拖进IDA⾥,查看下,发现与string1与string2完全不⼀样。
cui
lonely nana
还是原先的步骤,先找到hash⽣成函数。
这⾥发现⽣成hash的函数使⽤了类的结构,因为call ??0MD5@@QAE@XZ ; MD5::MD5(void) 执⾏了类对象的构造⽅法。
重点来到 call ?digestString@MD5@@QAEPADPAD@Z ; MD5::digestString(char *)。