CTF逆向工程入门_1

2023-11-01

这篇文章写给众多参加东华网络安全大赛的小伙伴们~

初次撰写,大佬们发现错误的地方可以指正出来哈~

CTF逆向工程入门_1:http://blog.csdn.net/s1054436218/article/details/71698904

CTF逆向工程入门_2:http://blog.csdn.net/s1054436218/article/details/71809403

Windows下CTF赛题的主要工具下载:

PEID:http://down.52pojie.cn/Tools/PEtools/PEiD 0.95.zip(解压密码:www.52pojie.cn

IDA:   http://down.52pojie.cn/Tools/Disassemblers/IDA_Pro_v6.8_and_Hex-Rays_Decompiler_(ARM,x64,x86)_Green.rar

吾爱破解版OD:    http://down.52pojie.cn/Tools/Debuggers/吾爱破解专用版Ollydbg.rar

.Net reflecter  :  http://www.52pojie.cn/forum.php?mod=viewthread&tid=456893&page=1

dex2jar: http://www.52pojie.cn/thread-398647-1-1.html (请顺便下载一下JD-GUI)

——————————————————————以上工具均取自52破解————————————————————————

下面介绍一下逆向题目的解题方法和以上工具的作用:

首先,当你拿到一道逆向工程题目的时候,你要首先了解你要破解的程序是由什么语言写的,有没有加壳(壳可以理解为对程序的加密使逆向人员难以看到源码)。

PEID的作用就是查看一个PE文件是用什么语言撰写的,当然了,jar和APK这种不属于PE文件(你可以理解为PE文件就是windows下的exe文件和dll文件)。以下是PEID查看文件的效果图:


图一  可以看到4_4.exe是由VC++编写的,并且没有加壳


图2 可以看到CrackMe2.exe这个文件是加过壳的,类型是UPX


图3  可以看到CrackMe_Challenge.exe这个文件是由C#写的,且没有加壳

对于CTF来说,查壳和了解编写语言是十分重要的,首先,不同的语言编写影响到你对工具的选择。例如阿拉神灯这道题(取自实验吧)

题目地址:http://www.shiyanbar.com/ctf/13

题目预览:



图4  阿拉神灯

可以看到这个题目中只需要输入正确的通过密语就可以通过,并且我们提交的flag就是这个通过密语。假如没有PEID进行查壳操作,一般所做会把它看做为C++编写的,并拖入IDA进行静态分析(直接查看软件的汇编代码),理解大致思路后拖入OD进行动态分析(利用汇编代码进行动态调试,同时模拟寄存器和堆栈的情况),如果这道题这样做会比较复杂,利用PEID的话,我们可以看到这个软件是用C#语言撰写的:


图5 利用PEID查看阿拉神灯的属性

我们发现这个软件是由C#编写的,高级语言编程有什么特点呢?如果没有混淆很容易就可以反编译(与反汇编有区别,反汇编是得到汇编语言的源码)出该语言的源代码,.net reflecter是一款优秀的.net反编译软件,我们直接把这个软件拖入到.net reflecter中去:


图6 reflecter中看到的类和方法信息

假如你对C#语言有一定的了解,编写窗口程序时,VS默认的类名是WindowsApplication#.exe(#代表数字),这个类包含了这个窗口的方法和模块,其中可以看到Button1_Click()这个方法,它表示一个监听事件,对按钮进行监听,一旦点击这个按钮,就会触发相应的事件,这也就意味着,这个方法就是我们要重点关注的内容,双击这个方法,就可以看到反编译出的源码:


图7 Button_Click()反编译出的源码

解释一下这个函数的逻辑,首先是一个if-else语句,TextBox1在图6中可以看到是TextBox类型,在C#窗体中,TextBox是一个输入文本,Strings.Trim()这个函数是用来去除字符串开头和结尾的空格的,然后与"zhimakaimen@2011"这个字符串比较,如果相等就输出:“通关密语正确!”,否则就输出“通关密语错误!”。那么这道题到此就结束了,可见我们的通关密语就是“zhimakaimen”。

总结:这道题可能是反编译题目甚至是所有逆向工程题目中最简单的一类了,可能最大的问题在于一些C#语法的问题,所以如果碰到不会的函数或者语法问题,一定要记得问度娘或者google(如果会翻墙的话),千里之行始于足下,以后很少会遇到如此简单的逆向工程题目,即使是反编译中,所以遇到问题一定要多思考多搜索,必定可以学会解决题的能力。

今天先写到这里,改天有时间再补,希望大家能热爱逆向工程这类题目吧~

本文内容由网友自发贡献,版权归原作者所有,本站不承担相应法律责任。如您发现有涉嫌抄袭侵权的内容,请联系:hwhale#tublm.com(使用前将#替换为@)

CTF逆向工程入门_1 的相关文章

  • 2022最新阿里Java面经,转疯了

    写在前面 最近 很多小伙伴出去面试都被问到了Spring问题 关于Spring 细节点很多 面试官也非常喜欢问一些很细节的技术点 所以 在 Spring 专题中 我们尽量把Spring的每个技术细节说清楚 将透彻 概述 自定义组件要想使用S
  • QCustomplot基本使用(一)

    文章目录 简述 下载 使用 简述 QCustomPlot是一个基于Qt C 的图形库 用于绘制和数据可视化 制作漂亮的2D图 曲线图 趋势图 坐标图 柱状图等 并为实时可视化应用程序提供高性能服务 它没有进一步的依赖关系 并有着良好的文档记
  • 环境配置相关

    anaconda pip无法识别 win10安装了Anaconda之后 未设置环境变量 想用pip命令导入第三方库 在anaconda文件夹下打开命令窗口 输入pip install tensorflow 报错如下 pip 无法将 pip
  • NFT数字藏品平台开发——如何快速搭建搭建数字藏品平台

    2021年可以称为元宇宙年 随着元宇宙概念的兴起 好多人都在关心我们是否可以成功构建元宇宙 显然是可以实现的 2022年年初 NFT在国内的热潮兴起 国内也称之为数字藏品 NFT由于具有不可置换 不可分割的特性 很快在国内掀起一热潮 西西弗
  • 线程间的通讯

    一 为什么需要线程通讯 线程是操作系统调度的最小单位 有自己的栈空间 可以按照既定的代码逐步的执行 但是如果每个线程间都孤立的运行 那就会造资源浪费 所以在现实中 我们需要这些线程间可以按照指定的规则共同完成一件任务 所以这些线程之间就需要
  • LoadRunner--并发测试(多用户)

    并发测试 多用户进行并发测试 即在同一时刻同时进行某种操作 1 何时使用集合点 并发测试时使用 2 并发测试的两个条件 1 脚本中加入集合点 在事务开始之前添加集合点 则所有虚拟用户执行到集合点时停止 等待并发 2 控制台中设置集合点策略设
  • TypeScript 枚举(enum)

    枚举定义 枚举通过enum关键字来定义 使用枚举我们可以定义一些有名字的数字常量 enum Direction Up 1 Down Left Right 枚举成员 一个枚举类型可以包含零个或多个枚举成员 枚举成员具有一个数字值 它可以是常数
  • UE4 碰撞射线检测

    默认 TraceTypeQuery1 Visibility 默认 TraceTypeQuery2 Camera void ATraceCharacter traceByChannel 获取该组件的拥有者 AActor MyOwner Get
  • 快速安装Jupyter Notebook主题皮肤并设置教程

    Jupyter Notebook的默认背景主题是白色 字体还不符合自己的眼光 看着实在费眼 也不够酷炫 我就不多赘述了 现在就来给我们的Jupyter notebook画一下妆 让它变得更加炫酷吧 1 安装 Jupyter 主题 通过命令行
  • PHP作业,cookie实现保存浏览历史,代码、运行截图、注释

    1 练习cookie的基本用法 理解cookie的工作原理 2 设计一个商品列表页面 数据从数据库读取 单击每个商品时 在新页面显示商品详情 通过cookie实现保存商品浏览历史 并显示在商品详情页的下方 浏览历史最多保存3条 提交代码截图
  • 两个有序序列的中位数(详解)

    1 实践题目 7 3 两个有序序列的中位数 2 问题描述 在一行中输出两个输入序列的并集序列的中位数 时间复杂度不能大于O logn 3 算法描述 不能粘贴程序 因为时间复杂度不能大于logn 所以把原序列排好序再来找中位数是不可能的了 快
  • float,double 的范围和有效数字怎么算出来的?

    首先说一下 范围是3 4E 38 3 4E 38 可提供7位有效数字 上述这两个量都是近似值 各个编译器不太一样的 下面我就将标准值是怎么定义的 和你说一下 这个比较复杂 建议你找一下IEEE754标准看一下 这个简单说一下吧 在IEEE7
  • 『坚如磐石的 PieCloudDB』:透明加密模块的设计与实现

    导读 2 月 17 日 由中国开源软件推进联盟 PostgreSQL 分会 中科院软件所 CSDN 联合举办的 中国 PostgreSQL 数据库生态大会 盛大召开 拓数派 OpenPie 作为冉冉升起的新一代云原生分布式数据库厂商 受邀参
  • 【C++】IO流

    文章目录 1 C语言的输入与输出 2 流是什么 3 C IO流 3 1 C 标准IO流 3 2 C 文件IO流 3 2 1 二进制读写 3 2 2 文本读写 4 stringstream 字符串流 的简单介绍 5 总结 1 C语言的输入与输
  • SQLite下载、安装与连接

    1 下载SQLite SQLite官网 https www sqlite org download html 根据自己电脑操作系统配置 选择32位或64位下载 一般情况下是64位 总共两个压缩包 或者直接去 https download c
  • 如何打造优秀Web3产品

    近日 我们采访了Mysten Labs的联合创始人兼首席执行官Evan Cheng 探讨了Web3技术对消费者的价值 Web3行业应该如何更好地自我诠释 以及它对产品开发的影响 您曾谈到Web3作为一种所有权实验 这种新技术可能会改变消费者
  • Oracle中的数据导出(4)

    目录 法一 使用SQL plus命令脚本 法二 使用PLSQL Developer工具 前几篇文章描述了如何将Oracle中的数据导出到库外 但是导出的数据结果都是文本文档 这样页面查看不和谐 编辑又略显麻烦 因此这篇文章将描述如何将Ora
  • 116_QT_RCC: Error in ‘file.qrc‘: Cannot find file

    有中文路径或者名字 导致找不到文件 全部改成英文就OK了
  • 数据耦合与控制耦合

    数据耦合 其中一个模块的输出作为另一个模块的输入 那么就存在数据耦合 如 Module A中 int FunA return 1 Module B中 int b FunA 上面两个modules就存在数据耦合 控制耦合 其中一个模块可以控制

随机推荐

  • C语言中对用户输入的数据使用冒泡排序法后输出

    代码 include stdio h include windows h int main 先定义一个数组a 变量i j和临时变量temp 用来存放临时数据 int a 5 i j temp printf Input Five Number
  • 点云双边滤波算法(附 matlab 代码)

    一 原理概述 在二维图像领域中 双边滤波算法是通过考虑中心像素点到邻域像素点的距离 一边 以及像素亮度差值所确定的权重 另一边 来修正当前采样中心点的位置 从而达到平滑滤波效果 同时也会有选择性的剔除部分与当前采样点 差异 太大的相邻采样点
  • ABA问题的解决

    什么是ABA问题 ABA问题是发生在CAS过程当中的下面以一个例子来表示 假如有两个线程A B 两个线程都从主内存中获取了某个对象的值为value1 当进行CAS的时候A首先把value1更换成了value2 因为线程B可能没有CPU资源调
  • PYGAME关于矩形自动移动问题(碰到边界反弹)

    import pygame sys from settings1 import plant game ai setting plant game class moving def init self ai setting screen se
  • mysql学习笔记二(函数)

    函数 一 字符串函数 二 数值函数 三 日期函数 四 流程函数 一 字符串函数 select 函数 参数 注意 substring str start len 函数起始索引为1 二 数值函数 例 select ceil 1 1 gt 2 s
  • 超算云(GPU服务器)环境配置

    最近在用并行超算云GPU服务器 中国国家网格12区 搭建毕设的环境 这里记录一下 首先 超算云服务器的登录可以采用网页版 也可以采用客户端 超算云地址 https cloud paratera com 需要注意的是 并行超算云只提供wind
  • [FPGA IP系列] BRAM IP参数配置与使用示例

    FPGA开发中使用频率非常高的两个IP就是FIFO和BRAM 上一篇文章中已经详细介绍了Vivado FIFO IP 今天我们来聊一聊BRAM IP 本文将详细介绍Vivado中BRAM IP的配置方式和使用技巧 一 BRAM IP核的配置
  • 人工智能革命:从AGI到ASI的道路

    在某种程度上 我们将获得具有人类一般智能的AGI计算机后 只是一群人和计算机平等地生活在一起 哦 实际上并不会 问题是 AGI具有与人类相同的智能和计算能力水平 但仍然具有优于人类的优势 如 硬件 速度 大脑的神经元最大频率大约为200赫兹
  • 数据分析--Python将dataframe格式数据存入clickhouse

    Python将dataframe格式数据存入clickhouse 基于Python实现大批量dataframe格式数据存入clickhouse中 python 一切 基于Python实现大批量dataframe格式数据存入clickhous
  • 信用卡风控——梯度提升树方法Python实现

    本文是一个用户按时还款的预测模型 利用台湾地区一些信用卡客户的信用额度 教育程度 婚姻状况 过去的还款状态 账单等信息对客户进行评分 采用GBDT 梯度提升树 模型对数据进行分类 预测其是否会产生逾期偿还 数据来源于kaggle的一个比赛
  • dispatch_async 与 dispatch_sync

    从字面意思上看 sync 同步 async 异步 并行队列 异步 异步 dispatch async dispatch get global queue DISPATCH QUEUE PRIORITY DEFAULT 0 dispatch
  • strcpy和strdup比较和详解

    strcpy和strdup比较和详解 函数和功能描述 extern char strdup char s 头文件 string h 功能 将串拷贝到新建的位置处 说 明 strdup不是标准的c函数 strdup 在内部调用了malloc
  • matlab中如何表示开方,在matlab里面怎么输入开方号(根号)?9的开方怎么写?...

    答 sqrt 9 nthroot 8 3 人家想求的就是实数根把 不信你试试 8 1 3 和 nthroot 8 3 你就知道区别了 很多人不知道nthroot这个函数 用指数的方法画x的3次方根的图像结果发现x 答 sqrt 9 nthr
  • 说说代码评审

    关注公众号 1024个为什么 及时接收最新推送文章 本文内容 1 代码评审的目的 2 评审准备工作 3 评审过程中容易出问题的点 4 共同成长 近一段时间以来 组内严格实行代码评审制度 参与过多次评审后发现 一次有效的代码评审并不简单 把一
  • ucint核心边缘分析_物联网加速器:边缘计算,万亿芯片新空间

    温馨提示 如需原文档 可在PC端登陆未来智库官网 www vzkoo com 搜索下载本文档 报告概览 什么是边缘计算 边缘计算被定义为 一种新的计算方式 这种模式将计算与存储资源部署在更贴近移动设备或传感器的网络边缘 其核心在于 贴近 终
  • 解决github无法访问的办法

    方法 步骤 1 问题描述 能联网但不能访问github com 2 找到hosts文件 地址 C Windows System32 drivers etc 一般是在这的 3 不要直接在这修改hosts文件 需要将hosts文件复制粘贴到桌面
  • 杨辉三角形(超级简单的Python实现方法)

    杨辉三角形大家都知道 那么在这里就不再介绍了 大家肯定都用C C 实现过杨辉三角形 是把数据存放在了一个二维数组里 那么如何让用Python来实现杨辉三角形呢 我查看了网上的很多方法 都很麻烦 有的还用到了生成器 那我们来看看简单的方法吧
  • 一个完整的项目管理流程

    一个完整的项目管理流程 从一个项目提出到结束 按照ISO9001 2000的项目管理流程 大致有如下步骤 1 产品立项报告 按照公司的管理流程 由公司有关人等都有可能提出 产品立项报告 比如公司老总 市场部门 研发部门 一般是在公司组织的定
  • 字符数组的学习总结

    今天主要讲了两点 一是字符数组的定义 二是字符数组的拷贝 也是重点 一 字符数组的定义 char arr 5 a b c d e char brr 5 a b c 聚合类型 只初始化部分 剩余部分为0 0 char crr a b c d
  • CTF逆向工程入门_1

    这篇文章写给众多参加东华网络安全大赛的小伙伴们 初次撰写 大佬们发现错误的地方可以指正出来哈 CTF逆向工程入门 1 http blog csdn net s1054436218 article details 71698904 CTF逆向