【write up】逆向基础

第一次写逆向题,不会的先码着,留着以后写

ascll码转字符串

Description


Solution

ida32位打开,直接看汇编,不要F5


Flag

1
flag{sAdf_fDdkl_Fdf}

linux可执行文件 异或

Description


Solution

IDA64位

main:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
void __fastcall __noreturn main(__int64 a1, char **a2, char **a3)
{
size_t v3; // rsi@1
int i; // [sp+3Ch] [bp-54h]@3
char s[36]; // [sp+40h] [bp-50h]@1
int v6; // [sp+64h] [bp-2Ch]@1
__int64 v7; // [sp+68h] [bp-28h]@1
char v8[8]; // [sp+70h] [bp-20h]@1
int v9; // [sp+8Ch] [bp-4h]@1

v9 = 0;
strcpy(v8, ":\"AL_RT^L*.?+6/46");
v7 = 28537194573619560LL;
v6 = 7;
printf("Welcome to the RC3 secure password guesser.\n", a2, a3);
printf("To continue, you must enter the correct password.\n");
printf("Enter your guess: ");
__isoc99_scanf("%32s", s);
v3 = strlen(s);
if ( v3 < strlen(v8) )
sub_4007C0();
for ( i = 0; i < strlen(s); ++i )
{
if ( i >= strlen(v8) )
sub_4007C0();
if ( s[i] != (char)(*((_BYTE *)&v7 + i % v6) ^ v8[i]) )
sub_4007C0();
}
sub_4007F0();
}

sub_4007C0();

1
2
3
4
5
void __noreturn sub_4007C0()
{
printf("Incorrect password!\n");
exit(0);
}

sub_4007F0():

1
2
3
4
5
void __noreturn sub_4007F0()
{
printf("You entered the correct password!\nGreat job!\n");
exit(0);
}

主要逻辑就是将字符串:\"AL_RT^L*.?+6/46复制给V8,如果输入的字符串长度大于v8则进入下面的循环

if ( s[i] != (char)(*((_BYTE *)&v7 + i % v6) ^ v8[i]) )是得flag的关键

exp:

1
2
3
4
5
6
7
8
v8 = ":\"AL_RT^L*.?+6/46"
v7 = "28537194573619560"
v6 = 7
flag = ""

for i in range(0,len(v8)):
flag += chr(ord(v8[i])^ord(v7[i%v6]))
print (flag)

Flag

1
flag{RC3-2016-XORISGUD}

猜猜哪个是flag

Description

这题程序打不开,提示丢失什么文件,ida里面也有问题 不能F5 也没有main函数 不过给了一个c程序 差不多能猜出来题目是啥


Solution

这题目还挺良心,脚本都给了

这个flag的长度是大于25的,flag{WWtFal9kamtmM19qRWpfZVVu}可以看出是base64编码过的


Flag

1
flag{YkEj_djkf3_jEj_eUn}

简单的算法

Description

第二个密码不会了…


Solution

shift+f12查看到password然后跟进

更到sub_401627看函数

发现第一个密码就是进行字符串的对比 r0b0RUlez!

再跟进到sub_4015EA(0),发现是一个异或

Flag

1
暂无

你能看懂C语言吗

Description

看不懂,指针没学好


Solution


Flag

1
2


你算什么

Description


Solution

发现一个假的flagnctf{this_is_a_fake_flag}

进入IDA 先看main函数

跟进hereisyourflag函数,发现又是ASII码转字符串


Flag

1
nctf{Welocome_to_binary\s_world}

字符串对比

Description


Solution

IDA打开,主函数:

1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
int __cdecl main(int argc, const char **argv, const char **envp)
{
signed int v3; // ebx@3
char v4; // al@4
int result; // eax@9
int v6; // [sp+0h] [bp-70h]@0
int v7; // [sp+0h] [bp-70h]@2
char v8; // [sp+12h] [bp-5Eh]@5
char v9[20]; // [sp+14h] [bp-5Ch]@2
char v10; // [sp+28h] [bp-48h]@2
__int16 v11; // [sp+48h] [bp-28h]@2
char v12; // [sp+4Ah] [bp-26h]@2
char v13; // [sp+4Ch] [bp-24h]@1

qmemcpy(&v13, a437261636b4d65, '#');
while ( 1 )
{
memset(&v10, 0, 0x20u);
v11 = 0;
v12 = 0;
sub_40134B((int)aPleaseInputYou, v6);
scanf(aS, v9);
if ( strlen(v9) > '\x11' )
break;
v3 = 0;
do
{
v4 = v9[v3];
if ( !v4 )
break;
sprintf(&v8, asc_408044, v4);
strcat(&v10, &v8);
++v3;
}
while ( v3 < 17 );
if ( !strcmp(&v10, &v13) )
sub_40134B((int)aSuccess, v7);
else
sub_40134B((int)aWrong, v7);
}
sub_40134B((int)aWrong, v7);
result = stru_408090._cnt-- - 1;
if ( stru_408090._cnt < 0 )
result = _filbuf(&stru_408090);
else
++stru_408090._ptr;
return result;
}

大概意思就是将我们输入的字符串和v13进行比较

strcmp比较的是字符串的十六进制,所以直接将v13:437261636b4d654a757374466f7246756e十六进制数转化为字符串即可


Flag

1
flag{CrackMeJustForFun}

做不出来就破解它

Description


Solution


Flag

1
2


逆向思路

  1. peid打开看什么类型的文件,查壳

  2. 进行静态或者动态分析,用ida,od,gdb等工具

  3. 可能会涉及到一些c语言的算法

    感觉主要就是读代码,然后找代码

文章目录
  1. 1. ascll码转字符串
    1. 1.1. Description
    2. 1.2. Solution
    3. 1.3. Flag
  2. 2. linux可执行文件 异或
    1. 2.1. Description
    2. 2.2. Solution
    3. 2.3. Flag
  3. 3. 猜猜哪个是flag
    1. 3.1. Description
    2. 3.2. Solution
    3. 3.3. Flag
  4. 4. 简单的算法
    1. 4.1. Description
    2. 4.2. Solution
    3. 4.3. Flag
  5. 5. 你能看懂C语言吗
    1. 5.1. Description
    2. 5.2. Solution
    3. 5.3. Flag
  6. 6. 你算什么
    1. 6.1. Description
    2. 6.2. Solution
    3. 6.3. Flag
  7. 7. 字符串对比
    1. 7.1. Description
    2. 7.2. Solution
    3. 7.3. Flag
  8. 8. 做不出来就破解它
    1. 8.1. Description
    2. 8.2. Solution
    3. 8.3. Flag
  9. 9. 逆向思路
|