BUUCTF Re部分wp(九)

[INSHack2017]secure-garden-shed-v1

给了两个文件sgs-exec-release,lock.sgsc

尝试一下发现使用方法

./sgs-exec-release lock.sgsc

看了下ida,逻辑应该是在lock.sgsc里,直接动调搜索字符串

[INSHack2018]Tricky-Part2

main开头是个

这个abort_trap才是要分析的函数

flag在check里

[INSHack2017]proprietary-cctv-software

pyc,运行显示

RuntimeError: Bad magic number in .pyc file

不过现在uncompyle6可以直接逆,逆完发现使用了PyQt5,先下载

pip3 install PyQt5

看里面代码,成功会运行

def activation_passed(self):
        self.lab_result.setText('Activation is a success !
%s' % self.finalize())
        self.show()

所以改成

def activation_failed(self):
        self.lab_result.setText('Activation is a success !
%s' % self.finalize())
        self.show()

运行后直接点取消就行了

[FBCTF2019]go_get_the_flag

go逆向,去了符号表

动调一直跟,找到一处判断长度为18

往下找,当经过一个函数时,会输出Wrong

这里rdx的值挺奇怪,感觉像是字符串,就去找了找赋给rdx值的地方

这里就是要输入的值,输入得flag

[watevrCTF 2019]Hacking For Vodka

简单题,main有处反调

关键函数是下面这个,找到比对处,发现是明文比对

直接patch,输出flag

[watevrCTF 2019]Watshell

可以看到输入由空格分离的数字组成,跟进去发现关键部分是个递归,由此直接爆破 

#include<stdio.h>

__int64_t sub(__int64_t a1, __int64_t a2, __int64_t a3)
{
  __int64_t result; 
  __int64_t v4; 

  v4 = a1 % a3;
  if ( !a2 )
    return 1LL;
  if ( a2 == 1 )
    return a1 % a3;
  if ( !(a2 & 1) )
    return sub(v4 * v4 % a3, a2 / 2, a3) % a3;
  result = a2 % 2;
  if ( a2 % 2 == 1 )
    result = v4 * sub(v4, a2 - 1, a3) % a3;
  return result;
}

int main(void){
    __int64_t result = 0;
    char c[25]="give_me_the_flag_please";
    for(int j=0;j<23;j++){
        for(int i=0;i<200;i++){
            result = sub(i,0x71,0x8f);
            if(result == c[j]){
                printf("%d ",i);
                break;
            }
        }
    }
    return 0;
}

 

原文地址:https://www.cnblogs.com/harmonica11/p/13545052.html