看雪 2016CrackMe 攻防大赛 - 1-Crack_Me-凉飕飕
生活随笔
收集整理的這篇文章主要介紹了
看雪 2016CrackMe 攻防大赛 - 1-Crack_Me-凉飕飕
小編覺得挺不錯的,現在分享給大家,幫大家做個參考.
環境:
Windows xp
工具:
IDA
EXEINFOPE
OD
0x00 查殼
EXEINFOPE查殼,
無殼
0x01 分析
if ( (unsigned __int16)wParam == 0x40B ) // 成功{*(_OWORD *)v22 = xmmword_41DB98;v25 = 0;v23 = xmmword_41DBA8;v24 = xmmword_41DBB8;memset_4039D0(&v26, 0, 150);MessageBoxW(hWnd, v22, L"Successed", 0);return 0;}if ( (unsigned __int16)wParam == 0x40C ){sub_402970((_WORD *)lParam, &v21);v9 = (_WORD *)sub_402CD6(2 * (v21 + 1) | -((unsigned __int64)(unsigned int)(v21 + 1) >> 31 != 0));strcpy_402870((int)v9, (_WORD *)lParam);sub_4029B0(v9);sub_402A00(v9);memset_4039D0((_BYTE *)v22, 0, 200);strcpy_402870((int)v22, v9);release_402CDF(v9);v10 = 0;if ( v22[0] ){v11 = 0;v12 = v22;do{++v10;*v12 ^= *(_WORD *)(v11 + lParam);v11 = 2 * v10;v12 = &v22[v10];}while ( *v12 );}if ( sub_402810((char *)lParam, (char *)v22) )SendMessageW(hWnd, 0x111u, 0x40Au, 0);return 0;}if ( (unsigned __int16)wParam == 1039 ) // 0x40F{MessageBoxW(0, L"something you lost!", L"Failed", 0);return 0;}return DefWindowProcW(hWnd, 0x111u, wParam, lParam);}if ( (unsigned __int16)wParam == 0x40A ){*(_OWORD *)Text = xmmword_41DB60;v28 = xmmword_41DB70;v29 = xmmword_41DB80;_mm_storel_epi64((__m128i *)&v30, _mm_loadl_epi64((const __m128i *)&qword_41DB90));memset_4039D0(&v31, 0, 44);MessageBoxW(hWnd, Text, L"Failed", 0);return 0;}`可知wParam == 0x40B時彈出成功對話框。
if ( a1 ){if ( a2 ) // 第2次調用時執行這里{v8 = debug_4048DE();memset_4039D0(&String, 0, 200);GetWindowTextW(*((HWND *)v2 + 3), &String, 200);// 讀取輸入內容v4 = 0; // 輸入內容長度v5 = &String;if ( String ){do{++v5;++v4;}while ( *v5 );}v6 = (_WORD *)sub_402CD6(2 * (v4 + 1) | -((unsigned __int64)(v4 + 1) >> 31 != 0));if ( debug_4048DE() - v8 > 2 ) // 猜測是測試是否在被調試{sub_404BB1();JUMPOUT(*(_DWORD *)byte_401E45);}strcpy_402870((int)v6, &String); // v6是個地址,輸入內容長度xor0x5if ( v4 >= 7 ){if ( v4 <= 7 ) // 輸入內容長度是否為7{sub_401A60((int)v2, v6); // 下一關return;}v7 = 0x40D;}else{v7 = 0x40E;}SendMessageW(*((HWND *)v2 + 1), v7, 0, 0);release_402CDF(v6);return;}if ( sub_401C00(a1) // 檢查輸入內容是否含有'b'&& (memset_4039D0(&String, 0, 200),GetWindowTextW(*((HWND *)v2 + 3), &String, 100),sub_402A50(v3, (__int16 *)&String, 'p')) )// 檢查輸入內容是否含有'p'{sub_401CB0(v2, 1);}else{SendMessageW(*((HWND *)v2 + 1), 0x111u, 0x40Fu, 0);}}首先是判斷輸入內容里是否含有’b’、'p’這兩個字符
然后再判斷輸入內容長度是否為7
如果輸入的內容是字母就保存起來。
v27 = &v35; // 提取出來的字符if ( (_WORD)v35 ){do{v27 = (__int64 *)((char *)v27 + 2);++v26;}while ( *(_WORD *)v27 );if ( v26 == 2 ) // 如果有兩個字符是在表中{LODWORD(v35) = 0x350031; // 這里確定了輸入內容第3位到第6位只能是15pbHIDWORD(v35) = &unk_420050;v28 = v3 + 2;v36 = 0;v29 = 0;while ( *((_WORD *)&v35 + v29) == *v28 ){++v29;++v28;if ( v29 >= 4 ){if ( !sub_401740((_DWORD *)v2, v3) ) // v2嘗試次數break;v31 = 0x40B;return PostMessageW(*(HWND *)(v2 + 4), 0x111u, v31, 0);// 成功}}}}v31 = 0x40A;return PostMessageW(*(HWND *)(v2 + 4), 0x111u, v31, 0);統計輸入內容是字母的個數,不等于2個就錯誤。
然后將輸入內容與常數值比較,不滿足也錯誤。
總結
以上是生活随笔為你收集整理的看雪 2016CrackMe 攻防大赛 - 1-Crack_Me-凉飕飕的全部內容,希望文章能夠幫你解決所遇到的問題。
- 上一篇: “惟见独飞鸟”下一句是什么
- 下一篇: 如何通过浏览器在所有响应内容中查找文本