seven  hctf2018

这是一个驱动文件

ida载入,查找字符串

根据字符串来到函数:sub_1400012F0

  1. __int64 __fastcall sub_1400012F0(__int64 a1, __int64 a2)
  2. {
  3. __int64 v2; // rbx
  4. _KEYBOARD_INPUT_DATA *KEYBOARD_input; // rsi
  5. unsigned __int64 v4; // rdx
  6. int index; // ecx
  7. __int16 *k_ipt; // rdi
  8. __int64 v7; // rbp
  9. __int16 k; // dx
  10. char next_c; // dl
  11. CHAR *v10; // rcx
  12.  
  13. v2 = a2;
  14. if ( *(_DWORD *)(a2 + 48) >= 0 )
  15. {
  16. KEYBOARD_input = *(_KEYBOARD_INPUT_DATA **)(a2 + 24);
  17. v4 = (unsigned __int64)(*(unsigned __int64 *)(a2 + 56) * (unsigned __int128)0xAAAAAAAAAAAAAAABui64 >> 64) >> 3;
  18. if ( (_DWORD)v4 )
  19. {
  20. index = dword_1400030E4;
  21. k_ipt = (__int16 *)&KEYBOARD_input->MakeCode;
  22. v7 = (unsigned int)v4;
  23. while ( KEYBOARD_input->Flags )
  24. {
  25. LABEL_30:
  26. k_ipt += 6;
  27. if ( !--v7 )
  28. goto LABEL_31;
  29. }
  30. aO[index] = '.';
  31. k = *k_ipt;
  32. if ( *k_ipt == 17 )//对应按键w
  33. {
  34. if ( index & 0xFFFFFFF0 ) // 大于等于16
  35. {
  36. index -= 16; // 向上移动
  37. goto LABEL_13;
  38. }
  39. index += 208;
  40. dword_1400030E4 = index;
  41. }
  42. if ( k != 31 )//对应按键s
  43. goto LABEL_14;
  44. if ( (index & 0xFFFFFFF0) == 208 )
  45. index -= 208;
  46. else
  47. index += 16; // 向下移动
  48. LABEL_13:
  49. dword_1400030E4 = index;
  50. LABEL_14:
  51. if ( k == 30 )//对应按键a
  52. {
  53. if ( index & 0xF )
  54. --index; // 向左
  55. else
  56. index += 15; // 最右端0位置时,+15,向左移动到最右端
  57. dword_1400030E4 = index;
  58. }
  59. if ( k == 32 )//对应按键d
  60. {
  61. if ( (index & 0xF) == 15 ) // 右,一行0-15,16个,在最右端时,移到0位置
  62. index -= 15;
  63. else
  64. ++index; // 右
  65. dword_1400030E4 = index;
  66. }
  67. next_c = aO[index];
  68. if ( next_c == '*' )
  69. {
  70. v10 = "-1s\n";
  71. }
  72. else
  73. {
  74. if ( next_c != '7' )
  75. {
  76. LABEL_29:
  77. aO[index] = 'o';
  78. goto LABEL_30;
  79. }
  80. v10 = "The input is the flag!\n";
  81. }
  82. dword_1400030E4 = 16;
  83. DbgPrint(v10);
  84. index = dword_1400030E4;
  85. goto LABEL_29;
  86. }
  87. }
  88. LABEL_31:
  89. if ( *(_BYTE *)(v2 + 65) )
  90. *(_BYTE *)(*(_QWORD *)(v2 + 184) + 3i64) |= 1u;
  91. return *(unsigned int *)(v2 + 48);
  92. }

简单的迷宫题,输入是通过KEYBOARD_INPUT_DATA结构体,其第二项表示按键的扫描码

17-->w; 31-->s; 30-->a; 32-->d

分别对应上,下,左,右。

迷宫:

对应输入:ddddddddddddddssaasasasasasasasasas

hctf{ddddddddddddddssaasasasasasasasasas}

攻防世界 reverse seven的更多相关文章

  1. 攻防世界 reverse 进阶 10 Reverse Box

    攻防世界中此题信息未给全,题目来源为[TWCTF-2016:Reverse] Reverse Box 网上有很多wp是使用gdb脚本,这里找到一个本地还原关键算法,然后再爆破的 https://www ...

  2. 攻防世界 reverse evil

    这是2017 ddctf的一道逆向题, 挑战:<恶意软件分析> 赛题背景: 员工小A收到了一封邮件,带一个文档附件,小A随手打开了附件.随后IT部门发现小A的电脑发出了异常网络访问请求,进 ...

  3. 攻防世界 reverse tt3441810

    tt3441810 tinyctf-2014 附件给了一堆数据,将十六进制数据部分提取出来, flag应该隐藏在里面,(这算啥子re,) 保留可显示字符,然后去除填充字符(找规律 0.0) 处理脚本: ...

  4. 攻防世界 reverse 进阶 APK-逆向2

    APK-逆向2 Hack-you-2014 (看名以为是安卓逆向呢0.0,搞错了吧) 程序是.net写的,直接祭出神器dnSpy 1 using System; 2 using System.Diag ...

  5. 攻防世界 reverse Windows_Reverse2

    Windows_Reverse2   2019_DDCTF 查壳: 寻找oep-->dump-->iat修复   便可成功脱壳 int __cdecl main(int argc, con ...

  6. 攻防世界 reverse BabyXor

    BabyXor     2019_UNCTF 查壳 脱壳 dump 脱壳后 IDA静态分析 int main_0() { void *v0; // eax int v1; // ST5C_4 char ...

  7. 攻防世界 reverse parallel-comparator-200

    parallel-comparator-200 school-ctf-winter-2015 https://github.com/ctfs/write-ups-2015/tree/master/sc ...

  8. 攻防世界 reverse 进阶 8-The_Maya_Society Hack.lu-2017

    8.The_Maya_Society Hack.lu-2017 在linux下将时间调整为2012-12-21,运行即可得到flag. 下面进行分析 1 signed __int64 __fastca ...

  9. 攻防世界 reverse easy_Maze

    easy_Maze 从题目可得知是简单的迷宫问题 int __cdecl main(int argc, const char **argv, const char **envp) { __int64 ...

随机推荐

  1. iPad Pro 涂鸦绘画实用技巧

    iPad Pro 涂鸦绘画实用技巧 绘画,涂鸦,简笔画 pre-requirement iPad Pro Apple Pencil 实用技巧 zoom in, zoom out 应用矢量的特性,灵活缩 ...

  2. Flutter App 真机调试

    Flutter App 真机调试 Deploy to iOS devices https://flutter.dev/docs/get-started/install/macos#deploy-to- ...

  3. Base 64 & URL & blob & FileReader & createObjectURL

    Base 64 & URL & blob & FileReader & createObjectURL /** * let blob = item.getAsFile( ...

  4. server sent events

    server sent events server push https://html5doctor.com/server-sent-events/ https://developer.mozilla ...

  5. SVG & Sprite & symbol & use

    SVG & Sprite & symbol & use https://www.zhangxinxu.com/sp/svgo/ https://www.zhangxinxu.c ...

  6. React Hooks & Context API

    React Hooks & Context API responsive website https://reactjs.org/docs/hooks-reference.html https ...

  7. elasticsearch如何设计索引

    本文为博客园作者所写: 一寸HUI,个人博客地址:https://www.cnblogs.com/zsql/ 最近在做es相关的工作,所以记录下自己的一些想法,可能很多方面不会很全面,但是基本都是经过 ...

  8. 开源OA办公平台功能介绍:应用市场-固定资产管理(一)功能设计

    概述 应用市场-固定资产管理,是用来维护管理企业固定资产的一个功能.其整个功能包括对固定资产的台账信息.领用.调拨.借用.维修.盘点.报废等一整个生命周期的动态管理过程.力求客户安装就可以使用. 本应 ...

  9. SpringBoot整合Mongodb4.0

    本品文章只做学习使用: 安装mongodb推荐博客:https://www.jianshu.com/p/a75e26e5f635 1:如何在外网环境下开放mongodb 服务器版本:centos7.6 ...

  10. Redis持久化机制 RDB和AOF的区别

    一.简单介绍 Redis中的持久化机制是一种当数据库发生宕机.断电.软件崩溃等,数据库中的数据无法再使用或者被破坏的情况下,如何恢复数据的方法. Redis中共有两种持久化机制 RDB(Redis D ...