-
-
[原创] 第十三题 NeuralCrackme WriteUp
-
发表于: 2018-7-10 16:09 2702
-
这道题看题目名似乎是一道和神经网络有关的题目,实际上……确实有关系,不过关系似乎不是很大= =
程序中所有的字符串常量都是动态解密的,调一下就能知道。
程序首先读入Flag,然后检验Flag长度是否为10,并且是否为0-9 A-F之间的字符。然后,程序将Flag转为对应的bytes(5个字节),拆成两段,第一段2字节,第二段3字节。然后将这些字节之后补0补齐8个字节,转成IEEE754 double浮点数。
接下来是一个看上去有点懵的函数,传入了这两个浮点数,进行了一堆奇怪的操作 = =
首先程序里硬编码了一些浮点数,用C语言搞一下得到真实值,标一下。然后现场学了一下神经网络,参考这篇文章
https://www.cnblogs.com/heaad/archive/2011/03/07/1976443.html
大概明白了这个程序实现了一个神经元,神经元中有一个二维权重向量{w, v},可以提取出来,将输入的两个浮点数x和y先进行一个预处理,然后生成净激活{x × wi + y × vi}向量,接着经过一个激活函数f得到向量z,最后将一个硬编码的输入向量和z相乘得到一个数。经过调试,发现f函数符合Sigmoid型函数。
得到数字之后做sprintf,判断是否为小于10的浮点数,并取整数位和小数前两位这三个数字,平方相加后开根号,判断是否大于15.5,以及之前的y的第3字节的低4bit是否为0.最后一个检验是检查x + y - f的绝对值是否小于0.003.
x y的取值非常有限,写一个程序爆破:
得到X和Y的bytes
[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课
赞赏
他的文章
看原图
赞赏
雪币:
留言: