隨筆 - 1  文章 - 37  trackbacks - 0
          <2025年5月>
          27282930123
          45678910
          11121314151617
          18192021222324
          25262728293031
          1234567

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          test

          搜索

          •  

          最新評論

          根據3EF找到生成命令體的函數,該函數只有一個參數——消息體,轉到上一個函數得到以下代碼

            push    1FFF           ;1FFF入棧
            lea     eax, dword ptr [esp+CAC] ;(3244)  距離棧頂811個存儲單元
            push    eax            ;eax入棧 解密后要存入的地址入棧
            add     edi, 10        ;edi=從字符串第17個字節開始往后的串
            push    edi            ;密文入棧
            call    004A0BD0       ;跟進發現這是普通的一次解密,解密后數據存在esp+CAC里
            mov     byte ptr [esp+eax+CA8], 0
            xor     eax, eax
            mov     ecx, 100       ;ecx=100 (256) 循環次數
            lea     edi, dword ptr [esp+3F8]   ;edi
            rep     stos dword ptr es:[edi]    ;
            lea     ecx, dword ptr [esp+3F8]  
            push    ecx
            lea     edx, dword ptr [ebx+3CD864]
            push    edx
            mov     ecx, ebx
            call    0042C440                   ;二次解密,生成回復密文
            lea     eax, dword ptr [esp+3F8]
            push    eax
            mov     ecx, 004D5C70 
            call    0049F770        ;調用messageSend(char* msg)
            lea     eax, dword ptr [esp+CA8]
            lea     edx, dword ptr [eax+1]
          L023:
            mov     cl, byte ptr [eax]
            inc     eax
            test    cl, cl
            jnz L023
            sub     eax, edx
            cmp     eax, 3C
            jnz     0043BF9D
            mov     ecx, dword ptr [esp+CA8]
            mov     edx, dword ptr [esp+CAC]
            mov     eax, dword ptr [esp+CB0]
            mov     dword ptr [esp+38], ecx
            mov     ecx, dword ptr [esp+CB4]
            mov     dword ptr [esp+44], ecx
            mov     ecx, dword ptr [esp+CC0]
            mov     dword ptr [esp+3C], edx
            mov     edx, dword ptr [esp+CB8]
            mov     dword ptr [esp+40], eax
            mov     eax, dword ptr [esp+CBC]
            mov     dword ptr [esp+54], ecx
            mov     ecx, dword ptr [esp+CCC]
            mov     dword ptr [esp+48], edx
            mov     edx, dword ptr [esp+CC4]
            mov     dword ptr [esp+50], eax
            mov     eax, dword ptr [esp+CC8]
            mov     dword ptr [esp+60], ecx
            mov     ecx, dword ptr [esp+CD8]
            mov     dword ptr [esp+58], edx
            mov     edx, dword ptr [esp+CD0]
            mov     dword ptr [esp+5C], eax
            mov     eax, dword ptr [esp+CD4]
            mov     dword ptr [esp+24], ecx
            lea     ecx, dword ptr [esp+1C]
            mov     dword ptr [esp+1C], edx
            mov     edx, dword ptr [esp+CDC]
            mov     dword ptr [esp+20], eax
            mov     eax, dword ptr [esp+CE0]
            push    ecx
            mov     ecx, ebx
            mov     byte ptr [esp+50], 0
            mov     byte ptr [esp+68], 0
            mov     dword ptr [esp+2C], edx
            mov     dword ptr [esp+30], eax
            mov     byte ptr [esp+34], 0
            call    0042BD60
            lea     edx, dword ptr [esp+38]
            push    edx
            mov     ecx, ebx
            mov     byte ptr [ebx+49B160], al
            mov     byte ptr [ebx+49B161], ah
            call    0042BD60
            mov     word ptr [ebx+49B162], ax
            lea     eax, dword ptr [esp+50]
            push    eax
            mov     ecx, ebx
            call    0042BD60
            mov     word ptr [ebx+49B164], ax
            mov     ecx, dword ptr [esp+54AC]
            mov     dword ptr fs:[0], ecx
            pop     edi
            pop     esi
            pop     ebx
            mov     esp, ebp
            pop     ebp
            retn    4


          分析以上代碼可以簡單得出以下結論
          1. 從call  004A0BD0 的調用可以簡單分析出二次密文可能也是標準消息結構
          2. 通過對比未更新版本與最新版本對3EF的發送情況,未更新版本發送3EF時,消息體是空,命令體其他參數不為0,再細分析,
          未更新的版本的3EF其實就是割肉的命令...........
          最新版本的客戶端收到二次密文后,經過一些處理,以3EF為命令發向服務器
          3. 從add edi, 10可以猜測,二次密文的命令體可能是迷惑人用的
          4. 從call 0049F770這個調用斷定 esp+3F8 就是二次解密后的明文
          5. 對于call 0042C440這個調用,可以猜測,這個就是二次解密的函數
          6. 服務器發來的密文對于本次解密是沒有影響的,只是對它進行了一些操作,生成了4個數并進行如下保存
            mov     byte ptr [ebx+49B160], al
            mov     byte ptr [ebx+49B161], ah
            mov     word ptr [ebx+49B162], ax
            mov     word ptr [ebx+49B164], ax
          7. 二次解密函數有2個參數: arg1 = dword ptr [ebx+3CD864] , arg2 = [esp+3F8]
             也就是根據dword ptr [ebx+3CD864]來生成解密明文,并存入地址esp+3F8,于是ebx+3CD864就成了解密的關鍵

          posted on 2008-06-01 20:12 Phrancol Yang 閱讀(320) 評論(0)  編輯  收藏 所屬分類: 反匯編
          主站蜘蛛池模板: 山东| 宜春市| 崇州市| 宽城| 南安市| 甘洛县| 治多县| 澳门| 含山县| 滦南县| 武清区| 宁武县| 读书| 平罗县| 神农架林区| 灌云县| 木兰县| 布尔津县| 康定县| 安国市| 莱阳市| 赤城县| 云霄县| 米林县| 铅山县| 静宁县| 宜章县| 府谷县| 磴口县| 盱眙县| 嘉善县| 灵宝市| 左贡县| 佛教| 塔河县| 平江县| 通州市| 龙井市| 阜宁县| 共和县| 梁河县|