新年快乐题解

举报
御麟 发表于 2023/04/25 22:54:05 2023/04/25
【摘要】 ​1.双击运行一下这个exe文件​编辑这个程序也是需要输入一个flag,逆向来查看什么样的字符串是flag2.查壳 ​编辑是一个32位可执行文件,加了UPX壳壳是保护程序不被IDA破解的一种手段,可以手段脱壳,可以使用工具 ​编辑 拖入32位IDA,按下F5不能正常反编译3.脱壳UPX是一种经典的壳,越是有名的壳越有各种现成的破解工具​编辑我们所使用的工具将可执行文件拖入这个工具​编辑 可以...

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!}

【版权声明】本文为华为云社区用户原创内容,转载时必须标注文章的来源(华为云社区)、文章链接、文章作者等基本信息, 否则作者和本社区有权追究责任。如果您发现本社区中有涉嫌抄袭的内容,欢迎发送邮件进行举报,并提供相关证据,一经查实,本社区将立刻删除涉嫌侵权内容,举报邮箱: cloudbbs@huaweicloud.com
  • 点赞
  • 收藏
  • 关注作者

评论(0

0/1000
抱歉,系统识别当前为高风险访问,暂不支持该操作

全部回复

上滑加载中

设置昵称

在此一键设置昵称,即可参与社区互动!

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。

*长度不超过10个汉字或20个英文字符,设置后3个月内不可修改。