在01.模型到底是什么?中,我们解决了获取一个模型信息的任务。第二篇,我们进一步,利用获得的信息来搞事情。
假设我们有一个验证程序,只要模型识别到图片为数字4,则通过,不然就直接拒绝。
问题: 如果我们可以修改这个模型文件,应该怎么修改才能让任何图片都可以通过验证程序?
首先要明确一点,程序的逻辑是只有4才能通过,而且只能修改模型。那么我们能够控制的变量就只有模型的识别结果。如果我们把所有的识别结果都改为4,这样所有图片都可以通过验证。
那修改模型的识别结果,模型输出层的参数会是第一个考虑的点。如下图: 如果我们把bias设置为很大的值,就直接把预测结果修改得很大。
以model.h5为例, model.h5的输出层是dense_2,我们使用HDFView通过可读可写打开
然后在model_weights/dense_2/dense_2中找到bias:0
修改分类4对应的值,这里把它改为100,我们再来测试是否满足我们的预期。
我们准备了一张为2的手写图片,
在修改前后进行了测试,可以看到结果:
修改前,被拒绝
[[1.8426473e-13 4.5459983e-16 1.0000000e+00 1.1816156e-13 3.9987751e-19 2.1004661e-18 7.1072603e-15 2.6362517e-12 7.3257994e-10 1.8768874e-17]]Access Denied
修改后,验证通过
[[1.6611006e-38 0.0000000e+00 9.0147505e-26 0.0000000e+00 1.0000000e+00 0.0000000e+00 0.0000000e+00 2.3765060e-37 6.6040380e-35 0.0000000e+00]]Access Granted
具体加载模型代码和模型,在本专栏Github 项目中。
地址:
https://github.com/AIPwn/HackingNeuralNetworks