第三届上海市大学生网络安全大赛-crackme
1.ISC2016训练赛-phrackCTF-FindKey
2.第三届上海市大学生网络安全大赛-crackme
3.2017年全国大学生信息安全竞赛-填数游戏4.“百度杯”CTF比赛 2017 二月场-爆破-15.“百度杯”CTF比赛 2017 二月场-爆破-26.ISC2016训练赛-phrackCTF-Smali7.“百度杯”CTF比赛 九月场-Upload8.“百度杯”CTF比赛 九月场-SQL9.《从0到1:CTFer成长之路》题目-SQL注入-210.“百度杯”CTF比赛 九月场-SQLi11.“百度杯”CTF比赛 2017 二月场-爆破-312.2017第二届广东省强网杯线上赛- who are you13.i春秋 第二届春秋欢乐赛-Hello-World14.“百度杯”CTF比赛 十月场-Login15.“百度杯”CTF比赛 九月场-123第三届上海市大学生网络安全大赛
Reverse-crackme:
题目描述:crackme
解题方法:把附件下载下来发现是一个.EXE文件,把它放进exeinfope.exe里面来查看一下他的信息
这里我们发现它是一个32位的有壳的程序,但这里显示的不是UPX壳,而是nsPack的壳,所以我们这里就用一个专门脱nspack的脱壳软件:
脱壳成功之后我们再把它放进exeinfope.exe里面去查看一下:
现在就可以发现没有壳了,然后我们把它放进32位的IDA里面去分析的源代码:
进去shift+f12,搜索字符串,找到关键信息(right),最后索引回去F5一下,反汇编它的核心代码:
int __cdecl main(int argc, const char **argv, const char **envp)
{
int v4; // eax
char Buffer[52]; // [esp+4h] [ebp-38h] BYREF
memset(Buffer, 0, 50);
printf("Please Input Flag:");
gets_s(Buffer, 0x2Cu);
if ( strlen(Buffer) == 42 ) //判断我们的输入是否为42
{
v4 = 0;
while ( (Buffer[v4] ^ byte_402130[v4 % 16]) == dword_402150[v4] ) //这里将我们的输入进行一系列的转换,也是最关键的部分,转换后比较相同就输出right
{
if ( ++v4 >= 42 )
{
printf("right!\n");
return 0;
}
}
printf("error!\n");
return 0;
}
else
{
printf("error!\n");
return -1;
}
}
这里我们分析完后是一个清晰的加密转换过程,只有将它逆向回去就可以得到我们的输入flag,我们先获取byte_402130函数里面的内容:
再找到dword_402150函数里的值:
解密python代码:
byte = 'this_is_not_flag'
down = [0x12,4,8,0x14,0x24,0x5C,0x4A,0x3D,0x56,0x0A,0x10,0x67,0,0x41,0,1,0x46,0x5A,0x44,
0x42,0x6E,0x0C,0x44,0x72,0x0C,0x0D,0x40,0x3E,0x4B,0x5F,2,1,0x4C,0x5E,0x5B,0x17,
0x6E,0x0C,0x16,0x68,0x5B,0x12,2,0x48,0x0E]
flag = ''
for i in range(0,42):
flag += chr(ord(byte[i % 16]) ^ down[i])
print(flag)
注意再获取dword_402150函数里面的值的时候,要细心0也不能省去
最后得到flag:
flag{59b8ed8f-af22-11e7-bb4a-3cf862d1ee75}
【推荐】国内首个AI IDE,深度理解中文开发场景,立即下载体验Trae
【推荐】编程新体验,更懂你的AI,立即体验豆包MarsCode编程助手
【推荐】抖音旗下AI助手豆包,你的智能百科全书,全免费不限次数
【推荐】轻量又高性能的 SSH 工具 IShell:AI 加持,快人一步
· 无需6万激活码!GitHub神秘组织3小时极速复刻Manus,手把手教你使用OpenManus搭建本
· Manus爆火,是硬核还是营销?
· 终于写完轮子一部分:tcp代理 了,记录一下
· 别再用vector<bool>了!Google高级工程师:这可能是STL最大的设计失误
· 单元测试从入门到精通