突擊了一個(gè)星期的匯編,再對(duì)照民間流傳的傳奇源碼(C++版本),基本摸清了這部分的代碼
OD打開(kāi)Mir3.exe(Mir3G_20070108) -> ASCII ->找到**%s/%s/%d/%d/%d/1/%d->雙擊,得到如下代碼
這段代碼是將幾個(gè)參數(shù),使用sprintf生成字符串,然后6BIT加密,以#%d%s!格式發(fā)送到服務(wù)器端
0049E2D0 mov eax, dword ptr [esp+14] ; eax=arg5(第5個(gè)參數(shù))
0049E2D4 sub esp, 600 ; 預(yù)留1536個(gè)存儲(chǔ)單元
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 指向上面預(yù)留的1536個(gè)存儲(chǔ)單元中最后512個(gè)單元的首地址
0049E324 push 004CBFCC ; |**%s/%s/%d/%d/%d/1/%d
0049E329 push edx ; |s
0049E32A call edi ; \wsprintfA edx指向生成的明文字符串首地址
0049E32C add esp, 20 ; 前移32個(gè)存儲(chǔ)單元
0049E32F push 1FF 512入棧 <加密函數(shù)第4個(gè)參數(shù)>
0049E334 lea eax, dword ptr [esp+20C] eax =明文字符串
0049E33B push eax ; /String
0049E33C call dword ptr [<&KERNEL32.lstrlenA>] ; \lstrlenA 得到明文的長(zhǎng)度,保存在eax中
0049E342 push eax eax入棧 明文長(zhǎng)度入棧<加密函數(shù)第3個(gè)參數(shù)>
0049E343 lea ecx, dword ptr [esp+10] ecx=第一次入棧的edi的值,應(yīng)該是某個(gè)成員變量
0049E347 push ecx ecx入棧<加密函數(shù)第2個(gè)參數(shù)>
0049E348 lea edx, dword ptr [esp+214]
0049E34F push edx 明文字符串首<加密函數(shù)第1個(gè)參數(shù)>
0049E350 call 004A0B10 調(diào)用加密函數(shù)
fnEncode(char *strSrc, char *strDest, int lenSrc, 512)
...................
后面是發(fā)送信息