冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2008-11-9 16:09
标题: 【汉化工具】中间DLL生成工具 AheadLib
用这个工具可以很简单地生成中间DLL的源代码,在源代码里调用Windows标准DLL的显示函数之前,替换英语字符串为中文,可能是实现汉化的一种新方法。
$ U' a7 Q$ M" g6 L. d* l* z2 F) z中间DLL里的替换逻辑可以写成查找外置字符串替换表的形式,即发现送给显示函数为Hello,到字符串替换表查找后,发现Hello的对应中文为:你好,就把 你好这2个字送给显示函数,对不同的游戏,准备不同的替换表就行了。
5 Z# e! f7 Q& p* V

  x; t: e# A8 F& y# a' E
  |3 X2 ^. r( F$ e' @2 \' h& v0 A: x5 H+ i+ A
一、简介
( Z7 i+ r. q# {' L) p6 |; G! B
" q& a; N% U8 t0 j5 d4 |( u2 I1 S  AheadLib 是用来生成一个特洛伊DLL的工具,用于分析DLL中的函数参数调用(比如记录Socket send了什么等等)、更改函数功能(随心所欲了:)、更改界面功能(比如在Hook里面生成一个按钮,截获事件等等)。
/ R; X& h& m# y4 U; R; n6 ?! `/ l* W5 I: m
二、使用
0 ~2 |$ S* d. s" p
0 s! ?$ y8 A( R/ `' d0 \  1.用 AheadLib 打开要模拟的 DLL,生成一个 CPP 文件。
' a& V: R; C; K; I( D  2.用 Visual Studio 6.0/.NET 建立一个 DLL 工程,把这个 CPP 文件加入到项目中。 % x! r7 H; t# M6 d
  3.使用 Release 方式编译,生成的 DLL 将和原来的 DLL 具有一模一样的导出函数,并且能顺利把这些函数转发到原来的函数中。 ; Z" q% T% L4 H) N6 u4 {1 i
  4.AheadLib 还可以生成 Hook 代码,用于截取当前进程的所有消息,这样就可以随心所欲地处理各种消息了 (修改第三方程序界面功能的好助手)。
7 c" C# x& a  n6 [2 p5 E. A/ X8 j1 g+ c0 L5 o( ~
三、备注
6 [+ Z( j5 Q( u! D( A
5 Q1 g' @- t% U! U3 r) ^0 M( n  1.如果导出函数过多,在 Visual Studio 6.0 中,如果出现编译错误,请在项目属性关闭与编译头功能。
; C5 |6 y3 Q4 C  d  2.如果是 C++ 、C __stdcall、C __fastcall 的方式导出的话,生成的函数声明将会还原成原代码级别(可能需要修改才能编译,比如导出C++类的情况)。此时使用 __declspec(dllexport) 导出 ——不能指定导出序号。
0 X( k3 V. C: y4 k  3.如果是 NONAME 或者 C _CDECL 方式导出(比如 DEF 导出,大多数Windows DLL都是这种情况,比如WS2_32等等),则使用#pragma comment(linker, "/EXPORT:...)导出,且指定导出序号。 # g7 y, r& }5 q- O6 d1 u9 a: {
  4.如果系统中没有 DbgHelp.dll,将无法识别 C++ 模式的导出。 / q& ?: E) P% u1 f) j- {: |: f
' _# v, ?& I* ]% Q6 k
主页:http://Yonsm.reg365.com ! \. j1 ^3 p7 D  q5 v
邮件:[email protected]
9 u2 D! ~% T$ R# ?5 N6 {4 v" a源码:如果需要,请访问作者主页
作者: 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 T: e6 {6 ^9 v这样替换,不是直接改文本方便些?除非是那字幕找不着

* C1 e+ J. l$ z0 r0 G
4 v  Y4 \$ ?$ o说对了,就是对付字幕找不到的情况。
作者: 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
7 X% d9 r; v: H* m9 L9 @. M# G是个引擎
作者: shane007    时间: 2010-4-12 17:11
引用第6楼scgame于2010-04-12 11:53发表的 :
4 L0 z' X  o8 x3 j" m+ c哦,那个不是GDI的,上次在看的一个游戏里的一个dll
. N0 S# m- h$ w3 p5 W- i- }8 o, P是个引擎

6 M/ Y9 Q0 ^  f+ g( ^/ {
  V8 |$ z* c/ J1 D7 b7 z建议你还是用这个,原理是一样的。
7 Z; R9 T% u7 e* j; L/ c7 i4 Rhttps://www.chinaavg.com/read.php?tid=21849




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