新年快乐题解

1.双击运行一下这个exe文件

这个程序也是需要输入一个flag,逆向来查看什么样的字符串是flag

2.查壳 

是一个32位可执行文件,加了UPX壳

壳是保护程序不被IDA破解的一种手段,可以手段脱壳,可以使用工具

 

 拖入32位IDA,按下F5不能正常反编译

3.脱壳

UPX是一种经典的壳,越是有名的壳越有各种现成的破解工具

我们所使用的工具

将可执行文件拖入这个工具

 可以选择UPX壳的版本号,可以挨个尝试

点击Go,成功脱壳,重新将这个可执行问阿金拖入32位IDA

也可以选择手动脱壳

新年快乐——手动脱壳

4.反汇编分析 

得到了正常的反汇编代码

 找到主函数,点击F5反编译器

int __cdecl main(int argc, const char **argv, const char **envp)
{
  int result; // eax
  char Str2; // [esp+12h] [ebp-3Ah]
  char Str1[2]; // [esp+20h] [ebp-2Ch]
  char v6; // [esp+22h] [ebp-2Ah]

  __main();
  strcpy(&Str2, "HappyNewYear!");
  *(_WORD *)Str1 = 0;
  memset(&v6, 0, 0x1Eu);
  printf("please input the true flag:");
  scanf("%s", Str1);
  if ( !strncmp(Str1, &Str2, strlen(&Str2)) )
    result = puts("this is true flag!");
  else
    result = puts("wrong!");
  return result;
}

观察主函数,可以知道输入的字符串是Str1,Str1和Str2相等,就输出this is the true flag!

说明此时的Str2就是flag

上面的代码strcpy(&Str2, "HappyNewYear!");

说明Str2中存储的是HappyNewYear!

得到flag

flag{HappyNewYear!}

评论
添加红包

请填写红包祝福语或标题

红包个数最小为10个

红包金额最低5元

当前余额3.43前往充值 >
需支付:10.00
成就一亿技术人!
领取后你会自动成为博主和红包主的粉丝 规则
hope_wisdom
发出的红包

打赏作者

烨鹰

你的鼓励将是我创作的最大动力

¥1 ¥2 ¥4 ¥6 ¥10 ¥20
扫码支付:¥1
获取中
扫码支付

您的余额不足,请更换扫码支付或充值

打赏作者

实付
使用余额支付
点击重新获取
扫码支付
钱包余额 0

抵扣说明:

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

余额充值