i春秋2020新春战疫赛-re-奇怪的安装包
新手一枚,如有错误(不足)请指正,谢谢!!
<mark>个人博客:点击进入</mark>
题目下载:
链接: https://pan.baidu.com/s/1N9NFUPITE9xcFCg7tnOPWw 提取码: 2020
压缩包,想到NSIS制作压缩包(其实没想到
然后使用7-zip打开Install.exe文件,查看[NSIS].nsi文件
找到判断的代码
Dialogs::InputBox 1 请输入key "Input your key" 确定 取消 4 6
; Call Initialize_____Plugins
; SetOverwrite off
; File $PLUGINSDIR\Dialogs.dll
; SetDetailsPrint lastused
; Push 6
; Push 4
; Push 取消
; Push 确定
; Push "Input your key"
; Push 请输入key
; Push 1
; CallInstDLL $PLUGINSDIR\Dialogs.dll InputBox
DetailPrint "Checking...: $6"
IntCmp $4 1 0 label_415 label_415
StrCmp $6 NSIISSOEASY 0 label_415
MessageBox MB_OK key正确
Dialogs::InputBox 1 请输入flag "Input your flag" 确定 取消 4 6
; Call Initialize_____Plugins
; AllowSkipFiles off
; File $PLUGINSDIR\Dialogs.dll
; SetDetailsPrint lastused
; Push 6
; Push 4
; Push 取消
; Push 确定
; Push "Input your flag"
; Push 请输入flag
; Push 1
; CallInstDLL $PLUGINSDIR\Dialogs.dll InputBox
IntCmp $4 1 0 label_415 label_415
Push $6
Call func_429
Pop $6
StrCpy $3 gm`fzd787`7bb,g72d,592b,8`g1,cg96813e8d``|
StrCmp $3 $6 0 label_417
MessageBox MB_OK flag正确,可以愉快的玩游戏了
Goto label_419
label_415:
MessageBox MB_OK 错误的key
MessageBox MB_OK 想办法找到正确的key把
label_417:
MessageBox MB_OK flag错误
MessageBox MB_OK 想办法找到正确的flag把
label_419:
SectionEnd
Section ; Section_1
WriteUninstaller $INSTDIR\uninst.exe ; $INSTDIR\$INSTDIR\uninst.exe ; !!! ERROR: SKIP possible BadCmd
WriteRegStr HKLM "Software\Microsoft\Windows\CurrentVersion\App Paths\VirtuaNES.exe" "" $INSTDIR\VirtuaNES.exe
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\VirtuaNES DisplayName $(LSTR_2) ; "VirtuaNES 1.0"
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\VirtuaNES UninstallString $INSTDIR\uninst.exe
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\VirtuaNES DisplayIcon $INSTDIR\VirtuaNES.exe
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\VirtuaNES DisplayVersion 1.0
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\VirtuaNES URLInfoAbout http://www.baidu.com
WriteRegStr HKLM Software\Microsoft\Windows\CurrentVersion\Uninstall\VirtuaNES Publisher Ginkgo.
SectionEnd
Function func_429 # 将字符串的每个字符与1异或并返回
Pop $9 # 输入字符串出栈
StrCpy $3 "" # 给$3拷贝空字符串
StrCpy $0 $9 # 将输入字符串给$0
StrCpy $1 0 # 将0赋值给$1
label_433:
StrCpy $2 $0 1 $1
StrCmp $2 "" label_443 # 如果取到空字符,就退出循环
Push $2
Call func_445 # 将取出的一个字符,丢入func_445 call进行处理
Pop $2
IntOp $2 $2 ^ 1 # 将字符与1异或后赋值给$2
IntFmt $2 %c $2 # 将$2解释成字符赋值给$2
IntOp $1 $1 + 1 # $1自加1,遍历下个字符,直到遍历所有
StrCpy $3 $3$2 # 将$2拼接到$3后面
Goto label_433
label_443:
Push $3
FunctionEnd
Function func_445 # 返回与字符对应的ASCII码
Exch $0 # 将传入的字符给$0
Exch 交换两个值,如果调用 Exch 没有指定任何参数,将交换堆栈顶部的两个数据。
如果指定了一个用户变量作为 Exch的参数,变量的值将和堆栈顶部的数据交换。
如果调用 Exch 并指定了一个栈的索引(从 0 开始,0 代表堆栈顶部的栈),将交换堆栈顶部和指定的栈的数据。
; Push $0
; Exch
; Pop $0
Push $1 # 保存$1的值
Push $2 # 保存$2的值
StrCpy $2 1 # 给$2赋值1 (进行计数器的初始化)
label_451:
IntFmt $1 %c $2 # 将$2解释成字符给$1
StrCmpS $1 $0 0 label_455 # 比较$1和$0 如果相等则退出循环 不相等进行下一次循环
StrCpy $0 $2 # 将$2这个数值给$0
Goto label_458
label_455:
IntOp $2 $2 + 1 # $2自加1
StrCmp $2 255 0 label_451 # $2如果不等于255就返回label_451(循环255次 $2为计数器)
StrCpy $0 0 # $0赋值0
label_458:
Pop $2 # 恢复$2的值
Pop $1 # 恢复$1的值
Exch $0 # $0的值为字符对应的ASCII码
; Push $0
; Exch
; Pop $0
FunctionEnd
大体流程是将输入的字符串转换为ASCII码然后与1异或,最后与
gm`fzd787`7bb,g72d,592b,8`g1,cg96813e8d``|
进行比较
所以只要我们将密文与1异或然后就是输入的flag
写脚本得到flag
flag = ""
strings = "gm`fzd787`7bb,g72d,592b,8`g1,cg96813e8d``|"
for i in strings:
flag += chr(ord(i)^1)
print(flag)
flag为flag{e696a6cc-f63e-483c-9af0-bf87902d9eaa}