查壳

64位ida
直接查看字符串能看到you found me和一些奇怪字符串


有些类似base的东西
先找you found me
跟进后CTRL+X交叉引用找到函数,f5查看伪代码

signed __int64 sub_4009C6()
{signed __int64 result; // rax__int64 v1; // ST10_8__int64 v2; // ST18_8__int64 v3; // ST20_8__int64 v4; // ST28_8__int64 v5; // ST30_8__int64 v6; // ST38_8__int64 v7; // ST40_8__int64 v8; // ST48_8__int64 v9; // ST50_8__int64 v10; // ST58_8int i; // [rsp+Ch] [rbp-114h]char v12; // [rsp+60h] [rbp-C0h]char v13; // [rsp+61h] [rbp-BFh]char v14; // [rsp+62h] [rbp-BEh]char v15; // [rsp+63h] [rbp-BDh]char v16; // [rsp+64h] [rbp-BCh]char v17; // [rsp+65h] [rbp-BBh]char v18; // [rsp+66h] [rbp-BAh]char v19; // [rsp+67h] [rbp-B9h]char v20; // [rsp+68h] [rbp-B8h]char v21; // [rsp+69h] [rbp-B7h]char v22; // [rsp+6Ah] [rbp-B6h]char v23; // [rsp+6Bh] [rbp-B5h]char v24; // [rsp+6Ch] [rbp-B4h]char v25; // [rsp+6Dh] [rbp-B3h]char v26; // [rsp+6Eh] [rbp-B2h]char v27; // [rsp+6Fh] [rbp-B1h]char v28; // [rsp+70h] [rbp-B0h]char v29; // [rsp+71h] [rbp-AFh]char v30; // [rsp+72h] [rbp-AEh]char v31; // [rsp+73h] [rbp-ADh]char v32; // [rsp+74h] [rbp-ACh]char v33; // [rsp+75h] [rbp-ABh]char v34; // [rsp+76h] [rbp-AAh]char v35; // [rsp+77h] [rbp-A9h]char v36; // [rsp+78h] [rbp-A8h]char v37; // [rsp+79h] [rbp-A7h]char v38; // [rsp+7Ah] [rbp-A6h]char v39; // [rsp+7Bh] [rbp-A5h]char v40; // [rsp+7Ch] [rbp-A4h]char v41; // [rsp+7Dh] [rbp-A3h]char v42; // [rsp+7Eh] [rbp-A2h]char v43; // [rsp+7Fh] [rbp-A1h]char v44; // [rsp+80h] [rbp-A0h]char v45; // [rsp+81h] [rbp-9Fh]char v46; // [rsp+82h] [rbp-9Eh]char v47; // [rsp+83h] [rbp-9Dh]char v48[32]; // [rsp+90h] [rbp-90h]int v49; // [rsp+B0h] [rbp-70h]char v50; // [rsp+B4h] [rbp-6Ch]char v51; // [rsp+C0h] [rbp-60h]char v52; // [rsp+E7h] [rbp-39h]char v53; // [rsp+100h] [rbp-20h]unsigned __int64 v54; // [rsp+108h] [rbp-18h]v54 = __readfsqword(0x28u);v12 = 73;v13 = 111;v14 = 100;v15 = 108;v16 = 62;v17 = 81;v18 = 110;v19 = 98;v20 = 40;v21 = 111;v22 = 99;v23 = 121;v24 = 127;v25 = 121;v26 = 46;v27 = 105;v28 = 127;v29 = 100;v30 = 96;v31 = 51;v32 = 119;v33 = 125;v34 = 119;v35 = 101;v36 = 107;v37 = 57;v38 = 123;v39 = 105;v40 = 121;v41 = 61;v42 = 126;v43 = 121;v44 = 76;v45 = 64;v46 = 69;v47 = 67;
//v12到v47共36位
//v48占12位,v49为int占4位memset(v48, 0, sizeof(v48));v49 = 0;v50 = 0;sub_4406E0(0LL, v48, 37LL);v50 = 0;if ( sub_424BA0(v48) == 36 ){for ( i = 0; i < (unsigned __int64)sub_424BA0(v48); ++i ){if ( (unsigned __int8)(v48[i] ^ i) != *(&v12 + i) )//有个异或,等下写个脚本逆回去{result = 4294967294LL;goto LABEL_13;}}sub_410CC0("continue!");memset(&v51, 0, 0x40uLL);v53 = 0;sub_4406E0(0LL, &v51, 64LL);v52 = 0;if ( sub_424BA0(&v51) == 39 ){v1 = sub_400E44(&v51);v2 = sub_400E44(v1);v3 = sub_400E44(v2);v4 = sub_400E44(v3);v5 = sub_400E44(v4);v6 = sub_400E44(v5);v7 = sub_400E44(v6);v8 = sub_400E44(v7);v9 = sub_400E44(v8);v10 = sub_400E44(v9);if ( !(unsigned int)sub_400360(v10, off_6CC090) ){sub_410CC0("You found me!!!");sub_410CC0("bye bye~");}result = 0LL;}else{result = 4294967293LL;}}else{result = 0xFFFFFFFFLL;}
LABEL_13:if ( __readfsqword(0x28u) != v54 )sub_444020();return result;
}

先看第一个异或,将数组和其下标异或

v12 = [73, 111, 100, 108, 62, 81, 110, 98, 40, 111, 99, 121, 127, 121, 46, 105, 127, 100, 96, 51, 119, 125, 119, 101, 107, 57, 123, 105, 121, 61, 126, 121,
76, 64, 69, 67]flag = ''
for i in range(len(v12)):flag+=chr(v12[i] ^ i)print(flag)

执行结果

Info:The first four chars are `flag`

好,废话,下一句

看接下来的十个函数
和最后一个比较

sub_400E44()函数比较明显的base64


十次解密后是一个网址

上当哩,表面’you found me’,然后是个假的

回看base64(我也不知道为什么,小本本记下来

unsigned __int64 __fastcall sub_400D35(double a1, double a2, double a3, double a4, double a5, double a6, double a7, double a8)
{double v8; // xmm4_8double v9; // xmm5_8unsigned __int64 result; // raxunsigned __int64 v11; // rt1unsigned int v12; // [rsp+Ch] [rbp-24h]signed int i; // [rsp+10h] [rbp-20h]signed int j; // [rsp+14h] [rbp-1Ch]unsigned int v15; // [rsp+24h] [rbp-Ch]unsigned __int64 v16; // [rsp+28h] [rbp-8h]v16 = __readfsqword(0x28u);v12 = sub_43FD20(0LL) - qword_6CEE38;for ( i = 0; i <= 1233; ++i ){sub_40F790(v12);sub_40FE60();sub_40FE60();v12 = (unsigned __int64)sub_40FE60() ^ 0x98765432;}v15 = v12;if ( ((unsigned __int8)v12 ^ byte_6CC0A0[0]) == 'f' && (HIBYTE(v15) ^ (unsigned __int8)byte_6CC0A3) == 'g' ){for ( j = 0; j <= 24; ++j )sub_410E90((unsigned __int8)(byte_6CC0A0[j] ^ *((_BYTE *)&v15 + j % 4)));}v11 = __readfsqword(0x28u);result = v11 ^ v16;if ( v11 != v16 )sub_444020(a1, a2, a3, a4, v8, v9, a7, a8);return result;
}

v12异或后的f和g,应该是flag了

26行的异或需要用到v15的值,我们可以反向异或得到v15

再利用v15通过for循环异或拿到flag

byte_6CC0A0 = [0x40, 0x35, 0x20, 0x56, 0x5D, 0x18, 0x22, 0x45, 0x17, 0x2F, 0x24, 0x6E, 0x62, 0x3C, 0x27, 0x54, 0x48, 0x6C, 0x24, 0x6E, 0x72, 0x3C, 0x32, 0x45, 0x5B]
v12 = 'flag'
v15 = ''
flag = ''for i in range(4):v15 += chr(byte_6CC0A0[i] ^ ord(v12[i]))for i in range(len(byte_6CC0A0)):flag += chr(byte_6CC0A0[i] ^ ord(v15[i % 4]))print(flag)


flag{Act1ve_Defen5e_Test}

buu-[2019红帽杯]easyRE相关推荐

  1. buu [2019红帽杯]xx1 wp

    首先用exeinfo打开它,发现是无壳的64位程序. 逆向先静后动,因此先用ida 打开: main函数代码如下: int __cdecl main(int argc, const char **ar ...

  2. buu [2019红帽杯]childRE wr

    这个题是有一定难度的,它考的知识点不是特别常见,对于萌新来说. 解题步骤: 1. 下载完附件之后先进行查壳 无壳,我们直接拖进ida64中.通过shift+f12查看字符串 找到输出flag的字符串通 ...

  3. [2019红帽杯]easyRE writeup

    很想挑战难题,发现自己连writeup也看不懂 用64bit的ida打开,查找字符 找到函数: signed __int64 sub_4009C6() {signed __int64 result; ...

  4. [2019红帽杯]easyRE1题解

    迷蒙马背眠,月随残梦天边远,淡淡起茶烟.                                                         --松尾芭蕉 目录 1.查壳 2.拖入64位I ...

  5. BUUCTF-[2019红帽杯]SnakeDig the way

    [2019红帽杯]Snake 题目下载:下载 下载完文件是一个用C#编写的untiy程序,对于这种程序果断用dnSpy查看Assembly-CSharp.dll 找到如下位置 发现这些函数都导入了In ...

  6. 网络安全培训小白入门课,从buu到红帽的图片隐写

    图片隐写是MISC中的一部分,雨笋教育小编给小白从BUU中找到入门MISC之图片隐写,分享给大家 恢复黑白图片 buuoj 静静听这么好听的歌 由于网上wp只给了代码而且函数非常吓人,因此写了一个新手 ...

  7. 2019领航杯write up

    2019领航杯write up 最近参加了领航杯,随便写点队伍做出来的题的write up 贴一下我队友的write up 他写的应该比我的详细 https://blog.csdn.net/qq_39 ...

  8. 2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会

    2019 蓝桥杯省赛 B 组模拟赛(一)蒜厂年会 这题有两种情况 1.最大的和是在0~n-1 2.最大的和越过了首尾 这时候只要用n个数的和 - 0~n-1 的连续的最小和 这是求连续子集最大.最小 ...

  9. 面向萌新的红帽杯2018线上赛wp

    网络安全攻防大赛第二届"红帽杯"网络安全攻防大赛(除了web3 guess id,不会做.没写.) misc2 Not Only Wireshark 下载流量包,wireshark ...

最新文章

  1. 跟我学Spring Cloud(Finchley版)-10-Feign深入
  2. Python3.x和Python2.x的区别
  3. php mysql切换版本5.7_phpstudy 升级 MySQL版本到MySQL5.7
  4. 使用类计算矩形的面积
  5. python滚动条_python中selenium操作下拉滚动条的几种方法汇总
  6. JAVA操作Excel表格
  7. 洛谷4951 地震 bzoj1816扑克牌 洛谷3199最小圈 / 01分数规划
  8. Android 固定式底部上滑抽屉view
  9. ICCV2021 |上交、北理、百度联合研究视频缩放任务中的自条件概率学习
  10. 【华为云技术分享】云小课 | 搬迁本地数据至OBS,多种方式任你选
  11. error: failed to launch '/private/var/mobile/Applications/** busy解决办法
  12. python查成绩_方正教务处自动抢课查成绩(python版)(一)
  13. 吊打本地搜索神器everthing,最快 最强的电脑本地搜索神器!
  14. 拔丝芋头的Java学习日记--Day1
  15. 感恩陪伴,链接未来 | Conflux杭州应用开发运营中心成立
  16. wifi 路由 dns 被劫持 手机 /电脑 打开后弹出一些广告窗口
  17. 面试中有关接口测试和接口自动化的那些事 ~
  18. 为整数线性规划(integer linear programming,ILP)
  19. Codeforces Round 361 div2
  20. 如何快速提高网站权重?

热门文章

  1. 复选框check的选中、不选中设置以及判断是否选中
  2. Linux终端.sh权限不够解决方法
  3. 3D游戏编程homework2
  4. 可以用聚酯树脂将接线板密封接线盒吗?(接线盒灌封胶用哪种树脂)
  5. 【Mysql】Mysql开启日志功能--Linux环境
  6. 目前QQ校友录中的班级创建申请很多
  7. QT-FFMPEG录制屏幕和声音的完整程序(包含音视频同步)
  8. Python面向对象编程-贷款
  9. 计算机vf基本知识,计算机VF程序教学设计法
  10. 如何把网页打包成app