2016騰訊安全挑戰賽第一輪-PC游戲方向

0x00 查殼


無殼的VC程序

0x01 測試


沒有消息彈窗,嘗試對函數下斷點。

OD載入后,Ctrl+N查找函數,找到GetDlgItem、

程序運行起來,等輸入完后點擊確定后程序斷下。一路F8就來到這里

00401EED   .  E8 6A5B0000           call Tencent2.00407A5C
00401EF2   .  8B40 20               mov eax,dword ptr ds:[eax+0x20]          ; |
00401EF5   .  8B3D 24334200         mov edi,dword ptr ds:[<&USER32.SendMessa>; |USER32.SendMessageA
00401EFB   .  50                    push eax                                 ; |hWnd
00401EFC   .  FFD7                  call edi                                 ; \SendMessageA
00401EFE   .  8D8C24 A0010000       lea ecx,dword ptr ss:[esp+0x1A0]
00401F05   .  51                    push ecx
00401F06   .  6A 40                 push 0x40
00401F08   .  6A 0D                 push 0xD
00401F0A   .  68 E9030000           push 0x3E9
00401F0F   .  8BCE                  mov ecx,esi
00401F11   .  E8 465B0000           call Tencent2.00407A5C
00401F16   .  8B50 20               mov edx,dword ptr ds:[eax+0x20]
00401F19   .  52                    push edx
00401F1A   .  FFD7                  call edi
00401F1C   .  8D8424 9C000000       lea eax,dword ptr ss:[esp+0x9C]
00401F23   .  C64424 74 D7          mov byte ptr ss:[esp+0x74],0xD7
00401F28   .  C64424 75 A2          mov byte ptr ss:[esp+0x75],0xA2
00401F2D   .  C64424 76 B2          mov byte ptr ss:[esp+0x76],0xB2
00401F32   .  C64424 77 E1          mov byte ptr ss:[esp+0x77],0xE1
00401F37   .  885C24 78             mov byte ptr ss:[esp+0x78],bl
00401F3B   .  885C24 79             mov byte ptr ss:[esp+0x79],bl
00401F3F   .  885C24 7A             mov byte ptr ss:[esp+0x7A],bl
00401F43   .  885C24 7B             mov byte ptr ss:[esp+0x7B],bl
00401F47   .  885C24 7C             mov byte ptr ss:[esp+0x7C],bl
00401F4B   .  C64424 7D CA          mov byte ptr ss:[esp+0x7D],0xCA
00401F50   .  C64424 7E A7          mov byte ptr ss:[esp+0x7E],0xA7
00401F55   .  C64424 7F B0          mov byte ptr ss:[esp+0x7F],0xB0
00401F5A   .  C68424 80000000 DC    mov byte ptr ss:[esp+0x80],0xDC
00401F62   .  C68424 81000000 B3    mov byte ptr ss:[esp+0x81],0xB3
00401F6A   .  C68424 82000000 C9    mov byte ptr ss:[esp+0x82],0xC9
00401F72   .  C68424 83000000 B9    mov byte ptr ss:[esp+0x83],0xB9          ;  這里是填好顯示的內容,注冊失敗,注冊成功
00401F7A   .  C68424 84000000 A6    mov byte ptr ss:[esp+0x84],0xA6

這里是將顯示內容存起來,等下計算完后使用。
函數在401E60位置,IDA打開程序后查看代碼


if ( (unsigned int)(v4 - 6) > 0xE )           // 用戶名長度要求goto LABEL_24;                           // 注冊失敗···do{                                             // 將用戶名進行運算v6 = v5 % v4;v7 = &v44[v5++];*v7 += v4 * ((_DWORD)v7 + 20160126 - (_DWORD)v44) * lParam[v6];}  ···sub_401960((int)&v17, v9, (int)&v32); //計算輸入的serial···if ( v19 - (_DWORD)v18 != 20 )  //這里是由上面的401960算出來的,不滿足就注冊失敗{v52 = -1;sub_4022C0(&v17);
LABEL_24:v14 = 0;goto LABEL_25;}···do{v12 = *(_DWORD *)&v44[v11] / 10;            // 這里是將上面的用戶名運算結果看作是有符號數,然后除以10v13 = v19 - (_DWORD)v10;*(int *)((char *)&v21 + v11) = v12;if ( v11 >= v13 ){_invalid_parameter_noinfo(v12);v10 = (char *)v18;}*(int *)((char *)&v26 + v11) = *(_DWORD *)&v10[v11]; //這里是serial算出來的值v11 += 4;}while ( v11 < 20 );if ( v30 + v21 != v28 || v28 + v22 != 2 * v30 || v29 + v23 != v26 || v26 + v24 != 2 * v29 || v25 + v27 != 3 * v23 )// 這里比較是否滿足條件,滿足條件就成功

這樣大致可以看出程序的流程了。

Created with Rapha?l 2.2.0開始輸入用戶名長度是否小于21且大于6?對用戶名進行運算調用sub_401960比較計算serial結果長度是否等于20?計算出來的serial結果是否滿足條件顯示注冊成功結束顯示注冊錯誤yesnoyesnoyesno

具體流程得出后,可以逐一分析了。

0x02分析

1 對用戶名進行運算

 do{                                             // 將用戶名進行運算v6 = v5 % v4;                  //v4是用戶名長度v7 = &v44[v5++];*v7 += v4 * ((_DWORD)v7 + 20160126 - (_DWORD)v44) * lParam[v6];}while ( v5 < 16 );

這個v7的地址-v44的地址等于v5,故可以轉化為

*v7 += v4*(20160126+v5)*lParam[v6];

2 調用sub_401960

···   //省略v8 = v14 + 1;v32 = v15 + 1;v31 = v8;if ( v15 == 3 )  //意味著每4個字符就在進入這個判斷里進行運算{v16 = 0;do{v26 = *((_BYTE *)&v30 + v16);*((_BYTE *)&v30 + v16++) = sub_402420(&v26);// 計算字符在42E040表中的位置}while ( v16 < 4 );v27 = 4 * v30 + ((BYTE1(v30) >> 4) & 3);v17 = BYTE2(v30) << 6;v28 = 16 * BYTE1(v30) ^ HIBYTE(v17) & 0xF;v29 = BYTE3(v30) + v17;v18 = 0;
···//省略
//如果說輸入的serial長度不為4的倍數,那就到這里來繼續進行運算do{v26 = *((_BYTE *)&v30 + v21);*((_BYTE *)&v30 + v21++) = sub_402420(&v26);}while ( v21 < 4 );v27 = 4 * v30 + ((BYTE1(v30) >> 4) & 3);v29 = BYTE3(v30) + (BYTE2(v30) << 6);result = v32 - 1;v22 = 0;v28 = 16 * BYTE1(v30) ^ (BYTE2(v30) >> 2) & 0xF;

這個也很好理解
看到v27,v28,v29就可以看出這里的運算時將輸入的serial每4個字符轉成3個值。

3 比較serial長度
剛剛說到是將serial的每4個字符轉為3個值,所以說當轉化的值的個數為20個時才允許繼續往下,測試幾次就知道是只有當輸入的serial長度為27時,轉化得到的個數才為20

4 滿足條件比較
注意到輸入的用戶名需要進行兩次運算,第一是計算出值。第二次是將這些值除以10
這里假設對用戶名進行兩次運算后儲存在U中,而對serial計算的結果儲存在K中,當滿足下面條件時才能注冊成功

  1. U1U_1U1? + K5K_5K5? == K3K_3K3?
  2. U2U_2U2? + K3K_3K3? == 2K52K_52K5?
  3. K4K_4K4? + U3U_3U3? == K1K_1K1?
  4. U4U_4U4? + K1K_1K1? == 2K42K_42K4?
  5. U5U_5U5? + K2K_2K2? == 3U43U_43U4?

變換一下位置,就能通過U來計算出K了,然后可以枚舉一下所有可能,也就是0-63,就能找出滿足K的字符串

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

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

相關文章

49-今日交易總結.(2015.1.13)

49-今日交易總結今天交易情況不好&#xff0c;主要犯了虧損時還連續加倉的錯誤。作為一個交易者&#xff0c;虧損時&#xff0c;繼續加倉&#xff0c;認為市場會向交易的方向變化&#xff0c;一次性把虧損的全部撈回來&#xff0c;還能賺一筆。這是一種賭徒心理。永遠不要再虧損…

電商導購過冬:蘑菇街醞釀出售 美麗說轉型時尚

一度紅火的第三方導購網站正因為阿里巴巴過山車式的態度而呈現出急劇下滑的軌跡。 2011年&#xff0c;以美麗說、蘑菇街為代表的導購網站蜂擁而起。彼時&#xff0c;兩者還能頻繁出現在阿里巴巴的官方活動中。然而&#xff0c;2012年5月&#xff0c;阿里巴巴集團董事局主席馬云…

JavascriptDOM(三)

簡介 今天學習第二天的知識,js和BOM對象,再接再厲,fighting~學習原則 腳踏實地的走好每一步,要想學好高級部分,基礎知識必須扎實呀 掌握基本語法,完成小案例,寫博客作總結,基本就是這個節奏,下面我們一起快速入門吧JavaScript快速入門 1. js簡介 1.js基于對象和事件驅動的腳本語…

看雪 2016CrackMe 攻防大賽 - 1-Crack_Me-涼颼颼

環境&#xff1a; Windows xp 工具&#xff1a; IDA EXEINFOPE OD 0x00 查殼 EXEINFOPE查殼&#xff0c; 無殼 0x01 分析 if ( (unsigned __int16)wParam 0x40B ) // 成功{*(_OWORD *)v22 xmmword_41DB98;v25 0;v23 xmmword_41DBA8;v24 xmmword_41DBB8;memset_4039D0…

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;進行…