Login
这个题目没什么意思,不过打开就把我吓了一跳而已。
一个PHP,不过逻辑很简单,没有什么难度,就是一个rot13加密
解密地址: http://www.rot13.de/index.php
考点:php代码、rot13加密算法
hamburger competition
考点:unity逆向
这个题目挺有意思的,unity开发的游戏逆向,非常让人摸不着头脑的逆向题目,可能是我没怎么做到这种unity开发的逆向题目
打开就是一个游戏,文件也是挺多的,没办法,完全没有思路。百度unity逆向的思路。
一看全是Android端的逆向经验,几乎找不到PE平台的资料。那只能看Android端的资料咯,估计差不多,凑合着看吧。
https://veritas501.space/2018/03/28/%E4%B8%A4%E6%AC%A1CTF%E6%AF%94%E8%B5%9B%E6%80%BB%E7%BB%93/
这是NULL2018年的一个题目
看这个文件
刚好我们找到这个文件在这里
一看有点像游戏的数据,估计和Android平台下面是差不多的
一个dll文件怎样分析呢?
https://www.cnblogs.com/ljyzl123/p/6076918.html
不管你输入啥,对加密都没有丝毫影响,一看就一个sha1加密
在线解密,然后再MD5,取前20位,flag就出来了。
BJDCTF2020-easy
看见这个easy就不对劲,easy就easy吧。PE文件,没有壳,动态调试加静态分析一通,没有结果,有点奇怪,难道是加了反调试???
找了一下没有反调试啊?那为什么动态调试没有结果呢?
一看程序来了一句 can you find me ?
没有输入点?
估计flag函数应该是吟唱起来,没有被调用,所以程序不会显示结果?那就去找他吧
找了一通就发现_ques这个函数有点意思,怎样实现调用呢?动态调试的时候修改EIP寄存器的值,让程序调用这个函数。就这个样找到了flag。
考点:没有什么考点?感觉就是一个脑洞题目。
[GWCTF 2019]xxor
中规中矩的题目,加密函数挺简单的,唯一学到的知识点就是,一个64位寄存器被分成两个32位寄存器来使用,为了我们阅读代码方便,我们可以修改一个数据的大小
修改完就一目了然,没有什么好说的。
还有一点就是,这个题目需要使用到z3,这个简单安装。
解密代码
#include<stdio.h>
int main(){
unsigned int xorm[6];
xorm[0] = 3746099070;
xorm[1] = 550153460;
xorm[2] = 3774025685;
xorm[3] = 1548802262;
xorm[4] = 2652626477;
xorm[5] = 2230518816;
int i=0,j=0,sum;
unsigned int temp[2] = {0};
unsigned int data[4] = {2,2,3,4};
for(i = 0;i<=5;i+=2){
temp[0] = xorm[i];
temp[1] = xorm[i+1];
sum = 0x458bcd42 * 64;
for(j = 0;j<64;j++){
temp[1] -= (temp[0] + sum + 20) ^ ((temp[0] << 6) + 3) ^ ((temp[0] >> 9) + 4) ^ 0x10;
temp[0] -= (temp[1] + sum + 11) ^ ((temp[1] << 6) + 2) ^ ((temp[1] >> 9) + 2) ^ 0x20;
sum -= 0x458BCD42;
}
xorm[i] = temp[0];
xorm[i + 1] = temp[1];
}
for (i = 0; i < 6; i++)
printf("%c%c%c", *((char*)&xorm[i]+2), *((char*)&xorm[i] + 1), *(char*)&xorm[i]);
return 0;
}
考点:Z3的使用、IDA静态分析
[HDCTF2019]Maze
一看题目就知道这个是一个迷宫题目
有一个加壳,不过壳挺简单的,脱壳机上手就脱就可以。
开始静态分析吧。
好像是一个花指令
那,手动去除一下花指令
把那个垃圾数据nop掉,然后IDA就自动解析出来汇编代码,为了让我们能够分析出伪代码,我们需要重新申明一下函数,把解析出来的这个块选中,按P就可以的到反汇编。
逻辑太清晰了,找到迷宫就直接走就可以。
考点:upx脱壳、花指令的去除
[FlareOn6]Overlong
这个题目没有什么技术含量
修改一个地方就可以的到答案,应该是这个比赛的签到题吧。国外的比赛题目,脑洞新奇。
![[FlareOn6]Overlong.png][9]
把长度修改大点,就可以得到答案。
[FlareOn4]IgniteMe
没啥能够学到的
就是纯分析
#include<stdio.h>
int main(){
unsigned int byte_403000[40] = {
0x0D, 0x26, 0x49, 0x45, 0x2A, 0x17, 0x78, 0x44, 0x2B, 0x6C, 0x5D, 0x5E, 0x45, 0x12, 0x2F, 0x17,
0x2B, 0x44, 0x6F, 0x6E, 0x56, 0x09, 0x5F, 0x45, 0x47, 0x73, 0x26, 0x0A, 0x0D, 0x13, 0x17, 0x48,
0x42, 0x01, 0x40, 0x4D, 0x0C, 0x02, 0x69,0x0
};
int v4 = 4;
int input[40];
for(int i = 39;i>=0;i--){
input[i] = byte_403000[i] ^ v4;
v4 = input[i];
}
for(int i = 0;i<40;i++){
printf("%c",input[i]);
}
return 0;
}
考点:静态分析