冒险解谜游戏中文网 ChinaAVG

标题: 【汉化工具】中间DLL生成工具 AheadLib [打印本页]

作者: shane007    时间: 2008-11-9 16:09
标题: 【汉化工具】中间DLL生成工具 AheadLib
用这个工具可以很简单地生成中间DLL的源代码,在源代码里调用Windows标准DLL的显示函数之前,替换英语字符串为中文,可能是实现汉化的一种新方法。 3 |) E/ R( H5 C' S# y4 c- h( E
中间DLL里的替换逻辑可以写成查找外置字符串替换表的形式,即发现送给显示函数为Hello,到字符串替换表查找后,发现Hello的对应中文为:你好,就把 你好这2个字送给显示函数,对不同的游戏,准备不同的替换表就行了。 " W3 ?% q+ e2 r- b2 ^  ~) z" I

/ h) ^, B5 ^9 S( j6 t/ Y* {8 I% f8 m- i" G
# Y7 G# O& H* s
一、简介
7 Z2 `/ F; y- y0 m) R
3 C* |3 }# _4 a" X# B+ z7 d4 Z7 O  a  AheadLib 是用来生成一个特洛伊DLL的工具,用于分析DLL中的函数参数调用(比如记录Socket send了什么等等)、更改函数功能(随心所欲了:)、更改界面功能(比如在Hook里面生成一个按钮,截获事件等等)。
. `" P% f/ G8 p$ D& D3 h  l1 y$ ]  h8 p0 h# p
二、使用
- K) h7 `- N1 U2 e9 l' @
# C1 C3 a% u0 E% S: S+ j2 @  1.用 AheadLib 打开要模拟的 DLL,生成一个 CPP 文件。   s! U2 N) ?1 L
  2.用 Visual Studio 6.0/.NET 建立一个 DLL 工程,把这个 CPP 文件加入到项目中。
& V7 H4 i5 k% G8 G; i. Y  3.使用 Release 方式编译,生成的 DLL 将和原来的 DLL 具有一模一样的导出函数,并且能顺利把这些函数转发到原来的函数中。 8 v3 ?) L* u7 j
  4.AheadLib 还可以生成 Hook 代码,用于截取当前进程的所有消息,这样就可以随心所欲地处理各种消息了 (修改第三方程序界面功能的好助手)。
  h7 K4 b5 {" y+ H# Q3 h; S; F
  Z" x% n6 O( i* g" B三、备注 5 ]( r- s" s( W; [4 H

1 W+ F# l. P9 s$ y5 z) F) Q, F  j  1.如果导出函数过多,在 Visual Studio 6.0 中,如果出现编译错误,请在项目属性关闭与编译头功能。
/ H) u1 O6 }4 `! l/ z; d* N& @3 k  2.如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++类的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。
  ?7 d: b/ [/ H  3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/EXPORT:...)导出,且指定导出序号。 , U' K) R! m( A% S$ i0 N: k
  4.如果系统中没有 DbgHelp.dll,将无法识别 C++ 模式的导出。 3 y9 {' X$ k$ @" ]2 X: l+ D/ w

/ i6 u- E' U  C# M. h) j" y9 X主页:http://Yonsm.reg365.com
: N1 S4 o: H& \8 J) I: P) [# k邮件:[email protected]
0 H; `( t& X$ j/ [, d; L& x0 D' h, j7 Z源码:如果需要,请访问作者主页
作者: shane007    时间: 2010-4-10 23:19
给新人看看
作者: scgame    时间: 2010-4-11 11:10
这样替换,不是直接改文本方便些?除非是那字幕找不着
作者: shane007    时间: 2010-4-11 11:40
引用第2楼scgame于2010-04-11 11:10发表的 : ; {5 I3 h4 |. o: k
这样替换,不是直接改文本方便些?除非是那字幕找不着

9 \" A' @% r& C. B5 N! B
/ ]- B( j+ z9 Z0 T说对了,就是对付字幕找不到的情况。
作者: scgame    时间: 2010-4-12 08:52
  1. ALCDECL AheadLib_draw_text(void)
  2. {
  3.     // 保存返回地址
  4.     __asm POP m_dwReturn[70 * TYPE long];
  5.     // 调用原始函数
  6.     GetAddress("draw_text")();
  7.     // 转跳到返回地址
  8.     __asm JMP m_dwReturn[70 * TYPE long];
  9. }
复制代码
我把上次想用DLL解决的游戏又装了下,发现他的CPP是这样的,似乎无法获取送进去的argument啊
作者: shane007    时间: 2010-4-12 11:18
gdi里有draw_text这个函数吗?是drawtext吧?
作者: scgame    时间: 2010-4-12 11:53
哦,那个不是GDI的,上次在看的一个游戏里的一个dll
3 {3 C% p' w8 V7 J- T4 N是个引擎
作者: shane007    时间: 2010-4-12 17:11
引用第6楼scgame于2010-04-12 11:53发表的 :
' g1 A9 v% J7 U2 s哦,那个不是GDI的,上次在看的一个游戏里的一个dll 2 Y* h& t1 Y1 b2 r' K+ Z# K; |
是个引擎
. ?2 u0 i( j) N4 b$ ~

- i9 g4 L' ~. O$ H" N0 B% d建议你还是用这个,原理是一样的。$ A5 {+ n2 k; t% U4 j2 z5 j3 n
https://www.chinaavg.com/read.php?tid=21849




欢迎光临 冒险解谜游戏中文网 ChinaAVG (https://chinaavg.com/) Powered by Discuz! X3.2