NCTF2019出题
2019-11-28
Easy Ternary
exe里就有源码。。。 google搜一下知道是AHK写的(其实如果有优秀的PE信息查看工具也能查出来) 搜AHK反编译, 搜到反编译工具Exe2Ahk。。。//运行需要安装AHK环境 源码如下
XOR(a, b)
{
tempA := a
tempB := b
ret := 0
Loop, 8
{
ret += Mod((((tempA >> ((A_Index - 1)*4)) & 15) + ((tempB >> ((A_Index - 1)*4)) & 15)),3) * (16**(A_Index-1))
}
return ret
}
InputBox, userInput, TTTTCL, Input your flag:
if(ErrorLevel)
Exit
if(!StrLen(userInput))
{
MsgBox, GG
Exit
}
inputArr := []
Loop, parse, userInput
{
temp:=A_Index
inputArr.Push(Ord(A_LoopField))
}
inputNum := []
Loop % inputArr.Length()
{
temp := inputArr[A_Index]
temp := DllCall("aiQG.dll\?ToTrit@@YAII@Z", "UInt", temp)
inputNum.push(temp)
}
key1 := XOR(inputNum[5], inputNum[inputNum.Length()])
inputFlag := []
Loop % inputArr.Length()
{
temp := XOR(inputNum[A_Index], key1)
if(Mod(A_Index,2))
{
temp := XOR(key1,temp)
}
inputFlag.push(temp)
}
temp1 := 1
Loop % inputFlag.Length()
{
temp := inputFlag[A_Index]
temp := DllCall("aiQG.dll\?Check@@YAIII@Z", "UInt", temp, "UInt", A_Index)
if(!temp)
{
temp1 := 0
}
}
if(temp1)
{
MsgBox, Ok
}
if(!temp1)
{
MsgBox, GG
}
steamGroup = "steamcommunity.com/groups/sastGame"
//语法什么的AHK都有官方的文档 这里主要是实现了一个模三加法, 然后每一位用四比特表示
exe先获取输入, 然后转成数字, 然后调用了dll里的ToTrit
函数, 然后算了一个key(第五个和最后一个字符模三加), 然后进行encode, 最后调用dll里的Check
函数
稍微分析一下ToTrit
函数可知这是一个转三进制的函数(由于每一位用4比特表示, 所以可以转成十六进制直接查看每一位)
Check
函数里只有一个数组判断, 这个数组每一项转换成十六进制都只有0, 1, 2 三个数字
按照模三加稍微逆运算一下就好了
Our 16bit Games
按照flag的格式可以爆破出来(最多也就爆破两个字节, 利用前面的判断跳转, 可以大大减少爆破难度, 甚至直接确定正确的key)
key是0xc0de
你大概需要一个带bar的mac
考静态分析 http://aiqg.vip/?p=348
Become a Rockstar
github上搜Rockstar 配个py的解释器能跑出来
Bright Body I
//这题是一个模版改的 //少加了门, 导致被老玩家日穿了 //好像加载存档的逻辑也有问题。。。