BUUCTFReservewp(3)
[HDCTF2019]Maze
终于找到了一道用花指令的题了
先脱壳,然后进入ida
参考我的这篇文章:花指令
所以先把jnz给nop掉:
edit >> Patch program >> Change byte >> 前两位改为90
将花指令nop掉后,选中红色代码段,然后键盘p一下得到main函数
可以看到,wasd四个键控制移动,并且带有–和++的效果,然后后面一个if else判断语句,要让dword_408078 = 5,dword_40807C = -4,才能得到flag
点进去看看dword_408078和dword_40807C
那么7c初始是0,最后要等于-4,而s控制7c的–,这说明是往下走呗
shift + f12看字符串,然后shift+e提取数据得到:
关于为什么是7x10,那是看大佬wp知道的,我看大佬们做过的题也是7x10,所以就7x10.。。。。。
相册
这是个apk文件,我们需要下载一个jadk
下载完jadx和jadx-gui之后,用windows命令:java -jar jadx-gui.exe
启动jadx
打开apk文件,我们进行文本搜索:mail
找到函数:sendmail
我们查看:查找声明
找的是邮件,我们看通讯录
发现MAILSERVER,进入跳到声明
这个就是邮件了,而要进入MAILSERVER函数,首先要对NativeMethod.m进行base64加密
选中那一行继续跳到声明,发现是空的
而Java中的NativeMethod函数一般用于调用外部文件,所以我们ida打开so文件
我们解压apk文件,在lib文件夹里的armeabi文件夹里面有个so文件,用ida打开
找到字符串进行base64解密即可
也可以在exports里面找到NativeMethod_m
双击进入,发现被加密字符串
MRCTF{@_R3@1ly_E2_R3verse!}
进入ida,shift+f12找字符串
进入,查看伪代码,但好像看不了,也没有花指令,只能看汇编了
首先byte_4212C0是我们输入的字符串
edx在自增,之后跟1B(也就是27)进行比较,可以大胆猜测flag长度是27
然后byte_4212C0的第eax位跟al进行异或(al也就是eax的后八位,其实就是自增的位,也就是 i 了)
接着就和byte_41EA08的第eax位进比较(而byte_41EA08给出了字符串)
然后eax(可以看成 i 了)自增,继续循环
那么就能写出脚本:
1 |
|
[GWCTF 2019]xxor
看ida,代码很清晰
首先输入六次,六个数;然后进入三次的循环:对输入数组的0,2,4位进行加密,加密过后的数组再换回来。
进入加密函数:
一个64次的循环加密(逆的时候+=变为-=,里面的顺序也要改变,然后v5开始等于64乘满),一次加密两个,然后外面是三次循环,总共六个数,那就是两两一组加密。
我的理解其中a1和a1[1],就是代表v6[0]和v6[1](因为a1本身就是v6[j],而当时j=0,也就有a1=v6[0],但是a1是什么呢,只能是第二个v6[1],也就有了两两一组了)
然后出来看if语句,可以用简单的三元一次方程解出不知道的数字
知道结果了,知道过程了,那就开始逆了
1 |
|
得出的结果将16进制转为文本
[MRCTF2020]hello_world_go
无壳,进入ida看main_main函数
有点晦涩😓
再翻看函数的时候,意外看到了明文flag(按a转换字符串)
Go语言:
Go语言其实是Golanguage的简称,Go(又称 Golang)是 Google 的 Robert Griesemer,Rob Pike 及 Ken Thompson 开发的一种静态强类型、编译并发型语言。Go 语言语法与 C 相近。
可以使用
[WUSTCTF2020]level3
无壳进ida看main函数
说是base64加密,然后又给了一串字符串,那就直接试试用字符串解密呗
试过之后发现没出来flag
那看看加密过程,也很正常
那就可能是变表了,看看base64表的引用
有一个look表看看,果然原先的表被改变了
写个脚本
再次解密得出flag
[FlareOn4]IgniteMe
进入ida看主函数:
明显WriteFile函数是输入函数
看sub_4010F0函数:
这个a数组是空的,应该就是我们输入的字符串,然后有个if语句,排除了hex =10和13的字符(也就是‘/n’和‘/r’)
继续下一个函数sub_401050:
v0一看就是输入字符串的长度,然后v4不知道是啥,一个for循环,最后跟一个数组进行比较,所以最后的结果知道了
for循环:
将前一个字符与当前字符进行异或
看v4的函数:
__ROL4__:作用是循环左移(我其实还是不知道是啥)
动调一下,看看v4是啥:
先下个断点
运行到这里能看到是4,而且不管输入什么都是4
脚本:
1 |
|
[WUSTCTF2020]Cr0ssfun
先看ida:
只有一个函数:check,点进去
全是这种==的,那我感觉flag不就是这个吗
1 |
|
得到flag: