这题给了一个exe文件,本来我还以为是要用OD了(太长时间没用想复习一下)
结果IDA打开发现了一串很奇怪的字符串

437261636b4d654a757374466f7246756e

显然不是base64加密,一般来说不是crypto题加密方式就那么几种,密码学,16进制转字符串…

由此得到flag
CrackMeJustForFun
但是要是这样就结束了,那这题基本等于没做。
所以我决定从头分析一下逻辑。
直接打开exe文件

是一个让user输入序列号的程序,而正确的序列号就是我们的flag。
int __cdecl main(int argc, const char **argv, const char **envp) { signed int
v3; // ebx char v4; // al int result; // eax int v6; // [esp+0h] [ebp-70h] int
v7; // [esp+0h] [ebp-70h] char v8; // [esp+12h] [ebp-5Eh] char v9[20]; //
[esp+14h] [ebp-5Ch] char v10; // [esp+28h] [ebp-48h] __int16 v11; // [esp+48h]
[ebp-28h] char v12; // [esp+4Ah] [ebp-26h] char v13; // [esp+4Ch] [ebp-24h]
strcpy(&v13, "437261636b4d654a757374466f7246756e");//把字符串赋给了v13 while ( 1 ) {
memset(&v10, 0, 0x20u); v11 = 0; v12 = 0; sub_40134B((int)aPleaseInputYou, v6);
//输出"Please input your serial:" scanf(aS, v9);//读取输入的字符串 if ( strlen(v9) > 0x11
)//长度限制 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 ) return _filbuf(&stru_408090); ++
stru_408090._ptr; return result; }
这一段程序就是把"437261636b4d654a757374466f7246756e"经过变换后和我们输入的作对比,再根据结果输出。

技术
©2019-2020 Toolsou All rights reserved,
份额已超宁德时代!LG化学确认将分拆电池业务部门Qt学习7——模态和非模态对话框数字滚动抽奖小程序vue 监听 Treeselect 选择项的改变 dedecms网站被黑 劫持到其他网站如何解决内存溢出和内存泄漏的区别、产生原因以及解决方案SQL Server 数据库词汇表1190 反转每对括号间的子串 leetcode蝗灾虫群上亿只很少发生碰撞 蝗虫要成自动驾驶功臣最优化方法总结:公式解、数值优化、求解思想