遨游网站建设,龙口网站制作多少钱,最新国际军事动态和军事战争,安平县护栏网站建设64位
我先用虚拟机跑了一下这个程序#xff0c;结果输出一串字符串flag ——没用 IDA打开后 F5也没有什么可看的
那我们就F12查看字符串找可疑信息 这里一下就看见了 __int64 __fastcall main(int a1, char **a2, char **a3)
{char *v3; // rbx__int64 v4; // rax__int64 v…
64位
我先用虚拟机跑了一下这个程序结果输出一串字符串flag ——没用 IDA打开后 F5也没有什么可看的
那我们就F12查看字符串找可疑信息 这里一下就看见了 __int64 __fastcall main(int a1, char **a2, char **a3)
{char *v3; // rbx__int64 v4; // rax__int64 v5; // rdx__int64 v6; // rax__int64 v7; // rdx_BYTE *v8; // rax__int64 v10[2]; // [rsp10h] [rbp-60h] BYREFchar v11[47]; // [rsp20h] [rbp-50h] BYREFchar v12; // [rsp4Fh] [rbp-21h] BYREF__int64 v13; // [rsp50h] [rbp-20h] BYREFint v14; // [rsp5Ch] [rbp-14h]if ( a1 ! 2 ){v3 *a2;v4 std::operatorstd::char_traitschar(std::cout, Usage: , a3);v6 std::operatorstd::char_traitschar(v4, v3, v5);std::operatorstd::char_traitschar(v6, flag\n, v7);exit(0);}std::allocatorchar::allocator(v12, a2, a3);std::string::basic_string(v11, a2[1], v12);std::allocatorchar::~allocator(v12);v14 0;v10[0] std::string::begin(v11);while ( 1 ){v13 std::string::end(v11);if ( !(unsigned __int8)sub_400D3D(v10, v13) )break;v8 (_BYTE *)sub_400D9A(v10);if ( *v8 ! off_6020A0[dword_6020C0[v14]] )sub_400B56();v14;sub_400D7A(v10);}sub_400B73();std::string::~string(v11);return 0LL;
} 这个就是我们运行程序得到的东西 正常来说
这个while1和if里面比较关键——经验之谈你们也可以联想一下写过的
先看第一个sub
bool __fastcall sub_400D3D(__int64 a1, __int64 a2)
{__int64 v2; // rbxv2 *(_QWORD *)sub_400DAC(a1);return v2 ! *(_QWORD *)sub_400DAC(a2);
}
__int64 __fastcall sub_400DAC(__int64 a1)
{return a1;
} ...就是一个比较函数 按N改名
__int64 __fastcall sub_400D9A(__int64 a1)
{return *(_QWORD *)a1;
}
第二个函数就是一个复制姑且叫他get吧
_QWORD *__fastcall sub_400D7A(_QWORD *a1)
{*a1;return a1;
} 最后这个也是一个简单的操作 最后就是这样了
关键的关键就是if off就是我们之前找到的那个字符串 dword就是一串数据
我们先脚本走下
a[36, 0, 0, 0, 0, 0, 0, 0, 5, 0,0, 0, 54, 0, 0, 0, 101, 0, 0, 0,7, 0, 0, 0, 39, 0, 0, 0, 38, 0,0, 0, 45, 0, 0, 0, 1, 0, 0, 0,3, 0, 0, 0, 0, 0, 0, 0, 13, 0,0, 0, 86, 0, 0, 0, 1, 0, 0, 0,3, 0, 0, 0, 101, 0, 0, 0, 3, 0,0, 0, 45, 0, 0, 0, 22, 0, 0, 0,2, 0, 0, 0, 21, 0, 0, 0, 3, 0,0, 0, 101, 0, 0, 0, 0, 0, 0, 0,41, 0, 0, 0, 68, 0, 0, 0, 68, 0,0, 0, 1, 0, 0, 0, 68, 0, 0, 0,43, 0, 0, 0]
b[]
for i in range(0,len(a),4):b.append(a[i])
print(b)
aL3t_ME_T3ll_Y0u_S0m3th1ng_1mp0rtant_A_{FL4G}_W0nt_b3_3X4ctly_th4t_345y_t0_c4ptur3_H0wev3r_1T_w1ll_b3_C00l_1F_Y0u_g0t_1t
flag
for i in b:flaga[i]
print(flag)结果就出来了