REVERSE-PRACTICE-BUUCTF-16
- [UTCTF2020]basic-re
- equation
- [安洵杯 2019]crackMe
- [FlareOn5]Minesweeper Championship Registration
[UTCTF2020]basic-re
elf文件,无壳,用ida分析
main函数就是简单的加减乘除运算
shift+F12,在字符串窗口看到flag
equation
html文件,浏览器打开后什么都没有,查看网页源代码
是jsfuck混淆,找了好久,可以用Google Closure Compiler对js进行压缩
压缩步骤:
/******************************************************************************
把js代码去掉script头和尾
放到自己的jscompiler文件夹里
打开powershell
执行
java -jar .\compiler.jar --js .\temp.js --js_output_file temp-compiled.js
压缩前的js文件名为temp.js
压缩后为temp-compiled.js
然后再分析js代码
如果想要运行压缩后的js代码
则需要在代码前后重新加回script和/script
然后后缀改成.html 双击用浏览器打开即可
******************************************************************************/
用上述方法对题目所给文件操作的结果如下:
是对flag内容进行方程组验证
flag="xxx";
42==flag.length&&(l=flag.split("").map(function(a){return a.charCodeAt()}),861==l["40"]+l["35"]+l["34"]-l[0]-l["15"]-l["37"]+l[7]+l[6]-l["26"]+l["20"]+l["19"]+l[8]-l["17"]-l["14"]-l["38"]+l[1]-l[9]+l["22"]+l["41"]+l[3]-l["29"]-l["36"]-l["25"]+l[5]+l["32"]-l["16"]+l["12"]-l["24"]+l["30"]+l["39"]+l["10"]+l[2]+l["27"]+l["28"]+l["21"]+l["33"]-l["18"]+l[4]&&-448==l["31"]+l["26"]+l["11"]-l["33"]+l["27"]-l[3]+l["12"]+l["30"]+l[1]+l["32"]-l["16"]+l[7]+l["10"]-l["25"]+l["38"]-l["41"]-l["14"]-l["19"]+l["29"]+
l["36"]-l[9]-l["28"]-l[6]-l[0]-l["22"]-l["18"]+l["20"]-l["37"]+l[4]-l["24"]+l["34"]-l["21"]-l["39"]-l["23"]-l[8]-l["40"]+l["15"]-l["35"]&&1244==l["26"]+l["14"]+l["15"]+l[9]+l["13"]+l["30"]-l["11"]+l["18"]+l["23"]+l[7]+l[3]+l["12"]+l["25"]-l["24"]-l["39"]-l["35"]-l["20"]+l["40"]-l[8]+l["10"]-l[5]-l["33"]-l["31"]+l["32"]+l["19"]+l["21"]-l[6]+l[1]+l["16"]+l["17"]+l["29"]+l["22"]-l[4]-l["36"]+l["41"]+l["38"]+l[2]+l[0]&&-39==l[5]+l["22"]+l["15"]+l[2]-l["28"]-l["10"]-l[3]-l["13"]-l["18"]+l["30"]-l[9]+l["32"]+
l["19"]+l["34"]+l["23"]-l["17"]+l["16"]-l[7]+l["24"]-l["39"]+l[8]-l["12"]-l["40"]-l["25"]+l["37"]-l["35"]+l["11"]-l["14"]+l["20"]-l["27"]+l[4]-l["33"]-l["21"]+l["31"]-l[6]+l[1]+l["38"]-l["29"]&&485==l["41"]-l["29"]+l["23"]-l[4]+l["20"]-l["33"]+l["35"]+l[3]-l["19"]-l["21"]+l["11"]+l["26"]-l["24"]-l["17"]+l["37"]+l[1]+l["16"]-l[0]-l["13"]+l[7]+l["10"]+l["14"]+l["22"]+l["39"]-l["40"]+l["34"]-l["38"]+l["32"]+l["25"]-l[2]+l["15"]+l[6]+l["28"]-l[8]-l[5]-l["31"]-l["30"]-l["27"]&&-1068==l["13"]+l["19"]+l["21"]-
l[2]-l["33"]-l[0]+l["39"]+l["31"]-l["23"]-l["41"]+l["38"]-l["29"]+l["36"]+l["24"]-l["20"]-l[9]-l["32"]+l["37"]-l["35"]+l["40"]+l[7]-l["26"]+l["15"]-l["10"]-l[6]-l["16"]-l[4]-l[5]-l["30"]-l["14"]-l["22"]-l["25"]-l["34"]-l["17"]-l["11"]-l["27"]+l[1]-l["28"]&&939==l["32"]+l[0]+l[9]+l["14"]+l["11"]+l["18"]-l["13"]+l["24"]-l[2]-l["15"]+l["19"]-l["21"]+l[1]+l["39"]-l[8]-l[3]+l["33"]+l[6]-l[5]-l["35"]-l["28"]+l["25"]-l["41"]+l["22"]-l["17"]+l["10"]+l["40"]+l["34"]+l["27"]-l["20"]+l["23"]+l["31"]-l["16"]+
l[7]+l["12"]-l["30"]+l["29"]-l[4]&&413==l["19"]+l["11"]+l["20"]-l["16"]+l["40"]+l["25"]+l[1]-l["31"]+l["28"]-l["23"]+l["14"]-l[9]-l["27"]+l["35"]+l["39"]-l["37"]-l[8]-l["22"]+l[5]-l[6]+l[0]-l["32"]+l["24"]+l["33"]+l["29"]+l["38"]+l["15"]-l[2]+l["30"]+l[7]+l["12"]-l[3]-l["17"]+l["34"]+l["41"]-l[4]-l["13"]-l["26"]&&117==l["22"]+l[4]-l[9]+l["34"]+l["35"]+l["17"]+l[3]-l["24"]+l["38"]-l[5]-l["41"]-l["31"]-l[0]-l["25"]+l["33"]+l["15"]-l[1]-l["10"]+l["16"]-l["29"]-l["12"]+l["26"]-l["39"]-l["21"]-l["18"]-
l[6]-l["40"]-l["13"]+l[8]+l["37"]+l["19"]+l["14"]+l["32"]+l["28"]-l["11"]+l["23"]+l["36"]+l[7]&&-313==l["32"]+l["16"]+l[3]+l["11"]+l["34"]-l["31"]+l["14"]+l["25"]+l[1]-l["30"]-l["33"]-l["40"]-l[4]-l["29"]+l["18"]-l["27"]+l["13"]-l["19"]-l["12"]+l["23"]-l["39"]-l["41"]-l[8]+l["22"]-l[5]-l["38"]-l[9]-l["37"]+l["17"]-l["36"]+l["24"]-l["21"]+l[2]-l["26"]+l["20"]-l[7]+l["35"]-l[0]&&-42==l["40"]-l[1]+l[5]+l[7]+l["33"]+l["29"]+l["12"]+l["38"]-l["31"]+l[2]+l["14"]-l["35"]-l[8]-l["24"]-l["39"]-l[9]-l["28"]+
l["23"]-l["17"]-l["22"]-l["26"]+l["32"]-l["11"]+l[4]-l["36"]+l["10"]+l["20"]-l["18"]-l["16"]+l[6]-l[0]+l[3]-l["30"]+l["37"]-l["19"]+l["21"]+l["25"]-l["15"]&&289==l["21"]+l["26"]-l["17"]-l["25"]+l["27"]-l["22"]-l["39"]-l["23"]-l["15"]-l["20"]-l["32"]+l["12"]+l[3]-l[6]+l["28"]+l["31"]+l["13"]-l["16"]-l["37"]-l["30"]-l[5]+l["41"]+l["29"]+l["36"]+l[1]+l["11"]+l["24"]+l["18"]-l["40"]+l["19"]-l["35"]+l[2]-l["38"]+l["14"]-l[9]+l[4]+l[0]-l["33"]&&-117==l["29"]+l["31"]+l["32"]-l["17"]-l[7]+l["34"]+l[2]+l["14"]+
l["23"]-l[4]+l[3]+l["35"]-l["33"]-l[9]-l["20"]-l["37"]+l["24"]-l["27"]+l["36"]+l["15"]-l["18"]-l[0]+l["12"]+l["11"]-l["38"]+l[6]+l["22"]+l["39"]-l["25"]-l["10"]-l["19"]-l[1]+l["13"]-l["41"]+l["30"]-l["16"]+l["28"]-l["26"]&&-252==l[5]+l["37"]-l["39"]+l[0]-l["27"]+l["12"]+l["41"]-l["22"]+l[8]-l["16"]-l["38"]+l[9]+l["15"]-l["35"]-l["29"]+l["18"]+l[6]-l["25"]-l["28"]+l["36"]+l["34"]+l["32"]-l["14"]-l[1]+l["20"]+l["40"]-l["19"]-l[4]-l[7]+l["26"]+l["30"]-l["10"]+l["13"]-l["21"]+l[2]-l["23"]-l[3]-l["33"]&&
-183==l["29"]+l["10"]-l["41"]-l[9]+l["12"]-l["28"]+l["11"]+l["40"]-l["27"]-l[8]+l["32"]-l["25"]-l["23"]+l["39"]-l[1]-l["36"]-l["15"]+l["33"]-l["20"]+l["18"]+l["22"]-l[3]+l[6]-l["34"]-l["21"]+l["19"]+l["26"]+l["13"]-l[4]+l[7]-l["37"]+l["38"]-l[2]-l["30"]-l[0]-l["35"]+l[5]+l["17"]&&188==l[6]-l[8]-l["20"]+l["34"]-l["33"]-l["25"]-l[4]+l[3]+l["17"]-l["13"]-l["15"]-l["40"]+l[1]-l["30"]-l["14"]-l["28"]-l["35"]+l["38"]-l["22"]+l[2]+l["24"]-l["29"]+l[5]+l[9]+l["37"]+l["23"]-l["18"]+l["19"]-l["21"]+l["11"]+
l["36"]+l["41"]-l[7]-l["32"]+l["10"]+l["26"]-l[0]+l["31"]&&1036==l[3]+l[6]-l["41"]+l["10"]+l["39"]+l["37"]+l[1]+l[8]+l["21"]+l["24"]+l["29"]+l["12"]+l["27"]-l["38"]+l["11"]+l["23"]+l["28"]+l["33"]-l["31"]+l["14"]-l[5]+l["32"]-l["17"]+l["40"]-l["34"]+l["20"]-l["22"]-l["16"]+l["19"]+l[2]-l["36"]-l[7]+l["18"]+l["15"]+l["26"]-l[0]-l[4]+l["35"]&&328==l["28"]-l["33"]+l[2]+l["37"]-l["12"]-l[9]-l["39"]+l["16"]-l["32"]+l[8]-l["36"]+l["31"]+l["10"]-l[4]+l["21"]-l["25"]+l["18"]+l["24"]-l[0]+l["29"]-l["26"]+
l["35"]-l["22"]-l["41"]-l[6]+l["15"]+l["19"]+l["40"]+l[7]+l["34"]+l["17"]-l[3]-l["13"]+l[5]+l["23"]+l["11"]-l["27"]+l[1]&&-196==l["22"]-l["32"]+l["17"]-l[9]+l["20"]-l["18"]-l["34"]+l["23"]+l["36"]-l["35"]-l["38"]+l["27"]+l[4]-l[5]-l["41"]+l["29"]+l["33"]+l[0]-l["37"]+l["28"]-l["40"]-l["11"]-l["12"]+l[7]+l[1]+l[2]-l["26"]-l["16"]-l[8]+l["24"]-l["25"]+l[3]-l[6]-l["19"]-l["39"]-l["14"]-l["31"]+l["10"]&&7==l["11"]+l["13"]+l["14"]-l["15"]-l["29"]-l[2]+l[7]+l["20"]+l["30"]-l["36"]-l["33"]-l["19"]+l["31"]+
l[0]-l["39"]-l[4]-l[6]+l["38"]+l["35"]-l["28"]+l["34"]-l[9]-l["23"]-l["26"]+l["37"]-l[8]-l["27"]+l[5]-l["41"]+l[3]+l["17"]+l["40"]-l["10"]+l["25"]+l["12"]-l["24"]+l["18"]+l["32"]&&-945==l["34"]-l["37"]-l["40"]+l[4]-l["22"]-l["31"]-l[6]+l["38"]+l["13"]-l["28"]+l[8]+l["30"]-l["20"]-l[7]-l["32"]+l["26"]+l[1]-l["18"]+l[5]+l["35"]-l["24"]-l["41"]+l[9]-l[0]-l[2]-l["15"]-l["10"]+l["12"]-l["36"]+l["33"]-l["16"]-l["14"]-l["25"]-l["29"]-l["21"]+l["27"]+l[3]-l["17"]&&-480==l["12"]-l["30"]-l[8]+l["20"]-l[2]-
l["36"]-l["25"]-l[0]-l["19"]-l["28"]-l[7]-l["11"]-l["33"]+l[4]-l["23"]+l["10"]-l["41"]+l["39"]-l["32"]+l["27"]+l["18"]+l["15"]+l["34"]+l["13"]-l["40"]+l["29"]-l[6]+l["37"]-l["14"]-l["16"]+l["38"]-l["26"]+l["17"]+l["31"]-l["22"]-l["35"]+l[5]-l[1]&&-213==l["36"]-l["11"]-l["34"]+l[8]+l[0]+l["15"]+l["28"]-l["39"]-l["32"]-l[2]-l["27"]+l["22"]+l["16"]-l["30"]-l[3]+l["31"]-l["26"]+l["20"]+l["17"]-l["29"]-l["18"]+l["19"]-l["10"]+l[6]-l[5]-l["38"]-l["25"]-l["24"]+l[4]+l["23"]+l[9]+l["14"]+l["21"]-l["37"]+
l["13"]-l["41"]-l["12"]+l["35"]&&-386==l["19"]-l["36"]-l["12"]+l["33"]-l["27"]-l["37"]-l["25"]+l["38"]+l["16"]-l["18"]+l["22"]-l["39"]+l["13"]-l[7]-l["31"]-l["26"]+l["15"]-l["10"]-l[9]-l[2]-l["30"]-l["11"]+l["41"]-l[4]+l["24"]+l["34"]+l[5]+l["17"]+l["14"]+l[6]+l[8]-l["21"]-l["23"]+l["32"]-l[1]-l["29"]-l[0]+l[3]&&-349==l[0]+l[7]-l["28"]-l["38"]+l["19"]+l["31"]-l[5]+l["24"]-l[3]+l["33"]-l["12"]-l["29"]+l["32"]+l[1]-l["34"]-l[9]-l["25"]+l["26"]-l[8]+l[4]-l["10"]+l["40"]-l["15"]-l["11"]-l["27"]+l["36"]+
l["14"]+l["41"]-l["35"]-l["13"]-l["17"]-l["21"]-l["18"]+l["39"]-l[2]+l["20"]-l["23"]-l["22"]&&98==l["10"]+l["22"]+l["21"]-l[0]+l["15"]-l[6]+l["20"]-l["29"]-l["30"]-l["33"]+l["19"]+l["23"]-l["28"]+l["41"]-l["27"]-l["12"]-l["37"]-l["32"]+l["34"]-l["36"]+l[3]+l[1]-l["13"]+l["18"]+l["14"]+l[9]+l[7]-l["39"]+l[8]+l[2]-l["31"]-l[5]-l["40"]+l["38"]-l["26"]-l[4]+l["16"]-l["25"]&&-412==l["28"]+l["38"]+l["20"]+l[0]-l[5]-l["34"]-l["41"]+l["22"]-l["26"]+l["11"]+l["29"]+l["31"]-l[3]-l["16"]+l["23"]+l["17"]-l["18"]+
l[9]-l[4]-l["12"]-l["19"]-l["40"]-l["27"]+l["33"]+l[8]-l["37"]+l[2]+l["15"]-l["24"]-l["39"]+l["10"]+l["35"]-l[1]+l["30"]-l["36"]-l["25"]-l["14"]-l["32"]&&-95==l[1]-l["24"]-l["29"]+l["39"]+l["41"]+l[0]+l[9]-l["19"]+l[6]-l["37"]-l["22"]+l["32"]+l["21"]+l["28"]+l["36"]+l[4]-l["17"]+l["20"]-l["13"]-l["35"]-l[5]+l["33"]-l["27"]-l["30"]+l["40"]+l["25"]-l["18"]+l["34"]-l[3]-l["10"]-l["16"]-l["23"]-l["38"]+l[8]-l["14"]-l["11"]-l[7]+l["12"]&&-379==l[2]-l["24"]+l["31"]+l[0]+l[9]-l[6]+l[7]-l[1]-l["22"]+l[8]-
l["23"]+l["40"]+l["20"]-l["38"]-l["11"]-l["14"]+l["18"]-l["36"]+l["15"]-l[4]-l["41"]-l["12"]-l["34"]+l["32"]-l["35"]+l["17"]-l["21"]-l["10"]-l["29"]+l["39"]-l["16"]+l["27"]+l["26"]-l[3]-l[5]+l["13"]+l["25"]-l["28"]&&861==l["19"]-l["17"]+l["31"]+l["14"]+l[6]-l["12"]+l["16"]-l[8]+l["27"]-l["13"]+l["41"]+l[2]-l[7]+l["32"]+l[1]+l["25"]-l[9]+l["37"]+l["34"]-l["18"]-l["40"]-l["11"]-l["10"]+l["38"]+l["21"]+l[3]-l[0]+l["24"]+l["15"]+l["23"]-l["20"]+l["26"]+l["22"]-l[4]-l["28"]-l[5]+l["39"]+l["35"]&&1169==
l["35"]+l["36"]-l["16"]-l["26"]-l["31"]+l[0]+l["21"]-l["13"]+l["14"]+l["39"]+l[7]+l[4]+l["34"]+l["38"]+l["17"]+l["22"]+l["32"]+l[5]+l["15"]+l[8]-l["29"]+l["40"]+l["24"]+l[6]+l["30"]-l[2]+l["25"]+l["23"]+l[1]+l["12"]+l[9]-l["10"]-l[3]-l["19"]+l["20"]-l["37"]-l["33"]-l["18"]&&-1236==l["13"]+l[0]-l["25"]-l["32"]-l["21"]-l["34"]-l["14"]-l[9]-l[8]-l["15"]-l["16"]+l["38"]-l["35"]-l["30"]-l["40"]-l["12"]+l[3]-l["19"]+l[4]-l["41"]+l[2]-l["36"]+l["37"]+l["17"]-l[1]+l["26"]-l["39"]-l["10"]-l["33"]+l[5]-l["27"]-
l["23"]-l["24"]-l[7]+l["31"]-l["28"]-l["18"]+l[6]&&-114==l["20"]+l["27"]-l["29"]-l["25"]-l[3]+l["28"]-l["32"]-l["11"]+l["10"]+l["31"]+l["16"]+l["21"]-l[7]+l[4]-l["24"]-l["35"]+l["26"]+l["12"]-l["37"]+l[6]+l["23"]+l["41"]-l["39"]-l["38"]+l["40"]-l["36"]+l[8]-l[9]-l[5]-l[1]-l["13"]-l["14"]+l["19"]+l[0]-l["34"]-l["15"]+l["17"]+l["22"]&&659==l["12"]-l["28"]-l["13"]-l["23"]-l["33"]+l["18"]+l["10"]+l["11"]+l[2]-l["36"]+l["41"]-l["16"]+l["39"]+l["34"]+l["32"]+l["37"]-l["38"]+l["20"]+l[6]+l[7]+l["31"]+l[5]+
l["22"]-l[4]-l["15"]-l["24"]+l["17"]-l[3]+l[1]-l["35"]-l[9]+l["30"]+l["25"]-l[0]-l[8]-l["14"]+l["26"]+l["21"]&&-430==l["21"]-l[3]+l[7]-l["27"]+l[0]-l["32"]-l["24"]-l["37"]+l[4]-l["22"]+l["20"]-l[5]-l["30"]-l["31"]-l[1]+l["15"]+l["41"]+l["12"]+l["40"]+l["38"]-l["17"]-l["39"]+l["19"]-l["13"]+l["23"]+l["18"]-l[2]+l[6]-l["33"]-l[9]+l["28"]+l[8]-l["16"]-l["10"]-l["14"]+l["34"]+l["35"]-l["11"]&&-513==l["11"]-l["23"]-l[9]-l["19"]+l["17"]+l["38"]-l["36"]-l["22"]-l["10"]+l["27"]-l["14"]-l[4]+l[5]+l["31"]+
l[2]+l[0]-l["16"]-l[8]-l["28"]+l[3]+l["40"]+l["25"]-l["33"]+l["13"]-l["32"]-l["35"]+l["26"]-l["20"]-l["41"]-l["30"]-l["12"]-l[7]+l["37"]-l["39"]+l["15"]+l["18"]-l["29"]-l["21"]&&-502==l["32"]+l["19"]+l[4]-l["13"]-l["17"]-l["30"]+l[5]-l["33"]-l["37"]-l["15"]-l["18"]+l[7]+l["25"]-l["14"]+l["35"]+l["40"]+l["16"]+l[1]+l[2]+l["26"]-l[3]-l["39"]-l["22"]+l["23"]-l["36"]-l["27"]-l[9]+l[6]-l["41"]-l[0]-l["31"]-l["20"]+l["12"]-l[8]+l["29"]-l["11"]-l["34"]+l["21"]&&853==l["30"]-l["31"]-l["36"]+l[3]+l[9]-l["40"]-
l["33"]+l["25"]+l["39"]-l["26"]+l["23"]-l[0]-l["29"]-l["32"]-l[4]+l["37"]+l["28"]+l["21"]+l["17"]+l[2]+l["24"]+l[6]+l[5]+l[8]+l["16"]+l["27"]+l["19"]+l["12"]+l["20"]+l["41"]-l["22"]+l["15"]-l["11"]+l["34"]-l["18"]-l["38"]+l[1]-l["14"]&&-28==l["38"]-l["10"]+l["16"]+l[8]+l["21"]-l["25"]+l["36"]-l["30"]+l["31"]-l[3]+l[5]-l["15"]+l["23"]-l["28"]+l[7]+l["12"]-l["29"]+l["22"]-l[0]-l["37"]-l["14"]-l["11"]+l["32"]+l["33"]-l[9]+l["39"]+l["41"]-l["19"]-l[1]+l["18"]-l[4]-l[6]+l["13"]+l["20"]-l[2]-l["35"]-l["26"]+
l["27"]&&-529==l["11"]+l["18"]-l["26"]+l["15"]-l["14"]-l["33"]+l[7]-l["23"]-l["25"]+l[0]-l[6]-l["21"]-l["16"]+l["17"]-l["19"]-l["28"]-l["38"]-l["37"]+l[9]+l["20"]-l[8]-l[3]+l["22"]-l["35"]-l["10"]-l["31"]-l[2]+l["41"]-l[1]-l[4]+l["24"]-l["34"]+l["39"]+l["40"]+l["32"]-l[5]+l["36"]-l["27"]&&-12==l["38"]+l[8]+l["36"]+l["35"]-l["23"]-l["34"]+l["13"]-l[4]-l["27"]-l["24"]+l["26"]+l["31"]-l["30"]-l[5]-l["40"]+l["28"]-l["11"]-l[2]-l["39"]+l["15"]+l["10"]-l["17"]+l[3]+l["19"]+l["22"]+l["33"]+l[0]+l["37"]+
l["16"]-l[9]-l["32"]+l["25"]-l["21"]-l["12"]+l[6]-l["41"]+l["20"]-l["18"]&&81==l[6]-l["30"]-l["20"]-l["27"]-l["14"]-l["39"]+l["41"]-l["33"]-l[0]+l["25"]-l["32"]-l[3]+l["26"]-l["12"]+l[8]-l["35"]-l["24"]+l["15"]+l[9]-l[4]+l["13"]+l["36"]+l["34"]+l[1]-l["28"]-l["21"]+l["18"]+l["23"]+l["29"]-l["10"]-l["38"]+l["22"]+l["37"]+l[5]+l["19"]+l[7]+l["16"]-l["31"]?alert("Congrats"):alert("Failed"));
利用python的z3库解方程组
from z3 import *
flag=[Int('flag[%d]' %i ) for i in range(42)]
s=Solver()
s.add(861==flag[40]+flag[35]+flag[34]-flag[0]-flag[15]-flag[37]+flag[7]+flag[6]-flag[26]+flag[20]+flag[19]+flag[8]-flag[17]-flag[14]-flag[38]+flag[1]-flag[9]+flag[22]+flag[41]+flag[3]-flag[29]-flag[36]-flag[25]+flag[5]+flag[32]-flag[16]+flag[12]-flag[24]+flag[30]+flag[39]+flag[10]+flag[2]+flag[27]+flag[28]+flag[21]+flag[33]-flag[18]+flag[4])
s.add(-448==flag[31]+flag[26]+flag[11]-flag[33]+flag[27]-flag[3]+flag[12]+flag[30]+flag[1]+flag[32]-flag[16]+flag[7]+flag[10]-flag[25]+flag[38]-flag[41]-flag[14]-flag[19]+flag[29]+flag[36]-flag[9]-flag[28]-flag[6]-flag[0]-flag[22]-flag[18]+flag[20]-flag[37]+flag[4]-flag[24]+flag[34]-flag[21]-flag[39]-flag[23]-flag[8]-flag[40]+flag[15]-flag[35])
s.add(1244==flag[26]+flag[14]+flag[15]+flag[9]+flag[13]+flag[30]-flag[11]+flag[18]+flag[23]+flag[7]+flag[3]+flag[12]+flag[25]-flag[24]-flag[39]-flag[35]-flag[20]+flag[40]-flag[8]+flag[10]-flag[5]-flag[33]-flag[31]+flag[32]+flag[19]+flag[21]-flag[6]+flag[1]+flag[16]+flag[17]+flag[29]+flag[22]-flag[4]-flag[36]+flag[41]+flag[38]+flag[2]+flag[0])
s.add(-39==flag[5]+flag[22]+flag[15]+flag[2]-flag[28]-flag[10]-flag[3]-flag[13]-flag[18]+flag[30]-flag[9]+flag[32]+flag[19]+flag[34]+flag[23]-flag[17]+flag[16]-flag[7]+flag[24]-flag[39]+flag[8]-flag[12]-flag[40]-flag[25]+flag[37]-flag[35]+flag[11]-flag[14]+flag[20]-flag[27]+flag[4]-flag[33]-flag[21]+flag[31]-flag[6]+flag[1]+flag[38]-flag[29])
s.add(485==flag[41]-flag[29]+flag[23]-flag[4]+flag[20]-flag[33]+flag[35]+flag[3]-flag[19]-flag[21]+flag[11]+flag[26]-flag[24]-flag[17]+flag[37]+flag[1]+flag[16]-flag[0]-flag[13]+flag[7]+flag[10]+flag[14]+flag[22]+flag[39]-flag[40]+flag[34]-flag[38]+flag[32]+flag[25]-flag[2]+flag[15]+flag[6]+flag[28]-flag[8]-flag[5]-flag[31]-flag[30]-flag[27])
s.add(-1068==flag[13]+flag[19]+flag[21]-flag[2]-flag[33]-flag[0]+flag[39]+flag[31]-flag[23]-flag[41]+flag[38]-flag[29]+flag[36]+flag[24]-flag[20]-flag[9]-flag[32]+flag[37]-flag[35]+flag[40]+flag[7]-flag[26]+flag[15]-flag[10]-flag[6]-flag[16]-flag[4]-flag[5]-flag[30]-flag[14]-flag[22]-flag[25]-flag[34]-flag[17]-flag[11]-flag[27]+flag[1]-flag[28])
s.add(939==flag[32]+flag[0]+flag[9]+flag[14]+flag[11]+flag[18]-flag[13]+flag[24]-flag[2]-flag[15]+flag[19]-flag[21]+flag[1]+flag[39]-flag[8]-flag[3]+flag[33]+flag[6]-flag[5]-flag[35]-flag[28]+flag[25]-flag[41]+flag[22]-flag[17]+flag[10]+flag[40]+flag[34]+flag[27]-flag[20]+flag[23]+flag[31]-flag[16]+flag[7]+flag[12]-flag[30]+flag[29]-flag[4])
s.add(413==flag[19]+flag[11]+flag[20]-flag[16]+flag[40]+flag[25]+flag[1]-flag[31]+flag[28]-flag[23]+flag[14]-flag[9]-flag[27]+flag[35]+flag[39]-flag[37]-flag[8]-flag[22]+flag[5]-flag[6]+flag[0]-flag[32]+flag[24]+flag[33]+flag[29]+flag[38]+flag[15]-flag[2]+flag[30]+flag[7]+flag[12]-flag[3]-flag[17]+flag[34]+flag[41]-flag[4]-flag[13]-flag[26])
s.add(117==flag[22]+flag[4]-flag[9]+flag[34]+flag[35]+flag[17]+flag[3]-flag[24]+flag[38]-flag[5]-flag[41]-flag[31]-flag[0]-flag[25]+flag[33]+flag[15]-flag[1]-flag[10]+flag[16]-flag[29]-flag[12]+flag[26]-flag[39]-flag[21]-flag[18]-flag[6]-flag[40]-flag[13]+flag[8]+flag[37]+flag[19]+flag[14]+flag[32]+flag[28]-flag[11]+flag[23]+flag[36]+flag[7])
s.add(-313==flag[32]+flag[16]+flag[3]+flag[11]+flag[34]-flag[31]+flag[14]+flag[25]+flag[1]-flag[30]-flag[33]-flag[40]-flag[4]-flag[29]+flag[18]-flag[27]+flag[13]-flag[19]-flag[12]+flag[23]-flag[39]-flag[41]-flag[8]+flag[22]-flag[5]-flag[38]-flag[9]-flag[37]+flag[17]-flag[36]+flag[24]-flag[21]+flag[2]-flag[26]+flag[20]-flag[7]+flag[35]-flag[0])
s.add(-42==flag[40]-flag[1]+flag[5]+flag[7]+flag[33]+flag[29]+flag[12]+flag[38]-flag[31]+flag[2]+flag[14]-flag[35]-flag[8]-flag[24]-flag[39]-flag[9]-flag[28]+flag[23]-flag[17]-flag[22]-flag[26]+flag[32]-flag[11]+flag[4]-flag[36]+flag[10]+flag[20]-flag[18]-flag[16]+flag[6]-flag[0]+flag[3]-flag[30]+flag[37]-flag[19]+flag[21]+flag[25]-flag[15])
s.add(289==flag[21]+flag[26]-flag[17]-flag[25]+flag[27]-flag[22]-flag[39]-flag[23]-flag[15]-flag[20]-flag[32]+flag[12]+flag[3]-flag[6]+flag[28]+flag[31]+flag[13]-flag[16]-flag[37]-flag[30]-flag[5]+flag[41]+flag[29]+flag[36]+flag[1]+flag[11]+flag[24]+flag[18]-flag[40]+flag[19]-flag[35]+flag[2]-flag[38]+flag[14]-flag[9]+flag[4]+flag[0]-flag[33])
s.add(-117==flag[29]+flag[31]+flag[32]-flag[17]-flag[7]+flag[34]+flag[2]+flag[14]+flag[23]-flag[4]+flag[3]+flag[35]-flag[33]-flag[9]-flag[20]-flag[37]+flag[24]-flag[27]+flag[36]+flag[15]-flag[18]-flag[0]+flag[12]+flag[11]-flag[38]+flag[6]+flag[22]+flag[39]-flag[25]-flag[10]-flag[19]-flag[1]+flag[13]-flag[41]+flag[30]-flag[16]+flag[28]-flag[26])
s.add(-252==flag[5]+flag[37]-flag[39]+flag[0]-flag[27]+flag[12]+flag[41]-flag[22]+flag[8]-flag[16]-flag[38]+flag[9]+flag[15]-flag[35]-flag[29]+flag[18]+flag[6]-flag[25]-flag[28]+flag[36]+flag[34]+flag[32]-flag[14]-flag[1]+flag[20]+flag[40]-flag[19]-flag[4]-flag[7]+flag[26]+flag[30]-flag[10]+flag[13]-flag[21]+flag[2]-flag[23]-flag[3]-flag[33])
s.add(-183==flag[29]+flag[10]-flag[41]-flag[9]+flag[12]-flag[28]+flag[11]+flag[40]-flag[27]-flag[8]+flag[32]-flag[25]-flag[23]+flag[39]-flag[1]-flag[36]-flag[15]+flag[33]-flag[20]+flag[18]+flag[22]-flag[3]+flag[6]-flag[34]-flag[21]+flag[19]+flag[26]+flag[13]-flag[4]+flag[7]-flag[37]+flag[38]-flag[2]-flag[30]-flag[0]-flag[35]+flag[5]+flag[17])
s.add(188==flag[6]-flag[8]-flag[20]+flag[34]-flag[33]-flag[25]-flag[4]+flag[3]+flag[17]-flag[13]-flag[15]-flag[40]+flag[1]-flag[30]-flag[14]-flag[28]-flag[35]+flag[38]-flag[22]+flag[2]+flag[24]-flag[29]+flag[5]+flag[9]+flag[37]+flag[23]-flag[18]+flag[19]-flag[21]+flag[11]+flag[36]+flag[41]-flag[7]-flag[32]+flag[10]+flag[26]-flag[0]+flag[31])
s.add(1036==flag[3]+flag[6]-flag[41]+flag[10]+flag[39]+flag[37]+flag[1]+flag[8]+flag[21]+flag[24]+flag[29]+flag[12]+flag[27]-flag[38]+flag[11]+flag[23]+flag[28]+flag[33]-flag[31]+flag[14]-flag[5]+flag[32]-flag[17]+flag[40]-flag[34]+flag[20]-flag[22]-flag[16]+flag[19]+flag[2]-flag[36]-flag[7]+flag[18]+flag[15]+flag[26]-flag[0]-flag[4]+flag[35])
s.add(328==flag[28]-flag[33]+flag[2]+flag[37]-flag[12]-flag[9]-flag[39]+flag[16]-flag[32]+flag[8]-flag[36]+flag[31]+flag[10]-flag[4]+flag[21]-flag[25]+flag[18]+flag[24]-flag[0]+flag[29]-flag[26]+flag[35]-flag[22]-flag[41]-flag[6]+flag[15]+flag[19]+flag[40]+flag[7]+flag[34]+flag[17]-flag[3]-flag[13]+flag[5]+flag[23]+flag[11]-flag[27]+flag[1])
s.add(-196==flag[22]-flag[32]+flag[17]-flag[9]+flag[20]-flag[18]-flag[34]+flag[23]+flag[36]-flag[35]-flag[38]+flag[27]+flag[4]-flag[5]-flag[41]+flag[29]+flag[33]+flag[0]-flag[37]+flag[28]-flag[40]-flag[11]-flag[12]+flag[7]+flag[1]+flag[2]-flag[26]-flag[16]-flag[8]+flag[24]-flag[25]+flag[3]-flag[6]-flag[19]-flag[39]-flag[14]-flag[31]+flag[10])
s.add(7==flag[11]+flag[13]+flag[14]-flag[15]-flag[29]-flag[2]+flag[7]+flag[20]+flag[30]-flag[36]-flag[33]-flag[19]+flag[31]+flag[0]-flag[39]-flag[4]-flag[6]+flag[38]+flag[35]-flag[28]+flag[34]-flag[9]-flag[23]-flag[26]+flag[37]-flag[8]-flag[27]+flag[5]-flag[41]+flag[3]+flag[17]+flag[40]-flag[10]+flag[25]+flag[12]-flag[24]+flag[18]+flag[32])
s.add(-945==flag[34]-flag[37]-flag[40]+flag[4]-flag[22]-flag[31]-flag[6]+flag[38]+flag[13]-flag[28]+flag[8]+flag[30]-flag[20]-flag[7]-flag[32]+flag[26]+flag[1]-flag[18]+flag[5]+flag[35]-flag[24]-flag[41]+flag[9]-flag[0]-flag[2]-flag[15]-flag[10]+flag[12]-flag[36]+flag[33]-flag[16]-flag[14]-flag[25]-flag[29]-flag[21]+flag[27]+flag[3]-flag[17])
s.add(-480==flag[12]-flag[30]-flag[8]+flag[20]-flag[2]-flag[36]-flag[25]-flag[0]-flag[19]-flag[28]-flag[7]-flag[11]-flag[33]+flag[4]-flag[23]+flag[10]-flag[41]+flag[39]-flag[32]+flag[27]+flag[18]+flag[15]+flag[34]+flag[13]-flag[40]+flag[29]-flag[6]+flag[37]-flag[14]-flag[16]+flag[38]-flag[26]+flag[17]+flag[31]-flag[22]-flag[35]+flag[5]-flag[1])
s.add(-213==flag[36]-flag[11]-flag[34]+flag[8]+flag[0]+flag[15]+flag[28]-flag[39]-flag[32]-flag[2]-flag[27]+flag[22]+flag[16]-flag[30]-flag[3]+flag[31]-flag[26]+flag[20]+flag[17]-flag[29]-flag[18]+flag[19]-flag[10]+flag[6]-flag[5]-flag[38]-flag[25]-flag[24]+flag[4]+flag[23]+flag[9]+flag[14]+flag[21]-flag[37]+flag[13]-flag[41]-flag[12]+flag[35])
s.add(-386==flag[19]-flag[36]-flag[12]+flag[33]-flag[27]-flag[37]-flag[25]+flag[38]+flag[16]-flag[18]+flag[22]-flag[39]+flag[13]-flag[7]-flag[31]-flag[26]+flag[15]-flag[10]-flag[9]-flag[2]-flag[30]-flag[11]+flag[41]-flag[4]+flag[24]+flag[34]+flag[5]+flag[17]+flag[14]+flag[6]+flag[8]-flag[21]-flag[23]+flag[32]-flag[1]-flag[29]-flag[0]+flag[3])
s.add(-349==flag[0]+flag[7]-flag[28]-flag[38]+flag[19]+flag[31]-flag[5]+flag[24]-flag[3]+flag[33]-flag[12]-flag[29]+flag[32]+flag[1]-flag[34]-flag[9]-flag[25]+flag[26]-flag[8]+flag[4]-flag[10]+flag[40]-flag[15]-flag[11]-flag[27]+flag[36]+flag[14]+flag[41]-flag[35]-flag[13]-flag[17]-flag[21]-flag[18]+flag[39]-flag[2]+flag[20]-flag[23]-flag[22])
s.add(98==flag[10]+flag[22]+flag[21]-flag[0]+flag[15]-flag[6]+flag[20]-flag[29]-flag[30]-flag[33]+flag[19]+flag[23]-flag[28]+flag[41]-flag[27]-flag[12]-flag[37]-flag[32]+flag[34]-flag[36]+flag[3]+flag[1]-flag[13]+flag[18]+flag[14]+flag[9]+flag[7]-flag[39]+flag[8]+flag[2]-flag[31]-flag[5]-flag[40]+flag[38]-flag[26]-flag[4]+flag[16]-flag[25])
s.add(-412==flag[28]+flag[38]+flag[20]+flag[0]-flag[5]-flag[34]-flag[41]+flag[22]-flag[26]+flag[11]+flag[29]+flag[31]-flag[3]-flag[16]+flag[23]+flag[17]-flag[18]+flag[9]-flag[4]-flag[12]-flag[19]-flag[40]-flag[27]+flag[33]+flag[8]-flag[37]+flag[2]+flag[15]-flag[24]-flag[39]+flag[10]+flag[35]-flag[1]+flag[30]-flag[36]-flag[25]-flag[14]-flag[32])
s.add(-95==flag[1]-flag[24]-flag[29]+flag[39]+flag[41]+flag[0]+flag[9]-flag[19]+flag[6]-flag[37]-flag[22]+flag[32]+flag[21]+flag[28]+flag[36]+flag[4]-flag[17]+flag[20]-flag[13]-flag[35]-flag[5]+flag[33]-flag[27]-flag[30]+flag[40]+flag[25]-flag[18]+flag[34]-flag[3]-flag[10]-flag[16]-flag[23]-flag[38]+flag[8]-flag[14]-flag[11]-flag[7]+flag[12])
s.add(-379==flag[2]-flag[24]+flag[31]+flag[0]+flag[9]-flag[6]+flag[7]-flag[1]-flag[22]+flag[8]-flag[23]+flag[40]+flag[20]-flag[38]-flag[11]-flag[14]+flag[18]-flag[36]+flag[15]-flag[4]-flag[41]-flag[12]-flag[34]+flag[32]-flag[35]+flag[17]-flag[21]-flag[10]-flag[29]+flag[39]-flag[16]+flag[27]+flag[26]-flag[3]-flag[5]+flag[13]+flag[25]-flag[28])
s.add(861==flag[19]-flag[17]+flag[31]+flag[14]+flag[6]-flag[12]+flag[16]-flag[8]+flag[27]-flag[13]+flag[41]+flag[2]-flag[7]+flag[32]+flag[1]+flag[25]-flag[9]+flag[37]+flag[34]-flag[18]-flag[40]-flag[11]-flag[10]+flag[38]+flag[21]+flag[3]-flag[0]+flag[24]+flag[15]+flag[23]-flag[20]+flag[26]+flag[22]-flag[4]-flag[28]-flag[5]+flag[39]+flag[35])
s.add(1169==flag[35]+flag[36]-flag[16]-flag[26]-flag[31]+flag[0]+flag[21]-flag[13]+flag[14]+flag[39]+flag[7]+flag[4]+flag[34]+flag[38]+flag[17]+flag[22]+flag[32]+flag[5]+flag[15]+flag[8]-flag[29]+flag[40]+flag[24]+flag[6]+flag[30]-flag[2]+flag[25]+flag[23]+flag[1]+flag[12]+flag[9]-flag[10]-flag[3]-flag[19]+flag[20]-flag[37]-flag[33]-flag[18])
s.add(-1236==flag[13]+flag[0]-flag[25]-flag[32]-flag[21]-flag[34]-flag[14]-flag[9]-flag[8]-flag[15]-flag[16]+flag[38]-flag[35]-flag[30]-flag[40]-flag[12]+flag[3]-flag[19]+flag[4]-flag[41]+flag[2]-flag[36]+flag[37]+flag[17]-flag[1]+flag[26]-flag[39]-flag[10]-flag[33]+flag[5]-flag[27]-flag[23]-flag[24]-flag[7]+flag[31]-flag[28]-flag[18]+flag[6])
s.add(-114==flag[20]+flag[27]-flag[29]-flag[25]-flag[3]+flag[28]-flag[32]-flag[11]+flag[10]+flag[31]+flag[16]+flag[21]-flag[7]+flag[4]-flag[24]-flag[35]+flag[26]+flag[12]-flag[37]+flag[6]+flag[23]+flag[41]-flag[39]-flag[38]+flag[40]-flag[36]+flag[8]-flag[9]-flag[5]-flag[1]-flag[13]-flag[14]+flag[19]+flag[0]-flag[34]-flag[15]+flag[17]+flag[22])
s.add(659==flag[12]-flag[28]-flag[13]-flag[23]-flag[33]+flag[18]+flag[10]+flag[11]+flag[2]-flag[36]+flag[41]-flag[16]+flag[39]+flag[34]+flag[32]+flag[37]-flag[38]+flag[20]+flag[6]+flag[7]+flag[31]+flag[5]+flag[22]-flag[4]-flag[15]-flag[24]+flag[17]-flag[3]+flag[1]-flag[35]-flag[9]+flag[30]+flag[25]-flag[0]-flag[8]-flag[14]+flag[26]+flag[21])
s.add(-430==flag[21]-flag[3]+flag[7]-flag[27]+flag[0]-flag[32]-flag[24]-flag[37]+flag[4]-flag[22]+flag[20]-flag[5]-flag[30]-flag[31]-flag[1]+flag[15]+flag[41]+flag[12]+flag[40]+flag[38]-flag[17]-flag[39]+flag[19]-flag[13]+flag[23]+flag[18]-flag[2]+flag[6]-flag[33]-flag[9]+flag[28]+flag[8]-flag[16]-flag[10]-flag[14]+flag[34]+flag[35]-flag[11])
s.add(-513==flag[11]-flag[23]-flag[9]-flag[19]+flag[17]+flag[38]-flag[36]-flag[22]-flag[10]+flag[27]-flag[14]-flag[4]+flag[5]+flag[31]+flag[2]+flag[0]-flag[16]-flag[8]-flag[28]+flag[3]+flag[40]+flag[25]-flag[33]+flag[13]-flag[32]-flag[35]+flag[26]-flag[20]-flag[41]-flag[30]-flag[12]-flag[7]+flag[37]-flag[39]+flag[15]+flag[18]-flag[29]-flag[21])
s.add(-502==flag[32]+flag[19]+flag[4]-flag[13]-flag[17]-flag[30]+flag[5]-flag[33]-flag[37]-flag[15]-flag[18]+flag[7]+flag[25]-flag[14]+flag[35]+flag[40]+flag[16]+flag[1]+flag[2]+flag[26]-flag[3]-flag[39]-flag[22]+flag[23]-flag[36]-flag[27]-flag[9]+flag[6]-flag[41]-flag[0]-flag[31]-flag[20]+flag[12]-flag[8]+flag[29]-flag[11]-flag[34]+flag[21])
s.add(853==flag[30]-flag[31]-flag[36]+flag[3]+flag[9]-flag[40]-flag[33]+flag[25]+flag[39]-flag[26]+flag[23]-flag[0]-flag[29]-flag[32]-flag[4]+flag[37]+flag[28]+flag[21]+flag[17]+flag[2]+flag[24]+flag[6]+flag[5]+flag[8]+flag[16]+flag[27]+flag[19]+flag[12]+flag[20]+flag[41]-flag[22]+flag[15]-flag[11]+flag[34]-flag[18]-flag[38]+flag[1]-flag[14])
s.add(-28==flag[38]-flag[10]+flag[16]+flag[8]+flag[21]-flag[25]+flag[36]-flag[30]+flag[31]-flag[3]+flag[5]-flag[15]+flag[23]-flag[28]+flag[7]+flag[12]-flag[29]+flag[22]-flag[0]-flag[37]-flag[14]-flag[11]+flag[32]+flag[33]-flag[9]+flag[39]+flag[41]-flag[19]-flag[1]+flag[18]-flag[4]-flag[6]+flag[13]+flag[20]-flag[2]-flag[35]-flag[26]+flag[27])
s.add(-529==flag[11]+flag[18]-flag[26]+flag[15]-flag[14]-flag[33]+flag[7]-flag[23]-flag[25]+flag[0]-flag[6]-flag[21]-flag[16]+flag[17]-flag[19]-flag[28]-flag[38]-flag[37]+flag[9]+flag[20]-flag[8]-flag[3]+flag[22]-flag[35]-flag[10]-flag[31]-flag[2]+flag[41]-flag[1]-flag[4]+flag[24]-flag[34]+flag[39]+flag[40]+flag[32]-flag[5]+flag[36]-flag[27])
s.add(-12==flag[38]+flag[8]+flag[36]+flag[35]-flag[23]-flag[34]+flag[13]-flag[4]-flag[27]-flag[24]+flag[26]+flag[31]-flag[30]-flag[5]-flag[40]+flag[28]-flag[11]-flag[2]-flag[39]+flag[15]+flag[10]-flag[17]+flag[3]+flag[19]+flag[22]+flag[33]+flag[0]+flag[37]+flag[16]-flag[9]-flag[32]+flag[25]-flag[21]-flag[12]+flag[6]-flag[41]+flag[20]-flag[18])
s.add(81==flag[6]-flag[30]-flag[20]-flag[27]-flag[14]-flag[39]+flag[41]-flag[33]-flag[0]+flag[25]-flag[32]-flag[3]+flag[26]-flag[12]+flag[8]-flag[35]-flag[24]+flag[15]+flag[9]-flag[4]+flag[13]+flag[36]+flag[34]+flag[1]-flag[28]-flag[21]+flag[18]+flag[23]+flag[29]-flag[10]-flag[38]+flag[22]+flag[37]+flag[5]+flag[19]+flag[7]+flag[16]-flag[31])
if s.check()==sat:print(s.model())
'''
flag[8] = 48
flag[3] = 103
flag[1] = 108
flag[15] = 71
flag[16] = 95
flag[11] = 95
flag[18] = 113
flag[9] = 110
flag[6] = 95
flag[30] = 52
flag[14] = 78
flag[0] = 102
flag[25] = 95
flag[28] = 95
flag[19] = 85
flag[40] = 51
flag[23] = 48
flag[21] = 84
flag[41] = 125
flag[7] = 108
flag[17] = 101
flag[4] = 123
flag[33] = 95
flag[35] = 49
flag[36] = 84
flag[38] = 95
flag[13] = 48
flag[32] = 121
flag[31] = 83
flag[34] = 87
flag[27] = 115
flag[10] = 103
flag[2] = 97
flag[37] = 104
flag[5] = 65
flag[20] = 52
flag[29] = 69
flag[12] = 49
flag[24] = 110
flag[26] = 49
flag[22] = 105
flag[39] = 122
'''
方程组的解转为字符串即为flag
[安洵杯 2019]crackMe
exe程序,运行后提示输入flag,输入后回车,弹窗“hooked”,输入错误打印wrong,无壳,ida分析
main函数,读取输入,和sub_411136函数
sub_411136->sub_4132E0,比较Str1和Str2
交叉引用Str2来到sub_412C30函数,对Str2进行变换,对byte_41A180进行变表base64,存储到Str1,再调用sub_411136函数比较Str1和Str2
先分析sub_41126C函数的变表base64,补充的“=”换成“!”,且在从base64表中取值时,下标加了24,相当于原base64表整体左移24位
再交叉引用BASE64_table_41A080,来到sub_412AB0函数,还是对base64表的变换,实际上是大小写转换,于是这时的base64表变成了yzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/abcdefghijklmnopqrstuvwx
看到了exe程序运行时弹出的“hooked”
Handler->Handler_0
发现了SM4的系统参数fk,0xA3B1BAC6,于是确定加密算法位SM4,密钥为v2到v17的字符串,“where_are_u_now?”
(SM4加密算法在逆向中的一点特征:系统参数fk固定 0xA3B1BAC6, 0x56AA3350, 0x677D9197, 0xB27022DC)
TopLevelExceptionFilter->sub_412C30,回到了上面分析过的函数
于是,该程序的主要逻辑为
对输入进行SM4加密,密钥为“where_are_u_now?”
对SM4的密文进行变表base64
base64编码后的字符串与已知字符串比较,已知字符串也有变换
写逆脚本即可得到flag
#coding:utf-8
import base64
from pysm4 import decrypt,encrypt
from Crypto.Util.number import bytes_to_long,long_to_bytes
s="1UTAOIkpyOSWGv/mOYFY4R!!" #原已知字符串
arr=[]
for c in s:arr.append(ord(c))
for i in range(0,len(arr),2): #已知字符串分组交换arr[i],arr[i+1]=arr[i+1],arr[i]
str_in_base_changed=""
for i in range(len(arr)):str_in_base_changed+=chr(arr[i]) #已知字符串分组交换的结果,也是密文经变表base64的结果
base="ABCDEFGHIJKLMNOPQRSTUVWXYZabcdefghijklmnopqrstuvwxyz0123456789+/" #常规base64表
base_changed="yzABCDEFGHIJKLMNOPQRSTUVWXYZ0123456789+/abcdefghijklmnopqrstuvwx" #base64变表
str_in_base="" #常规base64的结果
for i in range(0,len(str_in_base_changed)-2): #将变表base64字符串映射到常规base64字符串,最后两个先不映射str_in_base+=base[base_changed.find(str_in_base_changed[i])]
str_in_base+="==" #补充最后两个“=”
key=bytes_to_long("where_are_u_now?") #密钥,字符串转成整形
cipher=bytes_to_long(base64.b64decode(str_in_base))#解常规base64字符串,作为密文,字符串转为整形
print(long_to_bytes(decrypt(cipher,key)))#输出明文
#SM4foRExcepioN?!
[FlareOn5]Minesweeper Championship Registration
.jar文件,jadx-gui打开,来到main方法即可看到flag