2023starCTFgogpt
0x00 分析没啥好说的,签到题来的
0x01 解查壳(Not Packed)
直接上IDA8.3
有个shuffle比较显眼,柏鹭杯的时候有理解过shuffle的意思
这里应该是将上面的那串字符打乱了
往下滑滑可以看到这个
base64没跑了
但是那串字符不太可能作为base64的表
所以看看那串字符什么操作
字符变量传递流程我贴这了
v54 → shuffle → v57 → v26 → v24
然后就是一个异或
看来这题的加密就是XOR+base64了
那这个shuffle结果是什么?
动调看看
进去之后注意寄存器RCX
运行到ret就能看到结果了
写脚本咯
1234567891011import base64key = "TcR@3t_3hp_5_G1H"enc = b"fiAGBkgXN3McFy9hAHRfCwYaIjQCRDFsXC8ZYBFmEDU="dec1 = base64.b64decode(enc)dec1 = list(dec1)dec2 = ""for i in range(len(d ...
2023NepCTF九龙拉棺
0x00 题目分析8线程+1进程+反调试+多重加密+SMC
难度:easy
……
0x01 解照例,查壳(Not packed)
没壳就拖进IDA直接到main函数看
多个线程+长度限制
还有看到个提权:https://www.jianshu.com/p/232fbd1a3cfb
感觉挺麻烦的
接下来看看每个线程都执行了什么函数
StartAddress函数
这个函数里面有个CreateProcessA,创建了一个进程,估计有一部分的操作是在创建的子进程里面进行的
sub_402460
下面有这个
这个byte_404210有点怪,里面是空的
sub_402630
这里面有个sub_401120
base64
结合这个base64和上面那个函数的1.37+1,可以知道上面那个函数应该是base58
参考:https://blog.csdn.net/weixin_34258782/article/details/88830132
sub_4020B0
看不太懂,但是应该是什么算法,下面有很多操作
结合WP,这应该是一个反调试(
反调试动态读取.text(第一个段)并通过 ...
2023NepCTFeeeeerte
0x00 题目分析根据官方WP复现
关于NepCTF我好像只保存了这一道(
藏密钥的方式确实独特,下次遇到可能就做不出来的那种(
0x01 解查壳略(Not packed)
直接上IDA
查字符串一眼base64
出去发现在这里被调用
这个函数再出去看到这个
我函数呢?
向上走
看来是没有识别出来
手动设一下函数
这下能识别了
F5粗略看下
这里有个626很可疑
记下位置
动调看看
在这个位置下断,然后点一下就断下了
看来这个值会和点击次数有关
看看57C620这个位置
确实是点一次加一
往下走走到判断(0x272=626)
在jne处改ZF标志位为1
直接跑
随便输点东西
然后会在这一步发现有个fake flag
继续执行会发现输入(输了123)被加密
根据加密结果或者图片或者堆栈信息可以找到一个叫skipjack的加密算法
回到IDA
发现在626判断的下面有一个626626626的判断
继续往下,还能看到一个662266的判断
这个判断之后就很抽象了
找一下这两个判断,然后都输出看看
第一个(0x25599042=62662662 ...
2023羊城杯vm_wo
0x00 题目分析一个Mach-O ARM64程序
使用自制的VMP进行加密
关于VMP介绍可以看这个:https://www.52pojie.cn/thread-1564978-1-1.html
虚拟化可以看这个:https://www.cnblogs.com/theseventhson/p/14240373.html:
变异可以看这个:https://www.52pojie.cn/thread-1565126-1-1.html
0x01 解查壳,没有结果,直接拖IDA(不能用8.3,因为是ARM64)可以发现函数很少
先看看main
非常简单,这个byte_10003F47就是密文了
加密过程应该就是那个myopearate了
写入了很多数据,看不太懂
不过这里面有个函数interpretBytecode看起来挺重要的
函数里面很长,进行了很多操作
同时使用了一个不存在的地址,应该是程序写入内存的时候才会出现
非常符合VM的定义
由于没有mac系统,做不了模拟(应该有做模拟的方法的,挖个坑先)
所以只能copy计算流程然后进行点修改来爆破了
12345678910111 ...
2023羊城杯Blast
0x00 题目分析这题用MD5的
MD5的爆破理论上可行,但是实际操作可能要耗点时间
0x01 解查壳省略,是个ELF程序
main函数非常长,很多移位什么的操作
直接去到最后看密文比较说不定还能知道是个啥
比较放别的函数去了
在这个sub_402370里
这个a14d89c38cd0fb2什么的很是可疑
看起来很像hash的结果
测试了一下应该是md5
应该是单个字符进行了两次md5加密
那没什么好说的,直接爆
1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798991001011021031041051061071081091101111121131141151161171181191201211221231241251261271281291301311 ...
2023羊城杯CSGO
0x00 分析这题是go语言(是没见过的语言)
用了IDA8.3(かみ さま),标志什么的好像都有,所以就稀里糊涂地做了
有空一定要专门出一篇GO语言的逆向
然后这题还有反调试(也是第一次见上这个的)
不过还是SharpOD技高一筹
0x01 解查壳省略(not packed)
上IDA直接搜字符串
可能是go语言的特性(?),字符串并没有直接出现在函数内,而是经过了一个转换
因为这个特性不是很好找密文、加密方法
不过还是试一试
上一下findcrypt
看来有个base64
跟出去发现在main函数中
这个runtime_intstring比较可疑,进去看看
这个v就是base64的表,看来可能是一个换表base64
但是具体怎么换的不太清楚
再回到main函数看看
这个base64换表下面有个equal,猜测是进行对比
然后下面有个main__stmp_3
看来确实是,那么密文呢?
有一说一这个地方蛮麻烦的,不知道是不是go语言的原因
要去到汇编才能看到
这个就是密文了
cPQebAcRp+n+ZeP+YePEWfP7bej4YefCYd/7cuP7WfcPb/U ...
2023羊城杯EZ加密器
0x00 分析常规题目,主要是要知道认出来算法
0x01 解查壳不放了,反正就是没有
直接上IDA,由于没有函数名,所以搜搜字串
字串里面有点意思的,下面很明显是个base64,不过是换表的,应该哪个地方用到了
先放着,先去看看getflag在哪
非常好,一个简单的strcmp,没有这么多弯弯绕绕
看看密文str1
挺长的,明文应该没这么长,合理怀疑进行了一些扩充
然后去看看别的地方
先看看input flag的地方
结合题目,这里应该是把输入验证码和flag放在一起了
其中变量a1就是验证码,变量a2就是输入的flag了
从这个接收输入的函数出来就会到使用”GetFlag”这个字串函数内了
看来GetFlag这个字串所在的函数就是main了
出来之后可以看到sub_140003C30的两个参数分别是a000000和a11111111111111
这两个就分别是验证码和输入的flag了
下面还有两个函数
一个个看
先看sub_1400036A0
下面可以找到这个数组off_140015108
一直跟进去就会看到这个
看来这个函数sub_1400036A0就是个base64 ...
2023DASCTF七月赛TCP
0x00 分析此题使用多种加密(RSA,TEA,XOR…),还加入了一点流量分析,所以做起来不太简单(
附件是一个程序(elf)和一个流量包
0x01 解经典流程,先查壳
彳亍,直接上IDA
可以直接找到main函数
可以看到下面有一个recv函数,用于从连接的套接字或绑定的无连接套接字接收数据,接收到了一个qword_50A0,然后传给了qword_5020,最后放入了函数sub_2090进行使用
看看函数sub_2090
一步步分析,
首先是a1,应该是用户输入的某个东西
然后是a2,看不太出是干嘛的,所以先跳过
最后是a3,看到v8从0开始递增,所以合理认为a3是一个长度,而从调用的输入可以看出,a3传入是48,所以基本可以断定这是一个长度
除此之外还有一个for循环,这个循环在大循环内部,以8为条件,结合v10的变化(一段a2并进行移位),猜测起到一个分段的作用
有长度、有输入、还有一个不知道是啥的东西,感觉应该是个加密函数
实际上,这是一个RSA的加密函数,跟入sub_1F9C和sub_1E6E可以看到接了两个幂运算(__modti3),由此可以判断
__modi ...
2023DASCTF七月赛websever
0x00 前置知识这道题使用了Oat++
参考:https://blog.csdn.net/qq_44519484/article/details/123250415
据说题目用到了IDA的bindiff插件,没用过,正好试试
最后也用到了一个python库:Z3
这玩意好像只要会用就行,没必要深究(
0x01 解查壳
ELF,上linux
运行结果如上
拖IDA吧
函数全是地址,看来没有标志
先查查字符串吧
字符串查到很多otapp的字样,otapp库相关问题参考前置知识
从这里可以知道程序使用了otapp进行编译,为了让反编译后的程序可读性增加,可以利用IDA的bindiff插件进行处理
Bindiff插件参考:https://cloud.tencent.com/developer/article/2175714
自行编写使用otapp库的程序,并进行编译
由于重点是把库给展示出来,因此可以随便一点
参考:https://blog.csdn.net/qq_44519484/article/details/123250415
123456789101112131415# CM ...
2023DASCTF七月赛controlflow
0x00 题目分析题为ControlFlow,即控制流,说明此题可能在控制流上做文章,因此要时刻注意堆栈的内容和变化
0x01 解先查壳
没壳,拖IDA
可以找到main函数
F5反编译
看起来好像很简单,只是将40字节长的输入与0x401进行异或加密,但是这里并没有与正确密文进行比较,结合控制流有问题的可能性,这个ret可能存在问题
获取main函数入口地址
上x32dbg动调看看
开头几个push(push <consoleapplication1.sub_CA….>)将函数的地址压入了栈中,当main函数执行至ret的时候则返回到这些地址中执行这些函数
随便输入一个40字节长的数进去再跟到ret处,此时的栈内容如下(有三个函数)
ret跟进去后进入第一个函数(相对地址为1220)
这些个函数可能用IDA会比较好看,遂上IDA
函数1220将接受的数据与i(i>=0||i<40)平方进行逐位相加
之后return进1560这个函数(注意输入函数1560的数据是偏移了10位的!)
函数1560将接受的数据与i*(i+1)(i> ...