Task2 - IDA学习【进度 - 第二课】

学习目标:

- 无名侠的课,看二进制培训(第二集和第三集)(https://space.bilibili.com/7761039/video)

- 会反汇编
    
- 会字符串搜索(f12)
    
- 会简单异或解密
  • 了解一下操作系统

    • linux系统的可执行文件的后缀

    • windows系统的可执行文件的后缀

    • 了解安装die(Detect It Easy)工具(自行网上或论坛搜索)

  • 可以略微了解docker(和vmware差不多)

第二课 简单的加密算法

1. 先运行一下程序

image

2.使用左侧functions查找main函数

image

3.将函数名改为真实函数名
点击查看代码
int __cdecl main_0(int argc, const char **argv, const char **envp)
{
  int v3; // edx
  int v5; // [esp-4h] [ebp-1E8h]
  unsigned int i; // [esp+D0h] [ebp-114h]
  char v7[260]; // [esp+DCh] [ebp-108h] BYREF
  int v8; // [esp+1E0h] [ebp-4h]
  int savedregs; // [esp+1E4h] [ebp+0h] BYREF

  printf("Hi CTFer,Input your flag:");
  scanf("%s", v7);
  for ( i = 0; i < strlen(v7); ++i )
    ++v7[i];
  if ( sub_454086(v7, "gmbh|ZPV`GJOE`JU`IBIB~") )
    printf("you are wrong!\n");
  else
    printf("you are right!\n");
  sub_4558B4(&savedregs, &dword_45A2C0, 0, v3);
  return sub_4546B7((unsigned int)&savedregs ^ v8, v5);
}
4.对main函数分析发现v7变量被for循环每一个字母向后移动了一位,结果得到“gmbh|ZPV`GJOE`JU`IBIB~”所以有结果想要知道初始值,只需要每一个向前移动一位
5.编写
点击查看C语言代码
#include <stdio.h>
#include <string.h>
 int main(void)
 {
    char str1[] = "gmbh|ZPV`GJOE`JU`IBIB~";
    for ( int i = 0; i < strlen(str1); ++i )
    --str1[i];
    printf("%s\n",str1);
    printf("Ok\n");

    return 0;
 }
posted @ 2024-08-08 17:19  vstral  阅读(18)  评论(0编辑  收藏  举报