[RE]Reversing.Kr的Easy ELF

使用的工具:IDA(虽说这题是Linux的ELF文件逆向,但是我还正式学Linux,于是。。。)

找到主函数,分析一下,先是读取输入,然后是一个if/else。

IF    sub_8048451()==1:

调用函数sub_80484F7

ELSE

        write(1, "Wrong\n", 6u)


然后看看sub_80484F7是什么:

return write(1, "Correct!\n", 9u);

于是乎显然,答案在sub_8048451()中。

sub_8048451():
{
  if ( byte_804A021 != '1' )
  	return 0;
  byte_804A020 ^= 52u;
  byte_804A022 ^= 50u;
  byte_804A023 ^= 136u;
  if ( byte_804A024 != 'X' )
        return 0;
  if ( byte_804A025 )
       return 0;
  if ( byte_804A022 != 124 )
        return 0;
  if ( byte_804A020 == 'x' )
        return byte_804A023 == -35;
  return 0;
}

函数对输入进行了一番处理与判断。

分析一下,如果要让sub_8048451()==1,则:

byte_804A020=='x' ^ 52;

byte_804A021=='1';

byte_804A022==124^50;

byte_804A023==-35^136;

byte_804A024=='X';

byte_804A025==0

写个程序输出一下:

#include <stdio.h>
int main(void){
	int a[5];
	a[0]='x'^52;
	a[1]='1';	
	a[2]=124^50;
	a[3]=-35^136;
	a[4]='X';
	for (int i = 0; i < 5; i++)
		printf("%c", a[i]);
	return 0;
}
result:L1NUX

这就是答案了吧。




评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包
实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

1.余额是钱包充值的虚拟货币,按照1:1的比例进行支付金额的抵扣。
2.余额无法直接购买下载,可以购买VIP、付费专栏及课程。

余额充值