冒险解谜游戏中文网 ChinaAVG

标题: 【Opengl游戏汉化 #2】 间谍活动:冬日行动(Undercover: Operation Wintersun)字... [打印本页]

作者: shane007    时间: 2023-8-26 18:24
标题: 【Opengl游戏汉化 #2】 间谍活动:冬日行动(Undercover: Operation Wintersun)字...
本帖最后由 shane007 于 2023-8-27 10:49 编辑
: j& A3 ]5 ]6 E" Z. `3 `" ~8 v/ Z
这个游戏是opengl引擎的,对opengl的初始化主要是在vision71.dll里做的。经过grep文字检索之后,确定这个游戏没有调用 glGenLists和glCallList这2个函数来用于字幕显示。
! N) i' L4 ~# ^$ k. k1 m7 h& ]# j4 T, r$ E' {- y  @) L
dxwnd窗口化之后,用cheatengine 检索内存字符串(注意,有的字符串在内存有2份,对后1份下断点才有用),
1 U6 d4 c9 b  T3 g9 O4 T  G随后下断点。在以下地方断下。7 H) j9 }% \% x
1 G! Q' e$ }$ O9 h2 ~9 C
  1. Operation Wintersonne.exe+CE883 - F3 A5                 - repe movsd
    $ [' f$ v* }: u
  2. 004CE883
复制代码

! U5 k; t. i, A9 S$ w* h# V$ x: `( b+ g! M
用ida pro查看之后,发现是个底层方法。0 L; O4 Q, h; p$ `3 H
真的显示函数应该是调用它的上层方法。4 p- n: K9 }* V7 |; ?: e
  1. void *__cdecl memcpy_0(void *a1, const void *a2, size_t a3)
    3 h1 F! }. p. n% g( e
复制代码
2 m- N. E* O; d' K" m$ J

1 ~( F' Q+ U8 q! M, `这个方法看着蛮像的,也许就是它,待日后修改代码测试0 F+ ~* v! _) @( J- @. k

  a1 [6 j1 q- L$ i* _# `7 h; F" D

  1. 6 b$ I. [- t  _& o  _
  2. int __thiscall ATL::CSimpleStringT<char,0>::SetString(_DWORD *this, void *a2, size_t a3)6 E' V# h* Q3 V6 n. Z; _! n
  3. {  r/ C/ ^) B4 S) J) I
  4.   unsigned int v4; // edi
    " D! D* Q3 D  m( ?) S% l
  5.   char *v5; // esi% d  v* d4 K! ?* D: M, f# \1 q5 J
  6.   void *v6; // eax
    8 w2 e; {- X; A' h) Y# D7 [/ Y6 V

  7. % a1 f$ q, I6 u; E
  8.   if ( !a3 ): w/ E8 J: C, m4 C
  9.     return ATL::CSimpleStringT<char,0>::Empty();
    ! V4 j2 g" T5 F+ T, j# b
  10.   if ( !a2 )
    & k* L) `5 i  y# q6 }$ W& b
  11.     unknown_libname_180(-2147024809);
    ( _. f2 {# J' k( y
  12.   v4 = *(_DWORD *)(*this - 12);
    4 z/ V/ X* x  h- u( q- ?0 c
  13.   v5 = (char *)a2 - *this;
    9 j2 f8 X( g. L
  14.   v6 = (void *)ATL::CSimpleStringT<char,0>::PrepareWrite(a3);
    / O& X0 @4 c& O% @  v: k) ^
  15.   if ( (unsigned int)v5 > v4 )
    5 ~: {$ k9 R; U
  16.     memcpy_0(v6, a2, a3);4 x! q7 B* {: }& q* d; \& Q4 o
  17.   else
    8 D+ U1 G$ l  R5 i* x+ \$ b+ _% y
  18.     memcpy(v6, &v5[(_DWORD)v6], a3);
    3 H5 H, L1 L! b/ w( \1 z
  19.   return ATL::CSimpleStringT<char,0>::SetLength(a3);$ W4 n( s# g! t0 z+ d
  20. }
    % j: }, D9 q6 o. p' T
复制代码

5 C/ T6 X5 f5 W% [0 f! g3 ?; n: _2 d# F! U, o4 {
- A& n7 o1 V$ l  Z2 u3 Y





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