Bugku 逆向WP(1)

Bugku 逆向

2018-11-7 19:05:10
今天开始刷题了.

入门逆向

题目非常简单.用IDA直接看汇编代码,会发现printf函数后面有很多mov指令,这里就是flag.
建议不要直接F5,因为F5后看不到mov指令,找了半天.
在这里插入图片描述

flag{Re_1s_S0_C0OL}

Easy_vb

看题目就知道和vb有关.

  1. 先运行一下程序
    在这里插入图片描述
    一个确定按钮,猜测所有数字正确时弹出flag.
  2. 用OD打开,先搜索字符串,然后得到flag.突然感觉好简单…
  3. 在这里插入图片描述

MCTF{ N3t_Rev_1s_E4ay}
虽然答案是这个但是平台提交的时候要把前面mctf改为flag

Easy_Re

OD打开搜索字符串.找到了flag.好水

DUTCTF{We1c0met0DUTCTF}

游戏过关

一个游戏,凭实力打出来了flag

zsctf{T9is_tOpic_1s_v5ry_int7resting_b6t_others_are_n0t}

Timer(阿里CTF)

因为是一道Android题目,所以要先反编译,试了很多工具,最后确定JEB2是最好用的.其他反编译出来源码是错误的.

  1. 下载运行
    发现需要200000秒就会出现flag.
  2. 反编译,定位关键点
if(MainActivity.this.beg - MainActivity.this.now <= 0) {
   
   
        this.val$tv1.setText("The flag is:");
        this.val$tv2.setText("alictf{" + MainActivity.this.stringFromJNI2(MainActivity.this.k) + "}");
        }

可以看到beg-now的值<=0就会调用stringFromJNI2显示falg.

public native String stringFromJNI2(int arg1) {
   
   
}

native表名是调用so了,我们不需要反编译so文件,只要算出k的值就可以了.
3. 计算k的值
知道计算k值得地方.

if(MainActivity.is2(MainActivity.this.beg - MainActivity.this.now)) {
   
   
        MainActivity.this.k += 100;
        }
else {
   
   
    --MainActivity.this.k;
    }

这里其实是一个循环,将beg-now的值带入is2.每秒循环一次.
4. beg和now值分析

 public MainActivity() {
   
   
        super();
        this.beg = (((int)(System.currentTimeMillis() / 1000))) + 200000;
        this.k = 0;
        this.t = 0;
    }
MainActivity.this.t = System.currentTimeMillis();
MainActivity.this.now = ((int)(MainActivity.this.t / 1000));

beg的值就是**运行时的当前时间(毫秒)/1000(秒)+200000秒.
now的值就是当前时间的秒.
所以beg-now=200000+now-beg的程序执行时间(因为小于1秒可以忽略)
5. 计算k值
is2是代码中的源码,直接计算得到k=1616384

public class timer {
   
   
    public static boolean is2(int arg4) {
   
   
        boolean v1 = true;
        if(arg4 > 3) {
   
   
            if(arg4 % 2 != 0 && arg4 % 3 != 0) {
   
   
                int v0 = 5;
                while(true) {
   
   
                    if(v0 * v0 <= arg4) {
   
   
                        if(arg4 % v0 != 0 && arg4 % (v0 + 2) != 0) {
   
   
                            v0 += 6;
                            continue;
                        }
                        return false;
                    }
                    else {
   
   
                        return v1;
                    }
                }
            }
            v1 = false;
        }
        else if(arg4 <= 1)<
### BUUCTF 逆向工程 Writeup 解题报告 #### 选择合适的题目并分析目标程序 在BUUCTF平台上,逆向工程项目通常涉及对二进制文件或脚本的反编译和静态/动态分析。为了找到解题思路,建议从简单的题目入手,逐步提升难度。每道题目都会给出一个可执行文件或其他类型的程序作为挑战对象。 #### 使用工具辅助分析 常用的逆向工程工具有IDA Pro、Ghidra以及Radare2等[^1]。这些工具可以帮助加载待分析的目标程序,并提供汇编代码视图、函数调用图表等功能支持。对于初学者来说,Ghidra是一个不错的选择因为它免费开源而且功能强大。 #### 寻找关键逻辑与特征字符串 通过对程序进行初步浏览后,应该重点关注那些看起来像是验证输入或者处理核心业务的地方。很多时候,在二进制内部能找到一些提示性的文本串(如错误消息),它们往往指向了我们需要破解的关键部分。 #### 尝试修改行为或绕过保护机制 一旦明确了要攻击的方向,则可以通过打补丁的方式改变原有流程达到目的;或者是利用某些已知漏洞来规避安全措施。例如,在面对加壳软件时,可以尝试脱壳后再做进一步的研究工作。 #### 编写自动化脚本来加速测试过程 当遇到重复性高的操作任务时,不妨编写Python脚本配合调试器使用以提高效率。比如自动发送不同参数组合给被测应用直至触发预期效果为止。 ```python import subprocess for i in range(100): result = subprocess.run(['./target_binary', str(i)], capture_output=True, text=True) if "success" in result.stdout.lower(): print(f"Found solution at input {i}") break ```
评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

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

抵扣说明:

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

余额充值