NSSRound22-Reverse专项赛
22这个数字我很喜欢,就是出的题目难了点😥
ezapk-1
java层有XTEA
魔改异或918,得到username,负数用jeb转成16进制
1 | |
魔改rc4,256变成128
一开始以为validatePassword函数还有加密,后来想如果是这样的话java层应该有密文,再去看发现上面函数只是确认密文,这样看的话java层validatePassword(str, encryptWithRC4(str2, str))两个str含义不一样
1 | |
EzHook-1
考得是Windows IAT Hook技术,本题hook了MessageBoxA函数,当执行MessageBoxA的时候会跑到另外地方
4B0函数里面一堆异或,一个个写出来不显示,后面Right?的话应该没这么简单
往main前找,找到1240,调试起来发现运行在main函数之后
1880和1840里面调用的函数是一样的,那么大概率就是一对加解密函数
细看猜测是xxtea
最后给了个弹窗,也就是说a090函数是MessageBoxA函数
调试到这里把str2赋值给a2
1 | |
通过汇编的rcx进入编辑
每16个地址change byte一次,把对应的密文填进去
运行到解密函数之后
直接就是参数a1NSSCTF{C0ngr@tulat1ons!H0Ok_bY_1t_s3lf!}
ezcrypt-1
反编译pyc,得到blowfish,key并不能直接用
而要去crypto.cpython.pyc里找
1 | |
key四位里面反转,得到EzNssRevProjects,用脚本分割iv和密文
1 | |
得到elf,发现是vm,v5是opcode,v4是key
VM函数抄下来符号改一下,有个地方给的代码还不对,看汇编也是sub,其实是add
1 | |
稍微分析可以写出python,这里还是把上面的-改成+了
1 | |
Go!Go!Go!-1
大量的WinAPI调用,进入1490
交叉引用5080
动调发现qword_140005080内资源开头为MZ,是PE文件
ResourceHacker正好可以提取
导出elf,后面发现是exe文件
hashcat -m 0 -a 3 b098cacb2d43b882ef9a83168d13c3a7 ?a?a?a?a?a?a(-a后面跟16500表示jwt HMAC-SHA256 哈希类型 )
第二个key同理
1 | |
main1的两个key拼接在一起传到main2
main2函数后面,第三次输入的就是flag
发现RC4特征,发现魔改了
p->string就是输入的明文
用正确的密文一行行patch
输入密文长度匹配