比赛昨天结束。题目下载地址:http://pan.baidu.com/s/1qWtGILY,密码:iz6l
Reverse01
使用ExeinfoPe查壳,程序使用 Aspack v2.24 - 2.34 加了壳。
手工脱一下壳:
单步执行pushad,后在esp下寄存器断点
F9继续执行,在此处断下:
F8单步来到OEP位置
直接使用OllyDump插件脱壳
将dump出的程序拖入IDA,此时可正常显示main函数,F5之
sub_401000函数才是真正输出flag的位置,注意v4指针与Format指的位置关系
char Format; // [sp+0h] [bp-38h]@1
char v4; // [sp+Fh] [bp-29h]@1
因此先输入3次错误密码,再输入nsF0cuS!x01,即输出正确flag
Reverse02
首先,Reverse02程序没有加壳,有反调试。拖入IDA分析,定位到关键函数GetDlgItemTextA。
它将从dlg框中取的值传给sub_401070函数,接下来需要重点分析这个函数。
跟进去后发现,该函数将输入字符串,与byte_4030xx处的字符与(7或0x33)的异或比较。MessageBoxA处猜测为输出真正flag位置。
转换一下进制显示,byte_4030xx处字符分别为“JPFjXj2;9GWbN”
写破解代码:
#include <stdio.h> int main() { int i, j = 0; char str1[] = "JPFjXj2;9GWbN"; char str2[20] = {0x00}; for (i = 0; i <= 6; i++) { str2[j++] = str1[12-i] ^ 7; } for (i = 5; i >= 0; i--) { str2[j++] = str1[i] ^ 0x33; } printf("%s\n", str2); return 0; }
输入运算出的Key值,发现GetFlag按钮还是灰的,用Spy++激活之,得到flag:
flag:{NSCTF_md50b7dfc60761e798328a0d9793f96d4f7}
时间: 2024-10-20 02:20:37