隨筆 - 1  文章 - 37  trackbacks - 0
          <2025年7月>
          293012345
          6789101112
          13141516171819
          20212223242526
          272829303112
          3456789

          留言簿(16)

          隨筆分類

          隨筆檔案

          文章分類

          文章檔案

          test

          搜索

          •  

          最新評論

          突擊了一個星期的匯編,再對照民間流傳的傳奇源碼(C++版本),基本摸清了這部分的代碼

          OD打開Mir3.exe(Mir3G_20070108) -> ASCII ->找到**%s/%s/%d/%d/%d/1/%d->雙擊,得到如下代碼


          這段代碼是將幾個參數,使用sprintf生成字符串,然后6BIT加密,以#%d%s!格式發送到服務器端
          0049E2D0  mov     eax, dword ptr [esp+14]          ; eax=arg5(第5個參數)
          0049E2D4  sub     esp, 600                                    ; 預留1536個存儲單元
          0049E2DA  push    esi                                           
          0049E2DB  push    edi
          0049E2DC  mov     edi, dword ptr [<&USER32.wsprint>;  USER32.wsprintfA   
          0049E2E2  push    eax                              ; /<%d>      ;eax入棧
          **%s/%s/%d/%d/%d/1/arg5
          0049E2E3  mov     eax, dword ptr [esp+618]         ; |  eax = arg3
          0049E2EA  mov     esi, ecx                         ; |
          0049E2EC  mov     ecx, dword ptr [esp+61C]         ; | ecx = arg4
          0049E2F3  mov     edx, ecx                         ; |             edx=ecx=arg4
          0049E2F5  xor     edx, FA0280AF                    ; |    edx=arg4異或FA0280AF 
          0049E2FB  push    edx                              ; |<%d>   edx入棧
          **%s/%s/%d/%d/arg4異或FA0280AF/1/arg5
          0049E2FC  mov     edx, eax                         ; |          edx=eax=arg3
          0049E2FE  xor     edx, ecx                         ; |            edx=arg3異或arg4
          0049E300  mov     ecx, dword ptr [esp+614]         ; |   ecx=arg1
          0049E307  xor     edx, 5580AF27                    ; |      edx = edx異或5580AF27
          0049E30D  push    edx                              ; |<%d>   edx入棧
          **%s/%s/%d/arg3異或arg4再異或5580AF27/arg4異或FA0280AF/1/arg5
          0049E30E  xor     eax, 3EB2C5CC                    ; |  eax = arg3異或3EB2C5CC
          0049E313  push    eax                              ; |<%d>
          **%s/%s/arg3異或3EB2C5CC/arg3異或arg4再異或5580AF27/arg4異或FA0280AF/1/arg5
          0049E314  mov     eax, dword ptr [esp+620]         ; | eax = arg2
          0049E31B  push    eax                              ; |<%s>
          **%s/arg2/arg3異或3EB2C5CC/arg3異或arg4再異或5580AF27/arg4異或FA0280AF/1/arg5
          0049E31C  push    ecx                              ; |<%s>
          **arg1/arg2/arg3異或3EB2C5CC/arg3異或arg4再異或5580AF27/arg4異或FA0280AF/1/arg5
          0049E31D  lea     edx, dword ptr [esp+220]         ; |  edx 指向上面預留的1536個存儲單元中最后512個單元的首地址
          0049E324  push    004CBFCC                         ; |**%s/%s/%d/%d/%d/1/%d
          0049E329  push    edx                              ; |s
          0049E32A  call    edi                              ; \wsprintfA  edx指向生成的明文字符串首地址
          0049E32C  add     esp, 20                      ; 前移32個存儲單元
          0049E32F  push    1FF                             512入棧  <加密函數第4個參數>
          0049E334  lea     eax, dword ptr [esp+20C]  eax =明文字符串
          0049E33B  push    eax                              ; /String  
          0049E33C  call    dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA 得到明文的長度,保存在eax中
          0049E342  push    eax                                   eax入棧   明文長度入棧<加密函數第3個參數>
          0049E343  lea     ecx, dword ptr [esp+10]     ecx=第一次入棧的edi的值,應該是某個成員變量
          0049E347  push    ecx                                   ecx入棧<加密函數第2個參數>
          0049E348  lea     edx, dword ptr [esp+214] 
          0049E34F  push    edx                                    明文字符串首<加密函數第1個參數>
          0049E350  call    004A0B10                           調用加密函數
          fnEncode(char *strSrc, char *strDest, int lenSrc, 512)
          ...................
          后面是發送信息

          posted on 2008-05-30 16:34 Phrancol Yang 閱讀(629) 評論(0)  編輯  收藏 所屬分類: 反匯編
          主站蜘蛛池模板: 沁水县| 同心县| 夹江县| 礼泉县| 鹤山市| 台州市| 名山县| 丽江市| 昌黎县| 山东省| 蓝山县| 庆云县| 大渡口区| 璧山县| 祁东县| 泰州市| 普洱| 安塞县| 嘉峪关市| 洪江市| 神池县| 晴隆县| 洱源县| 镇赉县| 太白县| 闽侯县| 嵩明县| 嘉荫县| 贵阳市| 南皮县| 胶州市| 佛山市| 北川| 瑞安市| 江陵县| 宁远县| 泸定县| 汕尾市| 横峰县| 海晏县| 昌宁县|