突击了一个星期的汇编,再对照民间流传的传奇源码(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 阅读(618)
评论(0) 编辑 收藏 所属分类:
反汇编