ACTF新生赛2020 easyre(17)
下载发现是一个含有upx壳的文件
直接脱掉就好了,用upx工具
然后用IDA打开
一下子就找到了位置
大概看一下就知道:
1 | qmemcpy(v4, "*F'\"N,\"(I?+@", sizeof(v4)); |
这个是在v4里面拷贝字符串
然后下面用v4中的字符串 要和 _data_start _ 这个数组中通过v5+i-1的值来相等
通过经验可得到找到的这个v5+i-1的值应该就是我们的flag
点过去就知道这个数组中的值
现在就是要逆向这串代码
1 | ( v4[i] != _data_start__[*((char *)v5 + i) - 1] )// 要相等 |
仔细看 *((char *)v5 + i) == v5[i]
1 | _data_start__[*((char *)v5 + i) - 1] == _data_start__[v5[i] - 1] |
总体来说,这个表达式的含义是:将 v5
强制转换为 char
类型指针,并根据偏移量 i
获取指定偏移位置的值,然后将其减去 1,最后使用该值作为索引,访问 _data_start_
数组中的元素。
v4 = [42, 70, 39, 34, 78, 44, 34, 40, 73, 63, 43, 64]
1 | key = '~}|{zyxwvutsrqponmlkjihgfedcba`_^]\[ZYXWVUTSRQPONMLKJIHGFEDCBA@?>=<;:9876543210/.-,+*)(\'&%$# !"' #'一定要加\ |
1 | v4 = [42,70,39,34,78,44,34,40,73,63,43,64] |
flag{U9X_1S_W6@T?}
本博客所有文章除特别声明外,均采用 CC BY-NC-SA 4.0 许可协议。转载请注明来自 Safety-Blog!