写在前面
博主本人萌新,只入门了Re,这次比赛只会签到题。所以本篇博客也不叫WP,只是算是我赛后复盘的学习记录。真正的WP可以看官方WP或者看看Re大佬的WP。因为现在还没有学习其他方向,所以其他方向的题目我会留个坑,等以后接触了有空再写吧(大概率咕咕了而且大概率也只会签到题)。
Reverse
whereisyourkey-广东海洋大学
这题是我觉得最没难度的
首先丢进exeinfoPE内看看
很好无壳32位,接下来直接丢进32位ida中找到main函数F5反编译
简单阅读一下就知道加密逻辑很好理解,就是将V5通过ooooo函数加密后即为Flag
通过转换知道V5如下
接下来只需知道ooooo函数在干什么即可双击ooooo函数
很好理解字母小于等于n的替换成前两位字母,m,o不变,大于o的替换成后三位字母。这样我们就可以通过运算直接解出Flag,没必要写脚本。
Flag:UNCTF{yesiamflag}
ezzzzre-广东海洋大学
这题当时起初没放进exeinfoPE内看看,结果因为加壳导致一直解不出来,学习了一下脱壳就解决了。
这题我就详细写一下脱壳过程(大佬们请忽略)
可以看到是一个UPX壳,我们首先下载UPX
接下来打开cmd,cd进入UPX所在文件夹
接着输入UPX -d 目标文件地址
完成脱壳后下方显示“Unpacked 1 file.”,表示脱壳成功。
脱壳后可以看到是64位
64位ida打开,可以看到Flag逻辑即为2 * aHelloctf[i] – 69
而双击aHelloctf可以找到该串字符为’HELLOCTF’,写个简单脚本可解出Flag
思考后再点击查看代码哦
#include <bits/stdc++.h>
using namespace std;
string s;
int main(){
s="HELLOCTF";
for(int i=0; i<8; i++) printf("%c",2*s[i]-69);
}
Flag:UNCTF{KESSYAcG}
Sudoku-陆军工程大学
听名字很唬人,看起来像是解数独,但其实简单阅读main函数可知这题是要你输入V11这个矩阵
若与他给出的V12矩阵一样就用V11中每一行的数减去V13中每一行的数求和最后加上50对应一个字符
(题中有个vme50的小彩蛋)八行八个字符就是Flag。
现在问题就是怎么得到V12和V13,我们采用动态调试。
首先第60行设置断点
F9选择Local Windows debugger
之后再次F9
F5回到源码页
之后分别双击V12和V13可以得到二者的值,注意用鼠标滚轮滚动查看值,因为每四行是一个值,将二者的值记录,注意别抄错,抄漏。最后写个脚本解决。
思考后再点击查看代码哦
#include <bits/stdc++.h>
using namespace std;
int main(){
int V12[81]={
8, 5, 2, 4, 9, 1, 6, 7, 3,
1, 9, 6, 7, 3, 8, 2, 5, 4,
4, 3, 7, 5, 6, 2, 9, 1, 8,
5, 2, 8, 1, 4, 6, 3, 9, 7,
3, 7, 4, 9, 2, 5, 8, 6, 1,
9, 6, 1, 3, 8, 7, 4, 2, 5,
2, 1, 9, 8, 5, 4, 7, 3, 6,
7, 4, 3, 6, 1, 9, 5, 8, 2,
6, 8, 5, 2, 7, 3, 1, 4, 9 };
int V13[81]={
0, 0, 0, 4, 9, 0, 0, 0, 3,
0, 9, 6, 7, 0, 8, 0, 0, 0,
0, 0, 7, 0, 0, 0, 0, 1, 8,
0, 2, 8, 0, 4, 0, 0, 0, 7,
3, 0, 0, 0, 2, 0, 0, 0, 1,
0, 6, 0, 0, 8, 0, 4, 2, 0,
2, 0, 0, 0, 0, 4, 7, 3, 0,
7, 0, 3, 6, 0, 9, 0, 0, 0,
0, 8, 0, 0, 0, 0, 1, 4, 0 };
for (int i=0; i<9; i++){
unsigned int v9=0;
for (int j=0; j<9; j++) v9+=V12[i*9+j]-V13[i*9+j];
v9+=50;
printf("%c",v9);
}
return 0;
}
Flag:UNCTF{OAOJYKOFR}
Pwn
Misc
原文地址:http://www.cnblogs.com/Tree-24/p/16928649.html