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 !\n%s' % self.finalize())
self.show()
所以改成
def activation_failed(self):
self.lab_result.setText('Activation is a success !\n%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;
}