刮开有奖

附件

步骤:

  1. 例行检查,无壳,32位程序
  2. 32位ida载入,shift+f12检索程序里的字符串,看到了一个base64加密的特征字符串,猜想这题用到了base64加密
  3. 从main函数开始看程序

    DialogBoxParam函数百度后得知是根据对话框模板资源创建一个模态的对话框,直接看函数主体
  1. if ( a2 == 272 )
  2. return 1;
  3. if ( a2 != 273 )
  4. return 0;
  5. if ( (_WORD)a3 == 1001 ) // a3=1001
  6. {
  7. memset(&String, 0, 0xFFFFu); // memset函数将string初始化置0
  8. GetDlgItemTextA(hDlg, 1000, &String, 0xFFFF);
  9. if ( strlen(&String) == 8 ) // string的长度为8
  10. {
  11. v7 = 90;
  12. v8 = 74;
  13. v9 = 83;
  14. v10 = 69;
  15. v11 = 67;
  16. v12 = 97;
  17. v13 = 78;
  18. v14 = 72;
  19. v15 = 51;
  20. v16 = 110;
  21. v17 = 103;
  22. sub_4010F0((int)&v7, 0, 10); // sub_4010F0是一个排序 升序的算法 ,
  23. // 对v7数组进行处理后,v7的数据是
  24. // 51 67 69 72 74 78 83 90 97 103 110
  25. //
  26. memset(&v26, 0, 0xFFFFu);
  27. v26 = string[5];
  28. v28 = string[7];
  29. v27 = string[6];
  30. v4 = sub_401000((int)&v26, strlen(&v26)); // sub_401000是base64加密算法,对v26进行了base64加密后复制给v4
  31. memset(&v26, 0, 0xFFFFu); // v26清0
  32. v27 = string[3];
  33. v26 = string[2];
  34. v28 = string[4];
  35. v5 = sub_401000((int)&v26, strlen(&v26));
  36. if ( String == v7 + 34 // string[0]='U'
  37. && string[1] == v11 // string[1]='J'
  38. && 4 * string[2] - 141 == 3 * v9 // string[2]='W'
  39. && string[3] / 4 == 2 * (v14 / 9) // string[3]='P'
  40. && !strcmp(v4, "ak1w") // V4=ak1w
  41. && !strcmp(
  42. v5,
  43. "V1Ax") )
  44. { // v5=V1Ax
  45. MessageBoxA(hDlg, "U g3t 1T!", "@_@", 0);
  46. }
  47. }
  48. return 0;
  49. }
  50. if ( (_WORD)a3 != 1 && (_WORD)a3 != 2 )
  51. return 0;
  52. EndDialog(hDlg, (unsigned __int16)a3);
  53. return 1;
  54. }

代码的大部分分析都写在注释里了,剩下的就是两个base64解密,用python3自带的base64库解密一下

根据这段代码,将string字符串理一下得到flag

flag{UJWP1jMp}

[BUUCTF]REVERSE——刮开有奖的更多相关文章

  1. BUUOJ reverse 刮开有奖

    刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 拖到id ...

  2. [BUUOJ]刮开有奖reverse

    刮开有奖 这是一个赌博程序,快去赚钱吧!!!!!!!!!!!!!!!!!!!!!!!!!!!(在编辑框中的输入值,即为flag,提交即可) 注意:得到的 flag 请包上 flag{} 提交 1.查壳 ...

  3. BUUCTF 刮开有奖 WriteUp

    题目链接 https://buuoj.cn/challenges#%E5%88%AE%E5%BC%80%E6%9C%89%E5%A5%96 题解 用IDA打开,按F5反编译,双击进入DialogFun ...

  4. buu 刮开有奖

    一.查壳, 二.拖入ida,分析 直接搜字符串完全没头绪,在看了大佬的wp才找到了,关键函数. 明显那个String就是我们要求的flag,要开始分析程序. 字符串长度为8,同时这个函数对字符串进行了 ...

  5. [BUUCTF]REVERSE——[GWCTF 2019]pyre

    [GWCTF 2019]pyre 附件 步骤: 1.附件是pyc文件,用python打不开,百度后得知用python反编译工具打开,分享一个python反编译在线网站 反编译后是这段代码 #!/usr ...

  6. BUUCTF--刮开有奖

    文件链接:https://buuoj.cn/files/abe6e2152471e1e1cbd9e5c0cae95d29/8f80610b-8701-4c7f-ad60-63861a558a5b.ex ...

  7. [BUUCTF]REVERSE——[ACTF新生赛2020]Oruga

    [ACTF新生赛2020]Oruga 附件 步骤: 例行检查,64位程序,无壳 64位ida载入,检索字符串,根据提示来到关键函数 14行~18行就是让字符串的前5位是 actf{ ,sub_78A( ...

  8. [BUUCTF]REVERSE——firmware

    firmware 附件 步骤: 检查文件没有看出什么,ida载入一堆乱码,看了其他师傅的wp才知道要先binwalk对文件进行提取 120200.squashfs这是一个linux的压缩文件 我们需要 ...

  9. [BUUCTF]REVERSE——[WUSTCTF2020]Cr0ssfun

    [WUSTCTF2020]Cr0ssfun 附件 步骤: 例行检查,无壳儿,64位程序,直接ida载入,检索程序里的字符串,根据提示跳转 看一下check()函数 内嵌了几个检查的函数,简单粗暴,整理 ...

随机推荐

  1. [atAGC052F]Tree Vertices XOR

    结论 注意到如果$x$周围有偶数个1,对$x$操作显然不会改变$a_{x}$,因此不妨强制操作的点周围要有奇数个1,不难发现此时恰好会改变该点,即令$a_{x}=a_{x}\oplus 1$ 称$\{ ...

  2. [bzoj2743]采花

    预处理出每一个点下一个相同颜色的位置,记为next,然后将询问按左端点排序后不断右移左指针,设要删除i位置,就令f[next[next[i]]+1,同时还要删除原来的标记,即令f[next[i]]-1 ...

  3. Go语言核心36讲(Go语言实战与应用十一)--学习笔记

    33 | 临时对象池sync.Pool 到目前为止,我们已经一起学习了 Go 语言标准库中最重要的那几个同步工具,这包括非常经典的互斥锁.读写锁.条件变量和原子操作,以及 Go 语言特有的几个同步工具 ...

  4. Spring扩展点-v5.3.9

    Spring 扩展点 **本人博客网站 **IT小神 www.itxiaoshen.com 官网地址****:https://spring.io/projects/spring-framework T ...

  5. 【JAVA】编程(6)--- 应用IO流拷贝文件夹(内含多个文件)到指定位置

    此程序应用了: File 类,及其常用方法: FileInputStream,FileOutputStream类及其常用方法: 递归思维: package com.bjpowernode.javase ...

  6. BehaviorTree.CPP行为树BT的装饰器节点(五)

    Decorators 装饰器是只能有一个子项的节点. 由装饰者来决定是否,何时以及对子节点进行tick. InverterNode tick子节点一次,如果子节点失败则返回SUCCESS,如果孩子成功 ...

  7. js offset系列属性

    offsetParent:返回该元素有定位的父级,如果父级都没有定位则返回body offsetTop:返回元素相对父级(带有定位的父级)上方的偏移 offsetLeft:返回元素相对父级(带有定位的 ...

  8. 洛谷 P2257 - YY的GCD(莫比乌斯反演+整除分块)

    题面传送门 题意: 求满足 \(1 \leq x \leq n\),\(1 \leq y \leq m\),\(\gcd(x,y)\) 为质数的数对 \((x,y)\) 的个数. \(T\) 组询问. ...

  9. Tarjan 的一些板子

    圆方树(会在两圆点间建方点): void tarjan(int u) { low[u] = dfn[u] = ++dfc, stk[++top] = u, num++; for (int v : G[ ...

  10. 使用flock命令查看nas存储是否支持文件锁

    上锁 文件锁有两种 shared lock 共享锁 exclusive lock 排他锁 当文件被上了共享锁之后,其他进程可以继续为此文件加共享锁,但此文件不能被加排他锁,此文件会有一个共享锁计数,加 ...