XCTF reverse maze】的更多相关文章

一.查壳 二.拖入ida64,静态调试,找到主函数F5反编译 二.1 思路分析(逆向是真的费时间,每个函数都要分析过去): 1.发现每个if最终都会进入LABEL-15 点进去,看看这个函数是干啥的. 这里基本可以推理出a3是行,a2是列了. 那么我们的迷宫一定是一个8列的矩阵. 得知这点,退出去,再分析. v9是行,SHIDWORD函数是指的下一个字节,得知这点,从上面分析可知: 就将四个函数点进去就可以判断方向了. 举个例子: 相对应,其他方向,O:下,o:上,0:左,.:右. 2.将迷宫打…
主函数输入的字符会和key比较长度和enflag比较内容,所以这道题的flag和输入有关 key长度为0x12,enflag的值为:izwhroz""w"v.K".Ni 对输入进行加密的函数,首先比较输入长度是否为0x12,然后以三个数字为一组,每组为一个循环,进行加密. 正确的输入经过加密等于enflag,所以对enflag的值进行逆向计算可以得到正确的输入(flag),代码如下 key=[] s="izwhroz\"\"w\&quo…
运行程序 32位ida打开,shift+f12查看运行时的中文,这里双击flag get字符串进入rdata段 双击后面的函数,进入text段,小的窗口视图里可以看见汇编代码调用函数的句子 右边的即是鼠标滑到函数上面出现的小窗口 tab键查看伪代码,v8是我们输入的,v4是需要相比较的,flag get最后的输出和v4有关 观看通篇代码寻找可疑的点,或者叫做关键的地方 双击打开v4,发现 ①在堆里的数据字符串变量名叫xmmword,那么v4是程序运行时加载进去的 ②返回两个寄存器地址,那么猜测x…
逻辑很简单,如果sub_4006FD函数返回假则返回Nice! 图1 进入sub_4006FD函数,加密过程也很简单,这里值得注意的有两点 一.8*(i%3)是二维数组的第一个参数,这里是取v3的地址所以*8的是数组长度,不是选择8倍于它的数组.换成python里直接写用数组时,就可以把这个*8省略了 二.a1是传入的字符串地址,所以i+a1是从第1个到第12个字符的意思,求s不用再减i了 图2 解密代码思路很好理解,比如x-y=1,那么y=x-1一样 这里使用了int转换是为了除数后取整,py…
1.查壳,发现是64位的linux文件,由于虚拟机没装linux,只能静态调了 2.拖入ida分析,找到主函数 2.1.思路分析 1.先将对应的ASCII的转换成字符,因为迷宫题一般都是用wsad,或者lrdt来标志上下左右 2.v5=&unk_6020c4,标志着起始点 3.v5+=4,意味着右边移动4个字节 4.v6+=64,有点像二维数组里面的用地址来访问这种. 5.if(v5<asc-------)这句,最后一位为0的才可以走,为1的会直接跳转,也告诉了我们迷宫的边界 3.实践: 3…
[HDCTF2019]Maze 附件 步骤: 例行检查,32位程序,upx壳 upx脱壳儿后扔进32位ida,首先检索程序里的字符串 有类似迷宫的字符串,下面也有有关flag的提示字符串,但是没法进行交叉引用跳转 查看main函数,没法f5,看汇编,下方有个奇怪的jnz指令,它跳转到了下一行,相当于没跳 它call了一个奇怪的地址,ida没法分析出来,百度后得知这个叫花指令,nop掉 之后就是这个call指令,不能全部nop,因为后面那个东西可能是有效代码(我先全部nop掉了没法f5).按d将其…
1 #include <stdlib.h> #include <stdio.h> #define stackinitsize 50 #define stackincrement 8 typedef struct { int x,y; }posttype; typedef struct { int ord; posttype seat; int di; }elemtype; typedef struct{ elemtype *base; elemtype *top; int stac…
碎碎念 咕咕咕了好久的Pwn,临时抱佛脚入门一下. 先安利之前看的一个 Reverse+Pwn 讲解视频 讲的还是很不错的,建议耐心看完 另外感觉Reverse和Pwn都好难!! 不,CTF好难!! 之前学C的时候了解过gets()函数很危险 一般笔者会使用如下代码代替gets() scanf("%[^\n]%*c",a); 学了Pwn更直观地感受到了这一点 关于scanf的更多用法详见 https://blog.csdn.net/jeffasd/article/details/807…
Reverse digits of an integer. Example1: x = 123, return 321 Example2: x = -123, return -321 Have you thought about this? Here are some good questions to ask before coding. Bonus points for you if you have already thought through this! If the integer'…
数组中存在的两个方法:sort()和reverse() 直接用sort(),如下: ,,,,,,,,,,,]; console.log(array.sort());ps:[0, 1, 2, 2, 29, 3, 3, 34, 7, 7, 782, 8] 这个好像真的效果,sort(): arr.sort([compareFunction]) 参数 compareFunction 可选.用来指定按某种顺序进行排列的函数.如果省略,元素按照转换为的字符串的诸个字符的Unicode位点进行排序. 原来是…