vsCTF intro-reversing
附件拖入ida
patch掉sleep,然后运行
看不出来,复制粘贴到文本编辑器,缩放即得
vsCTF awa-jelly
谷歌搜索能找到一个wiki介绍这种脚本
从网页底部外链能找到题目的网页,把附件中的内容粘贴到code部分
简单输入,发现好像是混淆顺序。F12打开控制台,发现并没那么简单
类似vm,Code部分的文本解码后就是command。根据代码,能看出就是链表元素的插入和删除
脚本
闽盾杯 licensePWN
附件拖入ida,函数列表随便点点
从txt文件中读取字符串,然后经过strcpy和strcmp函数判断是否license合法。strcpy函数处可以进行栈溢出
闽盾杯 你破解or我破解
DIE查看发现是VB程序,网上搜索一番找到工具VB Decompiler可以反编译,有五个按钮点击事件和一个函数
关键是下面两个点击事件
第一个点击事件不管判断成功与否都不会执行中间把其它组件显型的代码,所以需要patch。ida可以进行调试,需要在适当位置下断点,保证中间代码实现即可
显示之后两个编辑框限制长度必须小于4,所以继续patch,使得长度能够超过。我这里只改了后一个的限制
然后开始跑
跑出来发现和flag无关,需要找flag。注意到第二个点击事件中的字符串拼接,应该就是flag了。下断点调试取值。提交不对,最后数字部分应该是猜解得到的
UIUCTF Summarize
附件拖入ida
需要六个九位数,经过一些运算后再判断值是否相等。进入其中一个运算函数,以下图为例,每一bit都做异或操作,但是好像还有附加的,即carry(这个灵感来自gpt),简单一想,这不就是二进制加法嘛。其它的函数功能都在上图中标明了
脚本
春秋杯夏季赛 HardSignin
有魔改upx壳,修改特征后直接脱壳。附件拖入ida
应该是有smc,对main查引用
有花指令,直接patch。果然是smc,还有反调试
还有几个回调函数,同样去花指令
一共四个回调函数,都有反调试,都可以给它patch掉。回调3如果不patch的话会卡在这,原理现在不知道
patch完之后下断点动调发现会卡在main函数。那就另开一个ida,手动smc解一下
先是换表base64,再RC4,最后xtea加密。所有的密钥和值都通过卡在main函数的动调进程得到。脚本
ctfshow西瓜杯 pe
附件拖入ida。明文
ctfshow西瓜杯 探索进制的奥秘
附件拖入ida。几乎明文
DownUnderCTF jmp flag
附件拖入ida
看看判断函数,全局变量要为0
接下来看处理函数
用输入的字符再经过运算后的值作为地址偏移。可以看到,如果想要全局变量为0,那必须得按位与之后的jnz跳转不执行,即全局变量等于按位与的值
眼睛尖的话可以看上面这一条(不知道叫什么),大致有一百二十八条吧(我没细数,猜的),0x00-0xff每一种字符应该分别对应一条。
有的粗有的细,其中最特别的是不粗不细的那条,对应的代码是这个,与众不同,因为既没有比较也不是直接赋值-1,猜测应该是开始或者结束位置
假设是结束位置,全局变量最后要等于0,那么异或前的值就等于0x2000000了。搜索这个值
(0xffffffffffffffff^0x2000000)&0x2000000=0。好,推翻假设,是程序检验的正确开始位置,即对应输入的第一个字符。(0x4D00-0x12a4-0x60)>>7=0x73=’s’。同理,倒推可得全部输入
发现不对,看字符串也不像。检验一下跳转计算,(0x73<<7)+0x60+0x12a4=0x4c84,不是开始位置,而是前一位字符的位置,也就是说需要输入’t’才进入正确的开始位置
把每一个字符都+1就行。脚本
WKCTF so_easy
附件拖入jadx
解包找到so拖入ida
这里可以学到新知识点,当然不学也没关系,涉及到密码学中的线性反馈移位寄存器(LFSR),知道有这么个东西就行。观察程序,每八个字节转换为有符号整数,如果为正,那就乘以2即相当于左移1位;如果为负,那就先左移1位再异或。要做的是逐步还原最高位,区别两种操作在于如果异或了,那么最低位是1,否则就不是。脚本
WKCTF quite_easy
附件拖入ida
看起来是明文flag,提交不对,那就调试。窗口一闪而过,应该有反调试,那么应该在哪呢。函数窗口可以过滤tls。做题时是通过对程序中莫名的大段红区地址查引用发现的
回调函数中有两个函数调用,
第一个是反调试,可以patch或者下断点在调试时跳过
第二个函数好像是hook了strcmp
调试发现果然是
进入正确的处理流程。用了种子和随机数,生成了十六个字节,附加在输入字符串后面
附加之后长度需要等于0x30
然后就是运算
总结一下
脚本。爆破部分有多种解,加break
CatTheQuest Warmup
DIE显示是python module,用pycdc可以反编译
比较简单
CatTheQuest Jakshu
附件拖入ida
输入经过函数却没改变,赋值的数组没被使用。比较简单。脚本
DASCTF暑期挑战赛 Strangeprograme
附件拖入ida,通过字符串定位到关键函数
但是是fake
下断点调试,窗口一闪而过,应该有反调试。Import窗口发现确实有IsDebuggerPresent
对它查引用,每个地方的函数入口都下断点
直接改eax的值,然后F9运行
步入memcmp,发现跳到另一个函数
就一个xtea加密,比较简单。脚本
DASCTF暑期挑战赛 DosSnake
附件拖入ida
查一下字符串
看起来就是一个异或,大胆猜测,小心验证。脚本