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

          留言簿(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 閱讀(623) 評論(0)  編輯  收藏 所屬分類: 反匯編
          主站蜘蛛池模板: 丽江市| 揭东县| 东台市| 玉溪市| 仁寿县| 宁强县| 巍山| 永州市| 嘉峪关市| 黄山市| 浦北县| 蓝田县| 垫江县| 全州县| 青阳县| 侯马市| 东乌珠穆沁旗| 行唐县| 乌拉特中旗| 凌源市| 碌曲县| 五莲县| 连城县| 卓资县| 兰考县| 法库县| 雷波县| 镇宁| 广汉市| 千阳县| 东平县| 色达县| 晋州市| 仙游县| 红河县| 平利县| 当雄县| 汪清县| 普兰店市| 新昌县| 广丰县|