2025 CCSSSC Reverse Writeup
封面:Bison仓鼠
第二天早九考试,看了看题没怎么打,考完期末考来补,搜了一下已经有全部wp了,随便写下分析过程吧
donntyousee
第一眼看到题目发现静态编译删除了所有符号,搜索字符串关键词找不到相关函数,得知字符串有加密就跑了。后面再看题目还挺简单。
原本是想着恢复符号再做,但是编译的gcc版本较新,搜了下应该是Ubuntu24的,找不到sig,又懒得自己做,就没恢复。实际上没恢复符号对这题影响并不是很大。
首先就是要找到输出plz input your flag的
经过调试可以发现,程序在sub_4B5470
中利用循环按顺序调用了.init_array
的函数,其中第三个函数sub_4053A5
输出了该字符串。追踪进去可以发现存在花指令,这里通过调试和观察汇编,可以把push rax
和pop rax
之间的花指令nop掉
同理把上下周围几个有类似花指令的的函数patch掉,方便后面分析
然后反编译即可看到该函数逐字节XOR 0x23
输出。同时在这里有一个对byte_5C5110
的异或,当时并没怎么在意。
然后通过调试发现在sub_405559
中,通过调用sub_405848
传入byte_5C5110
初始化了个S盒,然后调用sub_405EAA
使用魔改RC4将输入加密
查找这两个函数的引用,可以找到.data.rel.ro
段,在这个列表中下面的函数sub_405CAA
即可发现是检验函数,字符串同样做了异或处理。于是我打算将此处的加密数据通过patch输入回程序中,观察异或回去的输出,却发现是乱码。
此处我首先怀疑是异或完后是否有对数据作进一步处理,但经过交叉引用和动调后确认没有对数据进行修改。然后这时候就怀疑是上面对byte_5C5110
的异或。查看异或判断是否执行的函数sub_529980
,有个非常明显的sys_ptrace
反调试。因此只需要对此处反调试作处理即可,方法多样
1 |
|
kernel_traffic
三个文件:内核、client、流量。反编译一下可发现,内核将key事件发送给client,client通过一定的加密后发送给server,而流量文件的内容是client和server间的通信。这里缺少server文件,只能通过client的操作猜测
可以看到在main函数里首先进入一个函数,里面有两个大数。根据动调结果以及函数的传参分析,大概可以整理得到
对于上面的大数以及65537,猜测是rsa加密,可以验证一下
确实是公钥和私钥。因此我们可以通过流量得到通讯时使用的密钥。这题要注意数字的大小端序的问题
得到两端的密钥通过相乘异或计算后在下面初始化了一个魔改的RC4 S盒
看回主函数,下面有一个循环,获取内核发来的数据,然后使用生成的S盒进行魔改RC4加密,然后通过timestamp打乱一个table,对加密后的数据再进行一个替换
1 |
|
参考:
https://www.52pojie.cn/thread-1997919-1-1.html
https://blog.csdn.net/weixin_45582916/article/details/144962552
happyLock
A15的frida炸了,暂时咕咕,快发版修复了等一下
生日邮件
打开邮件,发现压缩包,提取,发现存在密码,根据邮件内容猜测密码为生日20001111。密码正确,得到生日快乐.exe,丢云沙箱分析。VirusTotal和微步都没分析出来,多试几个总有可以的。查看分析报告得到外联ip和端口。