实验室分逆向方向后一周作业

一,五道BUUCTF
1.
直接将exe文件拖入ida获得flag

2.reverse1

下载文件获得exe后
拖入ida文件没有得到信息
ctrl+f搜索整体字符,找到一个“flag wrong”的字符
对其就行交叉引用

查看伪代码,发现有if判断语句

发现string2是

要求将o都变为0
所以结果应该是


 

3.reverse2



和上题一样分析伪代码

进行替换
得到答案flag{hack1ng_fo1_fun}

4.内涵的软件

 

IDA打开。
找到_main_0函数,F5反编译
flag{49d3c93df25caad81232130f3d2ebfad}
 

5.新年快乐

这是32位,而且有壳

flag{HappyNewYear!


 

二,了解编码和加密算法

一、编码 (Encoding)

编码是将信息从一种形式转换为另一种形式的过程,目的是确保数据能被特定系统正确传输或存储,通常不涉及保密性。

  1. ASCII编码
    将字符映射为数字,例如:

    • 'A' → 十进制 65 → 二进制 01000001
    • 数学表示:$c \in \text{字符集} \mapsto n \in [0, 255]$
  2. Base64编码
    将二进制数据转换为可打印字符(A-Z, a-z, 0-9, +, /),常用于邮件或网页传输。

    • 原理:每3字节(24位)分为4组6位数据,映射为64个字符。
    • 示例:二进制 01001101 01100001 01101110 → "TWFu"

二、加密算法 (Encryption)

加密通过数学变换使数据不可读,保护机密性,需密钥才能还原。

  1. 对称加密(如AES)

    • 加密与解密使用相同密钥
    • 核心操作:字节替换(SubBytes)、行移位(ShiftRows)、列混淆(MixColumns)、轮密钥加(AddRoundKey)。
    • 安全性依赖密钥长度(128/256位)。
  2. 非对称加密(如RSA)

    • 使用公钥加密、私钥解密
    • 数学基础:大数分解难题。
    • 加密过程:
      $$c \equiv m^e \pmod{n}$$
      解密:
      $$m \equiv c^d \pmod{n}$$
      其中 $(n, e)$ 为公钥,$d$ 为私钥。

三,了解壳(什么是加密壳,什么是压缩壳)

加密壳与压缩壳详解

在软件保护领域,"壳"(Shell)指包裹在原始程序外层的代码层,主要分为加密壳和压缩壳两类:

1. 压缩壳(Compression Shell)
  • 核心功能:通过算法减小程序体积
  • 常见工具:UPX, ASPack
  • 工作原理:
    1. 原始程序被压缩存储
    2. 运行时由壳代码动态解压到内存
    3. 执行解压后的原始代码
  • 特征方程: $$ V_{\text{压缩后}} = f(V_{\text{原始}}, \eta) $$ 其中$\eta$表示压缩率
  • 优势:
    • 减少磁盘占用
    • 加速网络传输
  • 局限性:
    • 无实质保护作用
    • 易被自动脱壳工具处理
2. 加密壳(Encryption Shell)
  • 核心功能:防止逆向分析与非法修改
  • 常见工具:Themida, VMProtect
  • 工作原理:
    1. 原始代码被加密/混淆
    2. 运行时动态解密/反混淆
    3. 配合反调试技术(如$ \text{IsDebuggerPresent} $检测)
  • 保护机制: $$ P_{\text{安全}} = g(\text{加密强度}, \text{混淆复杂度}, \text{反调试层数}) $$
  • 典型技术:
    • 代码虚拟化(将指令转为自定义字节码)
    • 多态加密(每次加壳产生不同指令)
    • 完整性校验($ \text{CRC32} $校验)
  • 应用场景:
    • 商业软件授权保护
    • 游戏反外挂系统
    • 敏感算法保护

03-26
### 逆向工程与反编译概述 逆向工程是一种通过对软件的目标代码进行析,将其转化为更高级别的表示形式的过程。这一过程通常用于研究现有系统的内部结构、功能以及实现细节。在Java和Android领域,反编译工具被广泛应用于逆向工程中。 #### Java逆向工程中的Jad反编译工具 Jad是一款经典的Java反编译工具,能够将`.class`字节码文件转换为可读的`.java`源代码[^1]。虽然它可能无法完全恢复原始源代码,但它提供了足够的信息来帮助开发者理解已编译的Java程序逻辑。Jad支持多种反编译模式,并允许用户自定义规则以适应不同的需求。此外,其命令行接口和图形界面使得复杂代码的析变得更加便捷。 #### Android逆向工程中的JEB反编译工具 针对Android应用的逆向工程,JEB是由PNF Software开发的一款专业级工具[^2]。相较于其他同类产品,JEB不仅具备强大的APK文件反编译能力,还能对Dalvik字节码执行高效而精准的操作。它的核心优势在于以下几个方面: - **广泛的平台兼容性**:除Android外,还支持ARM、MIPS等多种架构的二进制文件反汇编。 - **混淆代码解析**:内置模块能有效应对高度混淆的代码,提供层重构机制以便于深入析。 - **API集成支持**:允许通过编写Python或Java脚本来扩展功能并完成特定任务。 #### APK反编译流程及其意义 当涉及到具体的APK包时,可以通过一系列步骤提取其中的信息来进行全面的安全评估或者学习目的的研究工作[^3]。这些步骤一般包括但不限于获取资产目录(`assets`)内的资源数据;解密XML配置文档如`AndroidManifest.xml`定位应用程序启动点;最后利用上述提到的各种专用软件重现整个项目框架供进一步探讨。 ```bash # 使用apktool反编译APK示例 apktool d your_app.apk -o output_directory/ ``` 以上命令展示了如何借助开源工具ApkTool轻松拆卸目标安卓档案至易于探索的状态下。 ### 结论 无论是传统的桌面端还是现代移动端环境里头,恰当运用合适的反编译解决方案都是达成逆向工程项目成功不可或缺的一环。每种工具有各自专精之处,在实际应用场景当中应当依据具体需求做出明智的选择。
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值