TP-LINK 配置备份文件 config.bin 解密

本文介绍了一种使用Python中的DES算法对两个配置文件进行解密的方法。通过使用ECB模式和特定密钥,实现了对文件model.conf和config.bin的内容解密,并验证了其完整性。
from Crypto.Cipher import DES
from hashlib import md5

key = '\x47\x8D\xA5\x0B\xF9\xE3\xD2\xCF'
crypto = DES.new( key, DES.MODE_ECB )

data = open('model.conf', 'rb').read()
data_decrypted = crypto.decrypt( data[16:] ).rstrip('\0')
assert data[:16] == md5(data_decrypted).digest()
open('model.conf.txt', 'wb').write(data_decrypted)

data = open('config.bin', 'rb').read()
data_decrypted = crypto.decrypt( data ).rstrip('\0')
assert data_decrypted[:16] == md5(data_decrypted[16:]).digest()
open('config.bin.txt', 'wb').write(data_decrypted[16:])

请解释一下我提供的lua代码:debug.print("备份extern分区") --backup file = AES_ENC(MD5(product_name)+AES_ENC(COMPRESS(user_config_xml_file))) local product_info_md5 = md5_product_info() local product_info_md5_file = io.open("/tmp/product_info_md5_file", "w") local agile_support = uci_r:get_profile("agile_config", "support") or "no" for num in string.gmatch(product_info_md5, "%x%x") do local number = "0x"..num product_info_md5_file:write(string.char(number)) end product_info_md5_file:close() -- 备份extern分区, 如有特殊情况的分区,再特殊处理 local extern_partitions = uci_r:get_profile("backup_restore", "extern_partition") or nil if extern_partitions ~= nil then extern_partitions = util.split(extern_partitions, " ") os.execute("mkdir /tmp/backup >/dev/null 2>&1") for i, v in ipairs(extern_partitions) do if v ~= nil then debug("-----------------------backup :" .. v) local externname = "/tmp/backup/ori-backup-" .. v .. ".bin" luci.sys.exec("nvrammanager -r " .. externname .. " -p " .. v .. " >/dev/null 2>&1") local filesize = fs.stat(externname).size if (v == 'router-config' or v == 'ap-config' or v == 'repeater-config' or v == 'multissid-config' or v == 'client-config') and filesize > 0 then hide_info(externname, username) end end end luci.sys.exec("nvrammanager -r /tmp/backup/ori-backup-user-config.bin -p user-config >/dev/null 2>&1") -- don't need to hide account info as it will be ignored in store procedue... if agile_support == "no" then hide_info("/tmp/backup/ori-backup-user-config.bin", username) else hide_common_info("/tmp/backup/ori-backup-user-config.bin") end hide_rsa2048_info("/tmp/backup/ori-backup-user-config.bin") --打包 os.execute("tar -cf /tmp/ori-backup-userconf.bin -C /tmp/backup . >/dev/null 2>&1") luci.sys.exec("rm -rf /tmp/backup >/dev/null 2>&1") else luci.sys.exec("nvrammanager -r /tmp/ori-backup-userconf.bin -p user-config >/dev/null 2>&1") cry.dec_file_entry("/tmp/ori-backup-userconf.bin", "/tmp/tmp-backup-userconf.xml") luci.sys.exec("mkdir -p /tmp/backupcfg") configtool.xmlToFile("/tmp/tmp-backup-userconf.xml", "/tmp/backupcfg") -- hide cloud info config local hide_files = {"accountmgnt", "cloud_config"} if username == "superadmin" then hide_files = {"cloud_config"} end for _, f in ipairs(hide_files) do luci.sys.exec("rm -f /tmp/backupcfg/config/" .. f) end -- recreate xml config files luci.sys.exec("rm -f /tmp/ori-backup-userconf.bin;rm -f /tmp/tmp-backup-userconf.xml") configtool.convertFileToXml("/tmp/backupcfg/config", "/tmp/tmp-backup-userconf.xml") cry.enc_file_entry("/tmp/tmp-backup-userconf.xml", "/tmp/ori-backup-userconf.bin") luci.sys.exec("rm -rf /tmp/backupcfg;rm -f /tmp/tmp-backup-userconf.xml") end luci.sys.exec("cat /tmp/product_info_md5_file /tmp/ori-backup-userconf.bin > /tmp/mid-backup-userconf.bin") cry.enc_file_entry("/tmp/mid-backup-userconf.bin", "/tmp/save-backup-userconf.bin") local feedback = {http_form} if feedback[1] == true then local reader = require("io").popen("cat /tmp/save-backup-userconf.bin") luci.sys.exec("rm -f /tmp/save-backup-userconf.bin; rm -f /tmp/product_info_md5_file; rm -f /tmp/mid-backup-userconf.bin; rm -f /tmp/ori-backup-userconf.bin") uci_r:set("accountmgnt", "login", "logining", logining) uci_r:commit("accountmgnt") return reader else local reader = sys.ltn12_popen("cat /tmp/save-backup-userconf.bin") if agile_support == "no" then luci.http.header('Content-Disposition', 'attachment; filename="backup-%s-%s.bin"' % {configtool.getsysinfo("product_name"), os.date("%Y-%m-%d")}) else --support agile_config local agileconfig_filename = agile_config_filename(true) local productname = util.execl("getfirm HOSTNAME_NO_BLANK") if productname then debug.printf("[ag]agileconfig_filename: " .. productname[1] .. agileconfig_filename) else debug.printf("[ag]getfirm HOSTNAME_NO_BLANK failed!") uci_r:set("accountmgnt", "login", "logining", logining) uci_r:commit("accountmgnt") return false end local TPLink = uci_r:get_profile("tplink","TPLINK_TPLink") or "yes" if TPLink == "no" then luci.http.header('Content-Disposition', 'attachment; filename="%s%sn_agc3031.bin"' % { productname[1], agileconfig_filename}) else luci.http.header('Content-Disposition', 'attachment; filename="%s%sn.bin"' % { productname[1], agileconfig_filename}) end end luci.http.prepare_content("application/octet-stream") luci.ltn12.pump.all(reader, luci.http.write) luci.sys.exec("rm -f /tmp/save-backup-userconf.bin; rm -f /tmp/product_info_md5_file; rm -f /tmp/mid-backup-userconf.bin; rm -f /tmp/ori-backup-userconf.bin") end
最新发布
09-25
支持以下路由器 * Linksys WRT54GL (With original firmware or Tomato firmware), WRT54G (only some of them), WRT160N, WRT320N, and possibly similar models. * Linksys E5200 * Linksys E2000 * Linksys RV082 * Linksys E2500 * Linksys N1500 * Linksys E900 * Cisco-Linksys E4200 * Cisco Linksys E1000 v2.1 * Edimax BR6204WG, and possibly similar models. * Siemens ADSL SL2-141, and possibly similar models. * Siemens CL-110 PSTN ADSL2+ * Dynalink RTA1025W, and possibly similar models. * NETGEAR WGT624, WGR614v9, WNR1000v3, WNR3500L, and possibly other models. * NETGEAR DEVG2020 * ASUS WL-520g, WL-600g, and possibly similar models. * ASUS RT-N10+ , and possibly similar models. * Asus RT-N56U , and possibly similar models. * Asus RT-AC66U * Asus RT-AC68U * Asus RT-AC68W * Asus RT-N66U * D-Link DIR-655, DIR-300, and possibly similar models. * Sanex SA 5100, and possibly similar models. * Sitecom WL-351, WL-575, WL-312, and possibly similar models. * COMTREND 536+ (Only Internet Login) * US Robotics 9108 ADSL (internet login and admin login) * D-Link DSL-2540U/BRU/D ADSL2+, DSL-2650U, DSL-520B * D-Link DVA-G3170i/PT * D-Link DSL-604T * D-Link G3670B * D-Link DSL-2640T * D-Link DSL-G684T * D-Link DSL-2500U * D-Link 2740B * D-Link DIR-615 G2 * D-Link WBR-1310 * D-Link DSL-2543B * D-Link DI-524 * D-Link DI-624+A * D-Link DIR-600 * D-Link DIR-300 * D-Link DSL-2780 * D-Link DIR-605L * TL-WDR4300 N750 * TP-Link TD-8810 ADSL Modem/Router. * Dynamode R-ADSL-C4-W-G1 * NetComm NB5Plus4 DSL * Thomson TG580 DSL (only in Hex Dump mode) * Asus RT-G31 * HuaWei EchoLife HG520 * Huawei Echolife HG510a/HG520s/HG520b/HG520c * HuaWei HG526 * HuaWei-3Com Aolynk BR104 * TP-LINK TL-WR841N * TP-LINK TL-WR841DN * TP-LINK TL-MR342 * TP-LINK TL-WR340G * TP-LINK TL-R460 * TP-LINK TL-WR741ND v2.0 * TP-LINK TL-WR700N * TP-LINK TL-WR740N * TP-LINK TL-WA801N * TP-LINK TL-WR541G * TP-LINK TL-WR1043ND * TP-LINK TD-W8960N * TP-Link TL-WR941ND * TP-Link TL-MR3220 * TP-Link TL-WR642G * TP-Link TL-WDR3320 * TP-Link TL-WDR3600 * TP-LINK TL-WR720N * TP-Link TD-W8970 * TP-LINK TD-W8901N * TP-LINK TD-8816 * TP-LINK TD-W8901G * TP-LINK TD-W8951ND * TP-Link TD-8840 * TP-LINK TD-8817 * TP-LINK Archer C2 * TP-LINK Archer D5 * TP-LINK Archer D9 * TP-LINK Archer C9 * Belkin N+ (F5D8236uk4) * Mercury MW54R * Netgear DG632 * Netgear Wireless Cable Voice Gateway CG3000/CG3100 * Netgear WNDR4000 (Rev 1) * Netcomm NB6W * Aztech DSL605EW * Comtrend CT-5072T ADSL2+ modem/router * Small Business RV042 * Intelbras WRN240 * ipTIME N604V * Linksys WRV200 * Sagem F@ST2404 * ZTE ZXV10 * ZTE ZXHN H108N * SmartAX MT880a/MT880d/MT882a * Zyxel AMG1302 * Zyxel P-2612HWU-F1 * Alcatel Lucent I-240W-A * LevelOne WBR-3406TX v2
评论 8
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值