逆向
01 Just reverse
拖入即可
Over
02 ^-^
拖入
静态分析,将输入加密与Str2对比,加密函数为xor那堆
进入分析写解密
Over
03 代号:破壳行动
从upx文件夹里打开cmd,并脱壳
拖入IDA分析
静态分析,发现v11是输入,并将v11的每一位与0x78异或,然后与unk_140003078比较,故写出解密
Over
04 ELF
拖进去
静态分析,flag为输入,encode作为中间生成的,最终与encode相比,里面唯一未知数为result,并且要注意,encode与enflag为四字节int,flag为一字节,开启虚拟机动调获得enflag这里我用了一个小技巧
在执行第二轮时先将enflag的值转换为十进制数,并且我猜到第二位字母为l(wllm)所以encode[2]=flag[2]*flag[2]的时候我知道此时的encode[2]
随后encode[2]+i*result*flag[2]+i*i=enflag[2]
enflag[2]=11881,encode=11664,于是列出11664+1*result*108(’l’)=11881
解出result=2
然后爆破
Over(wllmctf{load-elf_load-elf_please-load-elf_thanks_miao})
05 xianyuuuan's maze
拖入ida
静态分析,猜测迷宫是unk_403040,并且发现v6是一个[9][9]的格式所以要基本可以确定
是一张9x9的地图,直接写代码打印出来
然后走迷宫再根据题目提示,将得出的字母进行MD5解密
Over
06 broken_flag
拖入ida
根据提示,一部分在shift+F12中
二部分在函数名中,但发现这里并没有于是看向附件,附件类型为pdb格式,是程序调试时生成的文件,里面含有很多函数名等,将附件拖入ida,通过字符串查找
三部分在字符串查找中
然后进行ctlrl+x不断往回走就行
四部分,直接tab看汇编,往下找就在下面
当然也可以通过patch的方式
Over
07 hua
拖入ida
先静态加调试分析一下,v6是输入的数,经过三个加密,点开if里的对比函数
最后与那个对比,接下来分析加密
第一个问题是永真,解决就是豆删辣,对call使用“d”,三联ctrl+n
P一下看代码
第二个
这个xrelease有问题,在我多次尝试后,我突然觉得是不是这两个其实本来是连在一起的,是同一个函数,实践一下,先把xlease“d“掉
这段明显没啥用,删了试试
再去个标红,P一下
有了,第三段
其实这里有xor eax,eax 所以本身就是jz零跳,jnz没啥意义,再加上跳过了一个函数,一块删掉
P一下
最后一步写解密
Over
08 与恋结缘
是个apk,拖入jadx
分析,应该是用户名obj,密码obj2,先把obj与13代入到“Gaius.encrypt“这个里头看看
后面是与那个字符串对比,在resourse里找到check_user“76B8Bz11j“,写个解密,得到需要输入的用户名为76O8Om11w,然后看obj2
观察发现是,先把obj2变成int类型,再进行xtea.encrypt加密,最后在变成char类型与bbb对比,看看加密
Ok,是xtea,可以解密了
得到密码,84a54e96b731f43c,其实看代码可以知道是把obj和obj2放一起,进行一次md5加密,就是答案,但是还是可以手机运行一下,让文件直接出答案(有点社死)这道题就这样了
Over
09 超级网盟娘
这个算是我第一次接触游戏逆向,unity逆向,需要工具dnSpy
用dnSpy打开超级网盟娘文件里的
这个,然后一般游戏代码在
这个里,看看代码
这里是说,跳跃和死亡有关的,我当时把跳跃那个触发的复制到下面了哈哈哈,好像死亡条件被我删了
还有这个是控制跳跃什么的,最后一个if是跳跃有关的,其中第一个条件是说,碰到地才可以跳,我直接删掉,于是无线跳+不死就诞生了,最后保存到原位,启动
Over
010 哇袄
拖入ida
输入之后经过简单加密,与flag对比,写解密(第一次我错了,后来发现,这个flag在程序开始后,会变化的,所以应该先调试,之后用调试时的flag,写解密)如下
Over
011 下午茶派对
拖入ida
大概是先输入一个input,input进行chacha20加密,然后与v28对比得出第一段flag,在输入第二个v24,通过tea加密,与v8对比先看第一个chacha20
看样子是异或,而且这个加密仅仅异或,v12很难看到,但是异或的逆向就是异或,所以猜测这个会是个对称加密,用插件pathdata将
Path之后看看加密后enput
第一段就有了,看看第二段
写出解码
运行即可
Over
012 python:我想成为C
是python逆向,先下工具,把.exe文件拖进工具文件夹里,然后在工具文件夹中打开cmd,输入python pyinstxtractor.py 文件路径,即可获得.pyc文件
在网上可以找一个在线python逆向网站,拖入即可逆向
分析python发现是rc4解密,rc4是对称解密,所以只需要在原基础上稍作改动即可,如下解密
运行即可
Over
013 脱壳行动2
64位,upx壳
魔改壳,用010看一下壳的二进制文件
把这四个改成UPX,在尝试脱壳
脱掉了,ida看代码
SMC一般伴随着VirtualProtect函数出现,看一下这个lpAddress,有点可疑,经过复制,将code复制给,lpAddress,在经过dec函数,看看dec
看起来是把lpAddress也就是code经过异或解密,然后恢复,所以可以构建一个idapython来解密,进行静态分析,或者用动调来分析都可以,这里我选择idapython
Code段起始为0x403080,终止为0x40311F可以写出脚本
Run之后用c转换为代码形式,在按p转换为函数形式,看看代码
有了,大概意思是先用,a2^i创造一个s盒,把输入进来的数,用s盒里对应的字符重新编码,解码思路还是先创造一个一样的s盒,在根据s盒里的字符找到对应是几,写出解密
Over
014 basebase
运行一下
只有当程序开始移动时,base64的真正本质才会显露出来……
只有当羔羊被狼追赶时,它才会说出真正的密码(动调)
拖入ida
输入在buffer里,经过base64加密,与expected对比,但打开expect发现
是这样的,其实就是expected的值是地址,指向的地址才是代表的值
换成dd格式,就有地址了(其实也可以看灰色字)cHgod08od08gak80Y3w4W3Igd3V3MBBB
动调看看base64表变没变
可以看到这里把base64表变了
BADCFEHGJILKNMPORQTSVUXWZYbadcfehgjilknmporqtsvuxwzy1032547698/+
这个是变之后的表,找在线网站变表解码(当然也可以直接敲代码解)
得到flag{this_is_an_ugly_base64}
Over
015 一刀999
是个文件包,先打开看看有什么
一共就这么多先打开主页的那个浏览器图标
但似乎不能直接F12,通过工具-开发者工具打开
原来是又不让打开的代码,网上搜搜,关于这个的文章
试一下
好的可以了,然后发现
源代码似乎和文件夹里的一样,猜测是调用本地的js文件的网站,所以是不是可以通过修改本地文件实现改变网页,看名称猜测check与register最有关(注册与检查)
Check能正常看到代码但register感觉像是乱码
对了还有一个网站,点开看看
看来是提示,搜一搜js代码混淆,大概理解了什么是js混淆,所以就要知道怎么去混淆,找个在线网站
把register文件变成txt形式,把代码放进在线软件
有了,稍微看看
感觉有点像java,方法名可以通过前缀找到,所以看看common common用刚刚那个网站(美化)后,成这个样子,不过还是看不很懂,所以我觉得给ai帮帮我
差不多是这个要求,紧接着分析正否
通过判定success来判定是否成功,而success通过checkAccountAndPassword来判定,checkAccountAndPassword在check段中,所以接下来可以分析check了,不过我始终没用得到结果的是,似乎register.js反混淆再放回去后,F12后源代码就会消失register,不知道为什么
现在就是通过开发者模式的动调来进行分析
下断点,随便输一个密码和账号,进入
看到开发者这个界面的提示,t是账号,o是密码,对于账号的判定,是t+e(519)
单步进入e(519)
返回的是o[46]
也就是zsyyds,所以说这个判定就是c=账号+zsyyds是否为xianyuuuanzsyyds
所以账号应该是,xianyuuuan
在进入下一个
这个形式有点像之前做过的RC4,并且传入密码和xianyuuuanzsyyds,由此推测密匙是xianyuuuanzsyyds,
加密过后存在u中接着往下
这里第一行就是密文判定了,发现密文是e(491),单步进入看看
所以密文是M8/lqnKGGYrmjF/hn5BSaHwDKUIilKz2Bvg71ojm1Tc=,密文与经过函数后的n(密码)对比,所以单步进入,看看加密函数做了什么
这里发现传入三个参数,第一个是rc4加密后的密码,第二三个目前意义不明,接着看下去
这里是把t倒过来了,且这个btoa,是base64编码的作用,t+=后面是r[n]所以猜测是把密码base64加密了
在之后
这里进行的解密有提示,名字叫AES-CBC,再根据网上在线解码发现要三个参数,刚好对应,所以sdyysznauuuynaix是密钥,1234567812345678是iv,传输密码,加密
所以整理思路是,密码->RC4->base64->AES-CBC
关于AES-CBC的解码脚本我还没实现,所以使用的在线网站
解码脚本如下
最后运行得到flag
Over