aiQG's Blog

Happy hacking. Happy developing.

aiQG's GitHub ⛓Links P
Other CTF Swift Developing&Reversing

nctf2019出题

28 November 2019

by aiQG_

Easy Ternary

exe里就有源码。。。T1 google搜一下知道是AHK写的(其实如果有优秀的PE信息查看工具也能查出来)T2 搜AHK反编译, 搜到反编译工具Exe2Ahk。。。T3//运行需要安装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

//这题是一个模版改的 //少加了门, 导致被老玩家日穿了 //好像加载存档的逻辑也有问题。。。

CTF

return

email:nrxxmzlrovqw4z3fgeztcncaozuxaltroexgg33n

桂ICP备18011144号-1 (点击访问安全的工信部网站)