看雪 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

  do{v18 = v3[v17];if ( v18 >= 0x61 && v18 <= 0x7A )v3[v17] = v18 - 32;++v17;}while ( v17 < v15 );                      // 輸入內容小寫字母轉大寫}
do{if ( v20 ){v23 = *v22;                             // 輸入內容v24 = v33;                              // A-Zv25 = 0;while ( v23 != *v24 )                   // 判斷輸入的字符是否在表中{v24 = &v33[++v25];if ( !v33[v25] )                      // 是否超出A-Z范圍goto LABEL_37;}*(_WORD *)v21 = v33[v25];               // 在范圍里的話就保存起來v21 = (__int64 *)((char *)v21 + 2);
LABEL_37:v20 = v33[0];}v22 = &v3[++v19];                         // 下一個字符}while ( v3[v19] );

如果輸入的內容是字母就保存起來。

 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個就錯誤。
然后將輸入內容與常數值比較,不滿足也錯誤。

 do{*(_WORD *)v4 = v5;v4 = (__int128 *)((char *)v4 + 2);          // 將1-9放入v4++v5;}while ( v5 <= 0x39 );v6 = 0;v7 = v2;if ( v2 && *v2 ){do{++v7;++v6;                                     // 計算輸入長度}while ( *v7 );}v8 = sub_4028D0((char *)&v20, &v2[*v3]);      // 將1-9和輸入的內容拼接,開始位置為嘗試的次數v9 = &v2[v6 - 1];                             // 取最后一個字符v19 = v8;v10 = 0;v17 = v9;if ( (_WORD)v20 ){v11 = (char *)&v20;v12 = *v9 & 1;while ( 1 ){v13 = v12 + (*(_WORD *)v11 >> 2);if ( v13 == 0x32 )break;if ( v13 != 0x64 ){v11 = (char *)&v20 + 2 * ++v10;         // 下一個字符if ( *(_WORD *)v11 )continue;}v8 = v19;goto LABEL_12;}}else{
LABEL_12:v14 = &v20;v15 = 0x31;while ( *(_WORD *)v14 == *(_WORD *)((char *)v14 + (char *)v2 - (char *)&v20) )// 判斷輸入的第1個字符是否為1,// 第2個字符是否為2,由此可知前6個字符為1215pb{v15 += 6;v14 = (__int128 *)((char *)v14 + 2);if ( v15 > 0x39 ){if ( *v2 + *((_WORD *)v8 + 9) == 0x63 && *v17 == *v18 + *((_WORD *)v8 + 6) )// v8[9]=='2' && s[6]==v8[6]+嘗試次數,v8[6]必定為7,// v8[9]為輸入內容[嘗試次數],由上面可知這個嘗試次數必定為1// 則s[6]必定為'8',故結果為1215bp8return 1;                             // 一定要返回1return 0;}}}

本文來自互聯網用戶投稿,該文觀點僅代表作者本人,不代表本站立場。本站僅提供信息存儲空間服務,不擁有所有權,不承擔相關法律責任。
如若轉載,請注明出處:http://www.pswp.cn/news/376331.shtml
繁體地址,請注明出處:http://hk.pswp.cn/news/376331.shtml
英文地址,請注明出處:http://en.pswp.cn/news/376331.shtml

如若內容造成侵權/違法違規/事實不符,請聯系多彩編程網進行投訴反饋email:809451989@qq.com,一經查實,立即刪除!

相關文章

JS 或css教程 識別 IE版本的幾種方法

今天收藏了這幾種關于識別ie版本的幾種代碼&#xff0c;有需要的朋友參考一下&#xff1a;var isIE!!window.ActiveXObject;var isIE6isIE&&!window.XMLHttpRequest;var isIE8isIE&&!!document.documentMode;var isIE7isIE&&!isIE6&&!isIE8;if…

使用CSDN-markdown編輯器

這里寫自定義目錄標題歡迎使用Markdown編輯器新的改變功能快捷鍵合理的創建標題&#xff0c;有助于目錄的生成如何改變文本的樣式插入鏈接與圖片如何插入一段漂亮的代碼片生成一個適合你的列表創建一個表格設定內容居中、居左、居右SmartyPants創建一個自定義列表如何創建一個注…

C++ vector類詳解

轉自http://blog.csdn.net/whz_zb/article/details/6827999 vector簡介 vector是STL中最常見的容器&#xff0c;它是一種順序容器&#xff0c;支持隨機訪問。vector是一塊連續分配的內存&#xff0c;從數據安排的角度來講&#xff0c;和數組極其相似&#xff0c;不同的地方就是…

ViewPager的使用方法和實現過程

看圖先&#xff1a; 頁面中填充內容是隨機關鍵詞飛入和飛出動畫效果&#xff0c;隨后會更新&#xff0c;現在請先無視吧 首先是 導入jar包 下載地址&#xff1a; android-support-v4.jar 布局文件里添加viewPager布局 [html] view plaincopyprint?<android.support.v4.vi…

如何通過瀏覽器在所有響應內容中查找文本

使用瀏覽器的開發者工具查找響應文件的內容 ** Chrome ** 版本&#xff1a; 快捷鍵&#xff1a;CtrlShiftF 可以看到已經查找出來了 ** firefox ** 版本

【Leetcode】【Easy】Implement strStr()

Implement strStr(). Returns the index of the first occurrence of needle in haystack, or -1 if needle is not part of haystack. 解題&#xff1a; 本題為典型的KMP算法考察題&#xff0c;KMP算法描述為&#xff1a; 設主串S&#xff0c;匹配串P&#xff0c;i為S的索引下…

Android Animations動畫使用詳解

一、動畫類型 Android的animation由四種類型組成&#xff1a;alpha、scale、translate、rotate XML配置文件中 alpha漸變透明度動畫效果scale漸變尺寸伸縮動畫效果translate畫面轉換位置移動動畫效果rotate畫面轉移旋轉動畫效果Java Code代碼中 AlphaAnimation漸變透明度動畫效…

Jenkins入門指南

新手學習使用Jenkins 安裝好Jenkins后如何運行腳本 1.新建item 2.輸入任務名稱&#xff0c;選擇項目類型&#xff0c;點擊確定 3.填個描述就好了&#xff0c;新手學jenkins&#xff0c;其他都不看&#xff0c;跑起來再說 4.點這個高級&#xff0c;選擇你要運行的腳本所在…

Sublime Text 3 史上最性感的編輯器

↑ ↑ ↑ ↑ ↑ 請看文件夾 ↑ ↑ ↑ ↑ ↑ 下載 / 安裝 windows / MAC OS 官網下載&#xff0c;雙擊安裝&#xff0c;這個都會吧&#xff5e; linux linux下安裝&#xff0c;一種辦法是從官網下載 tar.bz &#xff0c;手動安裝。 這里介紹用 apt-get 自己主動安裝方法&#xf…

[轉]怎么查看和修改 MySQL 的最大連接數?

使用 MySQL 數據庫的站點&#xff0c;當訪問連接數過多時&#xff0c;就會出現 "Too many connections" 的錯誤。出現這種錯誤有兩種情況&#xff0c;一種是網站訪問量實在太大&#xff0c;服務器已經負擔不起&#xff0c;此時就應該考慮負載均衡或者其它減少服務器壓…

對qps、tps、pv、uv的理解

QPS &#xff08;Queries Per Second&#xff09;&#xff1a;每秒查詢數&#xff08;個別地方叫每秒查詢率&#xff1f;每秒查詢率是個奇怪的東西&#xff0c;每小時時速&#xff1f;&#xff09;&#xff0c;表示系統在一秒內處理的查詢次數。 TPS&#xff08;Transactions …

swift入門之TableView

IOS8更新了&#xff0c;oc還將繼續但新增了swift語言&#xff0c;能夠代替oc編寫ios應用&#xff0c;本文將使用swift作為編寫語言&#xff0c;為大家提供step by step的教程。 工具 ios每次更新都須要更新xcode&#xff0c;這次也不例外&#xff0c;但使用xcode6&#xff0c;須…

Training-ActionBar

閱讀&#xff1a;http://developer.android.com/training/basics/actionbar/index.html 對于API11以下的兼容&#xff1a; Update your activity so that it extends ActionBarActivity. For example: public class Main Activit yextends ActionBarActivity{...} In your mani…

Jmeter BeanShell學習(一) - BeanShell取樣器(一)

通過利用BeanShell取樣器設置請求發送的參數。 第一步&#xff1a;添加BeanShell取樣器 第二步&#xff1a;在BeanShell中輸入執行的代碼 log.info("腳本開始執行"); //意思是將字符串輸出到日志消息中 vars.put("username","123163.com");//…

【轉】關于Python腳本開頭兩行的:#!/usr/bin/python和# -*- coding: utf-8 -*-的作用 – 指定文件編碼類型...

原文網址&#xff1a;http://www.crifan.com/python_head_meaning_for_usr_bin_python_coding_utf-8/ #!/usr/bin/python 是用來說明腳本語言是python的 是要用/usr/bin下面的程序&#xff08;工具&#xff09;python&#xff0c;這個解釋器&#xff0c;來解釋python腳本&#…

分布式系統介紹-PNUTS

PNUTS是Yahoo!的分布式數據庫系統&#xff0c;支持地域上分布的大規模并發操作。它根據主鍵的范圍區間或者其哈希值的范圍區間將表拆分為表單元&#xff08;Tablet&#xff09;&#xff0c;多個表單元存儲在一個服務器上。一個表單元控制器根據服務器的負載情況&#xff0c;進行…

Jmeter BeanShell學習(一) - BeanShell取樣器(二)

利用BeanShell取樣器獲取接口返回的JSON格式的結果&#xff0c;并將該結果寫入到文件。 第一步&#xff1a;添加BeanShell取樣器 前面幾個取樣器的內容查看&#xff1a; https://blog.csdn.net/goodnameused/article/details/96985514 第二步&#xff1a;查看返回的結果格式 …

在數據庫中outlet、code、outline為聯合組件。hibarnate插入可如此插入

hibarnate對象的映射文件如下 <id name"outlet" type"string"> <column name"OUTLET" length"10" /> <generator class"assigned" /> </id> <!-- <property name"code" type"…

日怎么沒人告訴我這博客可以改博文界面的顯示寬度的

于是我妥妥的回歸了。 weebly雖然定制功能強大&#xff0c;還能穿越時空發博文&#xff0c;但是太麻煩了&#xff0c;而且用著也不像一個博客。 既然解決了這個問題&#xff0c;那Lofter除了行間距也沒什么缺點了&#xff0c;接著用吧&#xff0c;反正weebly也傳不了大圖&#…

160 - 50 DueList.5

環境&#xff1a; Windows xp sp3 工具&#xff1a; Ollydbg exeinfope 0x00 查殼 可以看出程序有加殼&#xff0c;那么我們下一步就是脫殼了。 0x01 脫殼 看上去沒什么特別的地方&#xff0c;就直接 單步跟蹤法 來脫殼吧 近call F7&#xff0c;遠call F8 來到這里 哈&…