假设我们有一个验证程序,只要模型识别到图片为数字4,则通过,不然就直接拒绝。
问题: 如果我们可以修改这个模型文件,应该怎么修改才能让任何图片都可以通过验证程序?
首先要明确一点,程序的逻辑是只有4才能通过,而且只能修改模型。那么我们能够控制的变量就只有模型的识别结果。如果我们把所有的识别结果都改为4,这样所有图片都可以通过验证。
那修改模型的识别结果,模型输出层的参数会是第一个考虑的点。如下图: 如果我们把bias设置为很大的值,就直接把预测结果修改得很大。
以model.h5为例, model.h5的输出层是dense_2,我们使用HDFView通过可读可写打开
然后在model_weights/dense_2/dense_2中找到bias:0
修改分类4对应的值,这里把它改为100,我们再来测试是否满足我们的预期。
[[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