隨筆 - 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)  編輯  收藏 所屬分類: 反匯編
          主站蜘蛛池模板: 土默特左旗| 朔州市| 呼玛县| 长乐市| 策勒县| 毕节市| 舞钢市| 黎川县| 定结县| 乌兰县| 理塘县| 绩溪县| 锡林郭勒盟| 安庆市| 中西区| 石狮市| 札达县| 盘山县| 平乐县| 莎车县| 临安市| 安阳县| 清水县| 张家港市| 常宁市| 沙雅县| 九龙城区| 台安县| 长垣县| 嘉兴市| 永川市| 修武县| 湘阴县| 扬州市| 东辽县| 尉犁县| 海南省| 红安县| 高平市| 彭山县| 绍兴县|