首页 > 其他分享 >hackme 【攻防世界】Reverse

hackme 【攻防世界】Reverse

时间:2024-03-24 14:55:51浏览次数:16  
标签:攻防 Reverse v24 int v10 rbp input rsp hackme

题目:


 

丢到PE里, 无壳,64bit

丢到IDA里,shift+F12,查看字符串,找到一个很可疑的字符串

跟进去看看,找到目标函数,我另外搜索了一下,没有mian函数,sub_400F8E应该就是解题的关键函数

有部分变量我修改的名字,为了方便理解

 1 __int64 __fastcall sub_400F8E(__int64 a1, int a2, int a3, int a4, int a5, int a6)
 2 {
 3   int v6; // edx
 4   int v7; // ecx
 5   int v8; // r8d
 6   int v9; // r9d
 7   int v10; // ecx
 8   int v11; // r8d
 9   int v12; // r9d
10   char v14; // [rsp+0h] [rbp-C0h]
11   char v15; // [rsp+0h] [rbp-C0h]
12   char input[136]; // [rsp+10h] [rbp-B0h] BYREF
13   int v17; // [rsp+98h] [rbp-28h]
14   char v18; // [rsp+9Fh] [rbp-21h]
15   int v19; // [rsp+A0h] [rbp-20h]
16   unsigned __int8 input_1; // [rsp+A6h] [rbp-1Ah]
17   char key; // [rsp+A7h] [rbp-19h]
18   int v22; // [rsp+A8h] [rbp-18h]
19   int v23; // [rsp+ACh] [rbp-14h]
20   int v24; // [rsp+B0h] [rbp-10h]
21   int v25; // [rsp+B4h] [rbp-Ch]
22   _BOOL4 bool_type; // [rsp+B8h] [rbp-8h]
23   int i; // [rsp+BCh] [rbp-4h]
24 
25   sub_407470((unsigned int)"Give me the password: ", a2, a3, a4, a5, a6, a2);
26   sub_4075A0((unsigned int)"%s", (unsigned int)input, v6, v7, v8, v9, v14);
27   for ( i = 0; input[i]; ++i )
28     ;
29   bool_type = i == 22;                          // 下面要打印Congras,那if里面的bool_type必须为1
30                                                 // i=22
31   v25 = 10;
32   do
33   {
34     v10 = (int)sub_406D90() % 22;               // v10的范围0~21
35     v22 = v10;
36     v24 = 0;
37     key = byte_6B4270[v10];
38     input_1 = input[v10];
39     v19 = v10 + 1;
40     v23 = 0;
41     while ( v23 < v19 )
42     {
43       ++v23;
44       v24 = 1828812941 * v24 + 12345;
45     }
46     v18 = v24 ^ input_1;
47     if ( key != ((unsigned __int8)v24 ^ input_1) )
48       bool_type = 0;
49     --v25;
50   }
51   while ( v25 );
52   if ( bool_type )
53     v17 = sub_407470((unsigned int)"Congras\n", (unsigned int)input, v24, v10, v11, v12, v15);
54   else
55     v17 = sub_407470((unsigned int)"Oh no!\n", (unsigned int)input, v24, v10, v11, v12, v15);
56   return 0LL;
57 }
  • sub_407470((unsigned int)"Give me the password: ", a2, a3, a4, a5, a6, a2); sub_4075A0((unsigned int)"%s", (unsigned int)input, v6, v7, v8, v9, v14);我一开始猜测是输出输入用的,预防万一后面查了资料,就是根据C语言函数可变参数的特性反汇编出来的,就是普通输出输入函数
    至于为什么五个变量就第一个我修改了名称————是看后面代码,通过个人理解,推出是输入量。
  • v10 = (int)sub_406D90() % 22;可以得知v10的范围是0~21,`sub_406D90`点进去跟踪,我没有得到什么有用的东西,大佬说`v10`是一个随机数,范围也的确是0 ~ 21,但是不是顺序来取值的——就算不知道`v10`的具体数值,但是肯定是0~21中的一个,写逆向脚本的时候遍历也是可以得出的。

  • key = byte_6B4270[v10];双击byte_6B4270得到一串东西,应该是关键字符串了,结合上面可以理解为:`v10`是一个随机的下标,根据下标从`byte_6B4270`中随机抽取一个放到`key`里面
  • input_1 = input[v10];在输入中随机抽取一个放到`input_1`里面,方便后面的异或操作
  • while ( v23 < v19 ){++v23;v24 = 1828812941 * v24 + 12345;}v18 = v24 ^ input_1这就是变换的关键部分了。经过加法乘法异或一系列操作,得到`v18`

  • if ( key != ((unsigned __int8)v24 ^ input_1) )这个if的作用就是检查变换后得出的`v18`与`key`是否相等

解题脚本

 1 key = [95,242,94,139,78,14,163,170,199,147,129,61,95,116,163,9,145,43,73,40,147,103]
 2 flag = ""
 3 
 4 for j in range(22):
 5     v23 = 0
 6     v24 = 0
 7     v19 = j + 1
 8     while v23 < v19:
 9         v23 += 1
10         v24 = 1828812941 * v24 + 12345
11     flag += chr((v24 ^ key[j])&0xff)
12 
13 print(flag)

flag: flag{d826e6926098ef46} 

 

标签:攻防,Reverse,v24,int,v10,rbp,input,rsp,hackme
From: https://www.cnblogs.com/demo41/p/18092427

相关文章

  • BABYRE 【攻防世界】 Reverse
    题目 丢进ExeinfoPE里面,得到64bit,无壳丢进IDApro(x64)里面,找到主函数 代码中有一个花指令:*(unsignedint(__fastcall**)(char*))judge)(input) unsignedint(__fastcall**)(char*):这是一个函数指针类型,指向一个接受char*类型参数并返回unsignedint类型的函......
  • 文件上传一-WEB攻防-PHP应用&文件上传&函数缺陷&条件竞争&二次渲染&黑白名单&JS绕过9
    演示案例:PHP-原生态-文件上传-前后端验证PHP-原生态-文件上传-类型文件头验证PHP-原生态-文件上传-后缀黑白名单验证PHP-原生态-文件上传-解析配置&二次渲染PHP-原生态-文件上传-逻辑缺陷&函数缺陷#学习前必读:1、课前一定要明白:无文件解析安全问题上,格式解析是一......
  • 攻防世界Ditf解题过程
    下载下来发现是一张照片,使用其他图片软件进行操作无果,放进虚拟机里面看一下输入binwalk-ee02c9de40be145dba6baa80ef1d270ba.png分离图片将分离出的文件复制到外面本机上,发现三个文件想打开这个压缩文件查看一下,结果发现需要密码,看来还是要查看一下图片,看是否能找到密......
  • 攻防世界乱刷
    攻防世界乱刷题目题目地址:[polyre](https://adworld.xctf.org.cn/challenges/list?rwNmOdr=1710932754481)总结:控制流平坦换的题需要将程序还原,增强程序的可读性,程序中存在永真(或永假)指令时可以利用idapython将条件跳转(jz,jnz)修改为直接跳转(jmp),进一步增强可读性。......
  • 31.网络游戏逆向分析与漏洞攻防-网络通信数据包分析工具-其它消息的实现与使用优化
    免责声明:内容仅供学习参考,请合法利用知识,禁止进行违法犯罪活动!如果看不懂、不知道现在做的什么,那就跟着做完看效果内容参考于:易道云信息技术研究院VIP课上一个内容:30.数据搜索功能码云地址(master分支):https://gitee.com/dye_your_fingers/titan码云版本号:6cd3ae3d3bf803e1......
  • 攻防实战 | 记一次nacos到接管阿里云&百万数据泄露
    在某次攻防当中,通过打点发现了一台nacos,经过测试之后发现可以通过弱口令进入到后台,可以查看其中的配置信息通过翻看配置文件,发现腾讯云的AK,SK泄露,以及数据库的账号密码。操作不就来了么,直接上云!利用CF工具加上之前的AK,SK配置信息,创建腾讯云控制台账号密码,登录后直接上云......
  • 红队攻防之exe文件签名免杀
    达则兼善天下,穷则独善其身1、生成cobaltstrikebin文件,选择raw选项。2、使用cobaltstrike分离免杀工具生成loader.exe文件。3、使用UPX对生成的exe文件进行加壳,加壳前后对比文件的大小。4、对loader.exe进行制作并签发证书-数字签名。(1)、检查程序中是否存证书。......
  • tryhackme-Expose(暴露)
    信息收集使用nmap对靶机进行端口扫描这里我在枚举21端口和1883端口并没有获得任何信息,接着访问1337端口进行信息收集什么都没有,接着进行目录扫描这里由于我的wordlists的问题,并没有扫描到想要的目录,不过也扫描到了一些常规的目录通过参考wp,得到目录名为admin_101,其实在/a......
  • 零基础自学网络安全 / 网络渗透攻防路线学习方法【建议收藏】
    学前感言:1.这是一条坚持的道路,三分钟的热情可以放弃往下看了.2.多练多想,不要离开了教程什么都不会了.最好看完教程自己独立完成技术方面的开发.3.有时多google,baidu,我们往往都遇不到好心的大神,谁会无聊天天给你做解答.4.遇到实在搞不懂的,可以先放放,以后再来解决.......
  • tryhackme-Valley(古)
    信息收集首先对靶机进行端口扫描占时扫描到开放端口22和80端口,访问80端口有两个按钮,一个按钮是展示的照片,一个按钮是照片的价格,这里透漏了一些个人信息,例如用户名可能为Valley,他的公司是premire自习观察url得到两个目录pricing和gallery,访问查看访问note.txt并没有......