0%

childRe

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
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
int __cdecl main(int argc, const char **argv, const char **envp)
{
__int64 v3; // rax
__int64 v4; // rax
const CHAR *v5; // r11
__int64 v6; // r10
int v7; // er9
const CHAR *v8; // r10
__int64 v9; // rcx
__int64 *v10; // rax
unsigned int v12; // ecx
__int64 v13; // r9
__int64 v14; // r8
__int64 v15; // rdx
__int128 v16[2]; // [rsp+20h] [rbp-38h] BYREF

memset(v16, 0, sizeof(v16));
sub_7FF6BF3D1080("%s", (const char *)v16); // 输入字符串存入v14
v3 = -1i64; // v3初始值为-1
do
++v3;
while ( *((_BYTE *)v16 + v3) ); // 0123456789qwertyuiopasdfghjklzx
if ( v3 != 31 ) // 限制输入字符串长度为31
{
while ( 1 )
Sleep(0x3E8u);
}
v4 = sub_7FF6BF3D1280(v16);
v5 = name;
if ( v4 )
{
sub_7FF6BF3D15C0(*(_QWORD *)(v4 + 8));
sub_7FF6BF3D15C0(*(_QWORD *)(v6 + 16));
v7 = dword_7FF6BF3D57E0;
v5[dword_7FF6BF3D57E0] = *v8;
dword_7FF6BF3D57E0 = v7 + 1;
}
UnDecorateSymbolName(v5, outputString, 0x100u, 0);
v9 = -1i64;
do
++v9;
while ( outputString[v9] );
if ( v9 == 62 )
{
v12 = 0;
v13 = 0i64;
do
{
v14 = outputString[v13] % 23;
if ( a1234567890Qwer[v14] != a46200860044218[v13] )
_exit(v12);
v15 = outputString[v13] / 23;
if ( a1234567890Qwer[v15] != a55565653255552[v13] )
_exit(v12 * v12);
++v12;
++v13;
}
while ( v12 < 62 );
sub_7FF6BF3D1020("flag{MD5(your input)}\n", v15, v14, v13);
return 0;
}
else
{
v10 = sub_7FF6BF3D18A0(std::cout);
std::ostream::operator<<(v10, sub_7FF6BF3D1A60);
return -1;
}
}
阅读全文 »

前言:

​ 在SUSCTF的DigitalCircuits题目中遇到了Tea加密算法,由于没有认出这一算法浪费了大量解题时间,所以特意写这篇博客总结学习一下该类算法的特点

概述:

​ TEA(Tiny Encryption Algorithm),是一种分组加密算法,实现过程比较简单,效率极高,该系列共三种算法,tea–>xtea–>xxtea,该算法使用了一个来源于黄金比率神秘常数δ作为倍数,以保证每一轮加密都不相同,这个常熟在程序中一般写作0x9E3779B9。但有时该常数会以减法的形式出现,-0x61C88647=0x9E3779B9,因此出现了0x61C88647该常数时也应当注意。

阅读全文 »

Gametime

这是一道有趣的游戏题,运行程序,它会先跟你介绍规则,如果看到s的话就按空格键,如果看到x的话就按x键,如果看到m的话就按m键,如果手速够快的话可以通过玩游戏通关,作为一道逆向题的话我用了两种作法

阅读全文 »