网上找了个遍也找不到源码,不过现在有了,虽然是汇编的,虽然版本老了些
使用ida提取的,走了很多弯路,也花了很多时间,最终编译通过可运行,在看到画面的那一刹那,挺激动的
加了个C入口函数winmain,汇编和C之间可以混合编程,希望有朝一日变成C代码,目前汇编代码量16W行左右
游戏已经去除保护,可以随意调试,也有做一些小的修改
http://download.csdn.net/detail/wy24789/8590657
52 个解决方案
#1
感谢分享 我下来看看
#2
感谢分享
#3
#include "D:\\Administrator\\Documents\\Visual Studio 2008\\Projects\\toTraceWin\\toTraceWin.h"
居然有这么一行,楼主告诉我怎么才能编译通过
居然有这么一行,楼主告诉我怎么才能编译通过
#4
#5
注释掉,我自己输出调试信息的
使用masm32和vc6编译
#6
看到画面的那一刹那,挺激动的
#7
汇编代码量16W行左右?
这不是一般的恐怖
这不是一般的恐怖
#8
这个是用来干嘛的?
#9
奇迹是用汇编写的?
#10
不容易,不容易,
#11
#12
好厉害,谢谢分享!
#13
楼主辛苦了,支持楼主的分享!~
#14
腻害了 是逆向工程产生的汇编吗
#15
learning
#16
用ida做的,其中变量很关键,最好在ida中先分析好,分析出来的变量名也要检查,有时会用个简写名,甚至关键字,后面就麻烦了,最好是原始名比如byte_50124这样的,不会冲突也直观,后面好对照着找问题, 在这份源码中应该还隐藏着直接地址,比如应该是mov eax,byte_50124这样的,代码可能是mov eax,50124h,像这样的问题改了很多了
最初这些数据变量都是在asm文件里的,不过.data?块的东西太多,编译不过,一直等待,才转到C,而C文件编译后变量在内存中的顺序全变了,就改成了一个变量char dword_485CDC[140000000];其它变量就加上它们之间的差值,比如你下面这样:
extern dword_485CDC:byte
byte_4875DC equ dword_485CDC + 6400
byte_48D9DC equ dword_485CDC + 32000
dword_48D9E0 equ dword_485CDC + 32004
dword_48F2E4 equ dword_485CDC + 38408
有些乱,先发个图吧,现在有发现两bug,一是地上会多出些东西,二是角色属性面板不正常,不能加点
完整客户端和服务端下载,供测试用,请自行杀毒
http://pan.baidu.com/s/1m7Fau
再补充个linkall.bat文件
vc6不怎么好调试,汇编和源码没同步,od挺好的,编译时传全路径就能找到源码了,不用把源码复制到运行目录
最初这些数据变量都是在asm文件里的,不过.data?块的东西太多,编译不过,一直等待,才转到C,而C文件编译后变量在内存中的顺序全变了,就改成了一个变量char dword_485CDC[140000000];其它变量就加上它们之间的差值,比如你下面这样:
extern dword_485CDC:byte
byte_4875DC equ dword_485CDC + 6400
byte_48D9DC equ dword_485CDC + 32000
dword_48D9E0 equ dword_485CDC + 32004
dword_48F2E4 equ dword_485CDC + 38408
有些乱,先发个图吧,现在有发现两bug,一是地上会多出些东西,二是角色属性面板不正常,不能加点
完整客户端和服务端下载,供测试用,请自行杀毒
http://pan.baidu.com/s/1m7Fau
再补充个linkall.bat文件
echo off
set LIB="\Program Files\Microsoft Visual Studio\VC98\Lib"
set baseLib=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib
if not exist rsrc.obj goto nores
echo on
"\Program Files\Microsoft Visual Studio\VC98\bin\Link.exe" /INCREMENTAL:NO /SUBSYSTEM:WINDOWS *.obj rsrc.obj %baseLib% /OUT:%1
goto TheEnd
:nores
echo on
"\Program Files\Microsoft Visual Studio\VC98\bin\Link.exe" /INCREMENTAL:NO /DEBUG /SUBSYSTEM:WINDOWS *.obj %baseLib% /OUT:%1
:TheEnd
echo off
dir %1
echo on
@pause
vc6不怎么好调试,汇编和源码没同步,od挺好的,编译时传全路径就能找到源码了,不用把源码复制到运行目录
#17
#18
又见大神,收藏学习,顺便顶贴
#19
哦 哦
#20
感谢分享。。
#21
#22
好久没来了好久没来了好久没来了
#23
#24
使用正则找十六进制数加范围比较找到了几处错误,修正后地面上干净了
Regex(@"([a-f0-9]+)h",RegexOptions.IgnoreCase);
(nNum > 0x400000) && (nNum < 0x91D54B4)
main74_3.asm
9149行,mov edi, 57273D9h ;mov edi, (offset word_57273D8+1)
main74_5.asm
12602行,push 57273D9h ;push (offset word_57273D8+1)
main74_7.asm
794行,cmp esi, 7FE9D45h ;cmp esi, (offset dword_7FE9D44+1)
13197行,cmp esi, 81C152Ah ;cmp esi, (offset dword_81C1528+2)
main74_9.asm
2846行,cmp edi, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
3228行,cmp eax, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
Regex(@"([a-f0-9]+)h",RegexOptions.IgnoreCase);
(nNum > 0x400000) && (nNum < 0x91D54B4)
main74_3.asm
9149行,mov edi, 57273D9h ;mov edi, (offset word_57273D8+1)
main74_5.asm
12602行,push 57273D9h ;push (offset word_57273D8+1)
main74_7.asm
794行,cmp esi, 7FE9D45h ;cmp esi, (offset dword_7FE9D44+1)
13197行,cmp esi, 81C152Ah ;cmp esi, (offset dword_81C1528+2)
main74_9.asm
2846行,cmp edi, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
3228行,cmp eax, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
#25
这样的变量定义离真正的变量定义还有一段距离,
#26
#27
so diao的样子啊!!
#28
main74_6.asm 8357行,修改后属性面板正常
mov edx, dword ptr dword_7CC7FE4
mov edx, dword ptr dword_81C17B4 ;edx改成ebx,之前也碰到过一次,ida怎么会这样
mov ebp, dword ptr dword_7CC7FE8
mov edx, dword ptr dword_7CC7FE4
mov edx, dword ptr dword_81C17B4 ;edx改成ebx,之前也碰到过一次,ida怎么会这样
mov ebp, dword ptr dword_7CC7FE8
#29
原来是以前批量替换时弄错了
mov edx, dword ptr dword_这种地方的edx都有可能是ebx,这下丑大了
#30
感谢分享!!!!
#31
可以翻译成c语言吗?
#32
汇编源码,别逗了,任何exe岂不是都有源码了
#33
想啊,希望能像传奇一样,不过凭一人之力很难
#34
只分析和读取过 mu 的模型文件 。
#35
#36
#37
好厉害
#38
帮忙顶一下,呵呵
#39
感谢楼主分享
#40
#41
#42
一生之中唯一献给了《奇迹》
#43
厉害 拜大神
#44
牛啊,拜大神
#45
楼主辛苦
#46
#47
!一步一步,真不容易啊。
#48
高大上啊,汇编,偶都不敢想,哎,我这小小码农啊
#49
悲哀的是我也是搞逆向的,2年前我都在相关MU的源码从没想去逆向它。。 佩服LZ。
#50
楼主写个教程 教一下如何编译和运行阿...新手不懂
#1
感谢分享 我下来看看
#2
感谢分享
#3
#include "D:\\Administrator\\Documents\\Visual Studio 2008\\Projects\\toTraceWin\\toTraceWin.h"
居然有这么一行,楼主告诉我怎么才能编译通过
居然有这么一行,楼主告诉我怎么才能编译通过
#4
#5
注释掉,我自己输出调试信息的
使用masm32和vc6编译
#6
看到画面的那一刹那,挺激动的
#7
汇编代码量16W行左右?
这不是一般的恐怖
这不是一般的恐怖
#8
这个是用来干嘛的?
#9
奇迹是用汇编写的?
#10
不容易,不容易,
#11
#12
好厉害,谢谢分享!
#13
楼主辛苦了,支持楼主的分享!~
#14
腻害了 是逆向工程产生的汇编吗
#15
learning
#16
用ida做的,其中变量很关键,最好在ida中先分析好,分析出来的变量名也要检查,有时会用个简写名,甚至关键字,后面就麻烦了,最好是原始名比如byte_50124这样的,不会冲突也直观,后面好对照着找问题, 在这份源码中应该还隐藏着直接地址,比如应该是mov eax,byte_50124这样的,代码可能是mov eax,50124h,像这样的问题改了很多了
最初这些数据变量都是在asm文件里的,不过.data?块的东西太多,编译不过,一直等待,才转到C,而C文件编译后变量在内存中的顺序全变了,就改成了一个变量char dword_485CDC[140000000];其它变量就加上它们之间的差值,比如你下面这样:
extern dword_485CDC:byte
byte_4875DC equ dword_485CDC + 6400
byte_48D9DC equ dword_485CDC + 32000
dword_48D9E0 equ dword_485CDC + 32004
dword_48F2E4 equ dword_485CDC + 38408
有些乱,先发个图吧,现在有发现两bug,一是地上会多出些东西,二是角色属性面板不正常,不能加点
完整客户端和服务端下载,供测试用,请自行杀毒
http://pan.baidu.com/s/1m7Fau
再补充个linkall.bat文件
vc6不怎么好调试,汇编和源码没同步,od挺好的,编译时传全路径就能找到源码了,不用把源码复制到运行目录
最初这些数据变量都是在asm文件里的,不过.data?块的东西太多,编译不过,一直等待,才转到C,而C文件编译后变量在内存中的顺序全变了,就改成了一个变量char dword_485CDC[140000000];其它变量就加上它们之间的差值,比如你下面这样:
extern dword_485CDC:byte
byte_4875DC equ dword_485CDC + 6400
byte_48D9DC equ dword_485CDC + 32000
dword_48D9E0 equ dword_485CDC + 32004
dword_48F2E4 equ dword_485CDC + 38408
有些乱,先发个图吧,现在有发现两bug,一是地上会多出些东西,二是角色属性面板不正常,不能加点
完整客户端和服务端下载,供测试用,请自行杀毒
http://pan.baidu.com/s/1m7Fau
再补充个linkall.bat文件
echo off
set LIB="\Program Files\Microsoft Visual Studio\VC98\Lib"
set baseLib=kernel32.lib user32.lib gdi32.lib winspool.lib comdlg32.lib advapi32.lib shell32.lib ole32.lib oleaut32.lib uuid.lib odbc32.lib odbccp32.lib msvcrt.lib
if not exist rsrc.obj goto nores
echo on
"\Program Files\Microsoft Visual Studio\VC98\bin\Link.exe" /INCREMENTAL:NO /SUBSYSTEM:WINDOWS *.obj rsrc.obj %baseLib% /OUT:%1
goto TheEnd
:nores
echo on
"\Program Files\Microsoft Visual Studio\VC98\bin\Link.exe" /INCREMENTAL:NO /DEBUG /SUBSYSTEM:WINDOWS *.obj %baseLib% /OUT:%1
:TheEnd
echo off
dir %1
echo on
@pause
vc6不怎么好调试,汇编和源码没同步,od挺好的,编译时传全路径就能找到源码了,不用把源码复制到运行目录
#17
#18
又见大神,收藏学习,顺便顶贴
#19
哦 哦
#20
感谢分享。。
#21
#22
好久没来了好久没来了好久没来了
#23
#24
使用正则找十六进制数加范围比较找到了几处错误,修正后地面上干净了
Regex(@"([a-f0-9]+)h",RegexOptions.IgnoreCase);
(nNum > 0x400000) && (nNum < 0x91D54B4)
main74_3.asm
9149行,mov edi, 57273D9h ;mov edi, (offset word_57273D8+1)
main74_5.asm
12602行,push 57273D9h ;push (offset word_57273D8+1)
main74_7.asm
794行,cmp esi, 7FE9D45h ;cmp esi, (offset dword_7FE9D44+1)
13197行,cmp esi, 81C152Ah ;cmp esi, (offset dword_81C1528+2)
main74_9.asm
2846行,cmp edi, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
3228行,cmp eax, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
Regex(@"([a-f0-9]+)h",RegexOptions.IgnoreCase);
(nNum > 0x400000) && (nNum < 0x91D54B4)
main74_3.asm
9149行,mov edi, 57273D9h ;mov edi, (offset word_57273D8+1)
main74_5.asm
12602行,push 57273D9h ;push (offset word_57273D8+1)
main74_7.asm
794行,cmp esi, 7FE9D45h ;cmp esi, (offset dword_7FE9D44+1)
13197行,cmp esi, 81C152Ah ;cmp esi, (offset dword_81C1528+2)
main74_9.asm
2846行,cmp edi, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
3228行,cmp eax, 81C495Ah ;cmp edi, (offset dword_81C4958+2)
#25
这样的变量定义离真正的变量定义还有一段距离,
#26
#27
so diao的样子啊!!
#28
main74_6.asm 8357行,修改后属性面板正常
mov edx, dword ptr dword_7CC7FE4
mov edx, dword ptr dword_81C17B4 ;edx改成ebx,之前也碰到过一次,ida怎么会这样
mov ebp, dword ptr dword_7CC7FE8
mov edx, dword ptr dword_7CC7FE4
mov edx, dword ptr dword_81C17B4 ;edx改成ebx,之前也碰到过一次,ida怎么会这样
mov ebp, dword ptr dword_7CC7FE8
#29
原来是以前批量替换时弄错了
mov edx, dword ptr dword_这种地方的edx都有可能是ebx,这下丑大了
#30
感谢分享!!!!
#31
可以翻译成c语言吗?
#32
汇编源码,别逗了,任何exe岂不是都有源码了
#33
想啊,希望能像传奇一样,不过凭一人之力很难
#34
只分析和读取过 mu 的模型文件 。
#35
#36
#37
好厉害
#38
帮忙顶一下,呵呵
#39
感谢楼主分享
#40
#41
#42
一生之中唯一献给了《奇迹》
#43
厉害 拜大神
#44
牛啊,拜大神
#45
楼主辛苦
#46
#47
!一步一步,真不容易啊。
#48
高大上啊,汇编,偶都不敢想,哎,我这小小码农啊
#49
悲哀的是我也是搞逆向的,2年前我都在相关MU的源码从没想去逆向它。。 佩服LZ。
#50
楼主写个教程 教一下如何编译和运行阿...新手不懂