欢迎您访问程序员文章站本站旨在为大家提供分享程序员计算机编程知识!
您现在的位置是: 首页

一道简单的逆向题

程序员文章站 2022-05-12 13:52:36
...

一道简单的逆向

  1. 用ida打开查看伪代码
  2. 分析程序,找出关键点,以及如何获取flag
  3. 写出脚本得到flag

一. 用ida打开查看伪代码
一道简单的逆向题
二 .我们分析程序可知本题通过对比 buf[] 数组和 v0到v45 如果能够对比不成功就会执行 sys_exit,显然这不是解题的路径,所以我们试着使它匹配成功。
我们已知v0到v45,所以通过将这几句逆操作

for(i=0;i<=45;i++){
	buf[i]+=2*i;
	buf[i]^=i;
	buf[i]-=i;
}

就可以得到匹配正确的buf[] 数组 即:

for(i=0;i<=45;i++){
	 buf[i]+=i;
	 buf[i]^=i;
	 buf[i]-=2*i;
}

就可以的到正确的buf[]数组
三.写出脚本得到flag
其实有了上面的逆向操作,将buf数组输出就是flag下面将脚本写出来
本题脚本没什么要求,我写的是c语言脚本

#include<stdio.h>
int main(){
int v[46]={102,110,...,113,120,111,99,-60,-126,-124,-66,-69,-51};
//由于数组较长只显示一部分
for(int i=0;i<=45;i++){
v[i]+=i;
v[i]^=i;
v[i]-=2*i;
printf("%c",v[i]);
}
return 0;
}

最后输出的buf数组就是flag。