首页 > 其他分享 >中国顶级CTF竞赛网络安全大赛--2022网鼎杯re2解题思路来了,快来围观!

中国顶级CTF竞赛网络安全大赛--2022网鼎杯re2解题思路来了,快来围观!

时间:2022-10-20 19:00:20浏览次数:54  
标签:F8 20 函数 -- 跟进去 flag re2 CTF call

作者:黑蛋

一、脱壳 PEID查不出来,用了die,显示是UPX3.96的壳,用了脱壳机,脱不了,只能手动脱壳,拖入x64dbg,F9运行到程序领空,很明显的特征,push:

1.png

无脑使用ESP定律大法,对ESP下硬件访问断点:

2.png

F9运行,在pop处停下: 3.png

F4运行到下面第一个jmp,F8,进去又是一个jmp,继续F8,到达OEP:

4.png

使用x64dbg插件dump:

5.png

第一步先dump保存,然后第二步,第三步,第四步选择刚才dump保存的程序:

6.png

脱壳成功,但是运行一闪而过,这是动态基址搞的鬼,手法很多,有脱壳机有禁用动态基址选项,这里我们直接把程序拖入010Editor修改标志位,改为20即关闭动态基址,保存退出:

7.png

可正常运行,接下来分析算法。

二、算法分析 1、进入主函数(很明显是vs写的程序,根据步骤找主函数就行) F9进入程序领空,进入第一个call:

8.png

再进入第二个call:

9.png

找特征码,进入标记的call:

10.png

进入第四个call: 11.png 走过一个跳转,进入主函数: 12.png

2.动态调试 标记的函数是输入flag后第一个call,并且传参进去,所以这里可以跟进去看一看: 13.png

随便输入一部分数,回车并跟进标记函数: 14.png 15.png

从下面可以看到这边传入我们输入flag,是关键函数,跟进去: 16.png

分析函数: 17.png 可以猜到flag的长度为20,如果不是20,直接到打印错误的地方,继续向下看,下面对字符串进行第一次处理。亦或66,继续看下去,又是一个比较长度函数,之后没什么了,这个函数结束,直到返回主函数: 18.png 下面就是打印wrong,长度为20会跳过这个打印: 19.png 我们看当前标记的函数,传入参数是我们flag亦或66之后的字符串,绝对关键函数,跟进去,F8一直运行:

20.png

我们发现又对字符串处理,先+A,再亦或50:

21.png

继续运行发现关键函数,F8走过直接失败,重新到这个位置,发现传入处理后的第一个字符,跟进去: 22.png 我们发现一个cmp,和我们字符串第一个字母比较: 23.png 查看另一个地址的值: 23.png 继续跟,会发现直接退出,所以这里是比较函数,直接写脚本:

#include

int main() { unsigned int dword_14001D000[20] = { 0x0000004B, 0x00000048, 0x00000079, 0x00000013, 0x00000045, 0x00000030, 0x0000005C, 0x00000049, 0x0000005A, 0x00000079, 0x00000013, 0x00000070, 0x0000006D, 0x00000078, 0x00000013, 0x0000006F, 0x00000048, 0x0000005D, 0x00000064, 0x00000064 };

char flag[21] = { 0 };

for (int i = 0; i < 20; i++)
{
   flag[i] = ((dword_14001D000[i] ^ 0x50) - 10) ^ 0x66;
}

printf(flag);

return 0;

} 24.png

flag:why_m0dify_pUx_SheLL

标签:F8,20,函数,--,跟进去,flag,re2,CTF,call
From: https://blog.51cto.com/u_15452079/5780461

相关文章

  • 8-jenkins windows环境下配置自动构建启动项目(springboot,gitlab,maven)
    由于远程办公原因,所以我们的服务必须在一个内网,所以就想到使用jenkins来实现提交后自动构建项目启动,不需要再登录到内网操作。jenkins的安装很简单,网上一大片,然后gitlab......
  • 青少年训练平台--easyupload
    第一步:先看题目题目描述:简单的上传第二步:获取flag这里先看他的源码<divid="upload_panel"><ol><li><h3>Welcome</h3>......
  • 【Python】第3章-13 字符串替换
    本题要求编写程序,将给定字符串中的大写英文字母按以下对应规则替换:原字母 对应字母A ZB YC XD W… …X CY BZ A输入格式:输入在一行中给出一个不超过80个字符、......
  • failed (13: Permission denied) while reading upstream解决方法
    2022/10/2018:38:56[crit]67121#0:*16996open()"/app/openresty/nginx/proxy_temp/8/03/0000000038"failed(13:Permissiondenied)whilereadingupstream,cli......
  • hash和history
    hash和history路由的区别在了解路由模式前,我们先看下什么是单页面应用,vue-router的实现原理是怎样的,这样更容易理解路由。SPA与前端路由SPA(单页面应用,全程为:Single-......
  • .Net Core WebApi 控制器自动创建文件夹上传图片
    ///<summary>///异步图片或文件上传///</summary>///<paramname="formFile"></param>///<returns></returns>[Http......
  • 2022-10.md
    2022-10.md新建模板小书匠一、面试准备(去节奏把控-慢)1.业态业态分析:业态就是指零售店卖给谁、卖什么和如何卖的具体经营形式。我们的saas服务主要用户是餐饮行......
  • 熟悉编程语言
    TIOBE开发语言排行榜编程泛型-命令式:python、Java等-面向过程:C、COBOL、Fortran-面向对象:C++、Java、PHP、python、go、Objective-C、C#-声明式:SQL等-函数式:H......
  • 双亲委派模型
    双亲委派目的好处:主要是为了安全性,避免用户自己写的类动态替换了Java的核心类,比如自己写了String替换了Java的String同时避免了类的重复加载,JVM对于类的区分,不仅仅根据......
  • 第三次实验
    task5:#include<iostream>#include<vector>#include<string>#include"5.1.h"usingnamespacestd;intmain(){cout<<"录入信息:"<<endl;cout<<"昵称"<<"......