先总体看看
int __usercall wmain@<eax>(int a1@<ebx>)
{
FILE *v1; // eax
FILE *v2; // eax
char v4; // [esp+3h] [ebp-405h]
char v5; // [esp+4h] [ebp-404h]
char v6; // [esp+5h] [ebp-403h]
char v7; // [esp+104h] [ebp-304h]
char v8; // [esp+105h] [ebp-303h]
char v9; // [esp+204h] [ebp-204h]
char v10; // [esp+205h] [ebp-203h]
char v11; // [esp+304h] [ebp-104h]
char v12; // [esp+305h] [ebp-103h]
printf("Come one! Crack Me~~~\n");
v11 = 0;
memset(&v12, 0, 0xFFu);
v9 = 0;
memset(&v10, 0, 0xFFu);
while ( 1 )
{
do
{
do
{
printf("user(6-16 letters or numbers):");// 输入用户名
scanf("%s", &v11);
v1 = (FILE *)sub_4024BE();
fflush(v1);
}
while ( !sub_401000(&v11) ); // 检查用户名合法性
printf("password(6-16 letters or numbers):");
scanf("%s", &v9); // 输入密码
v2 = (FILE *)sub_4024BE();
fflush(v2);
}
while ( !sub_401000(&v9) ); // 检查密码合法性
sub_401090(&v11); // 处理byte数组
v7 = 0;
memset(&v8, 0, 0xFFu);
v5 =

本文通过ida分析CrackMe程序,发现其在sub_401090中存在数组越界的现象,同时涉及反调试技术,如__readfsdword和GetStartupInfoW。通过动态调试,利用已知用户名welcomebeijing,绕过反调试机制,最终通过Python计算得出MD5加密结果。
1561

被折叠的 条评论
为什么被折叠?



