学习目标:
- 无名侠的课,看二进制培训(第二集和第三集)(https://space.bilibili.com/7761039/video)- 会反汇编- 会字符串搜索(f12)- 会简单异或解密
-
了解一下操作系统
-
linux系统的可执行文件的后缀
-
windows系统的可执行文件的后缀
-
了解安装die(Detect It Easy)工具(自行网上或论坛搜索)
-
-
可以略微了解docker(和vmware差不多)
第二课 简单的加密算法
1. 先运行一下程序
2.使用左侧functions查找main函数
3.将函数名改为真实函数名
点击查看代码
int __cdecl main_0(int argc, const char **argv, const char **envp)
{int v3; // edxint v5; // [esp-4h] [ebp-1E8h]unsigned int i; // [esp+D0h] [ebp-114h]char v7[260]; // [esp+DCh] [ebp-108h] BYREFint v8; // [esp+1E0h] [ebp-4h]int savedregs; // [esp+1E4h] [ebp+0h] BYREFprintf("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");elseprintf("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;}