冒险解谜游戏中文网 ChinaAVG

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

作者: shane007    时间: 2023-8-26 18:24
标题: 【Opengl游戏汉化 #2】 间谍活动:冬日行动(Undercover: Operation Wintersun)字...
本帖最后由 shane007 于 2023-8-27 10:49 编辑 ( J! R0 l# s3 P7 _6 h3 z0 c

: ^% H1 {; E0 m- x* b这个游戏是opengl引擎的,对opengl的初始化主要是在vision71.dll里做的。经过grep文字检索之后,确定这个游戏没有调用 glGenLists和glCallList这2个函数来用于字幕显示。
7 Q( P6 t8 A6 u- B! f1 q2 z% p1 A( a2 H4 ~$ _% ^" h
dxwnd窗口化之后,用cheatengine 检索内存字符串(注意,有的字符串在内存有2份,对后1份下断点才有用),+ l/ i' K. t3 W- m0 F0 l; ?( d
随后下断点。在以下地方断下。
5 S' k2 a2 g4 n- O+ n$ c
$ S0 {! Z9 T" F; M$ Z/ y
  1. Operation Wintersonne.exe+CE883 - F3 A5                 - repe movsd $ d1 b6 ~5 ]3 Z( `) m/ U% ^
  2. 004CE883
复制代码
% n- ^; U5 M" J. F  t6 w/ r

- F/ [; r; W- p0 P; ?- u/ u6 K8 W. ]用ida pro查看之后,发现是个底层方法。6 Z* l: l4 Z. |) p" K" X$ P
真的显示函数应该是调用它的上层方法。( n9 f+ W, z( x# J* R0 E8 R6 W& ^
  1. void *__cdecl memcpy_0(void *a1, const void *a2, size_t a3)
    ! t5 V; J5 L2 I. t1 T6 Y' W
复制代码
! c8 ^* p$ z. d' o+ B) K
& I4 e4 s( D" W2 l% ?- A
这个方法看着蛮像的,也许就是它,待日后修改代码测试
; F7 Z9 P+ s6 Y. X3 A/ n" T
8 N- L  |2 o/ h% m6 g1 j  \" U
  1. ) K* Z) [$ a* h9 m- ?7 M( m" n& C
  2. int __thiscall ATL::CSimpleStringT<char,0>::SetString(_DWORD *this, void *a2, size_t a3)# m; m9 W! B* a, G( O. d
  3. {
    7 a: ^! D1 A$ n, ~! j
  4.   unsigned int v4; // edi
    4 r9 O( l* Y. @2 d1 a$ m" e& }  S' f
  5.   char *v5; // esi% v# k0 o+ P9 {8 o8 `* X8 w8 ^
  6.   void *v6; // eax
    4 C( k9 m) s0 y  ]6 D

  7. 9 P" K" c  r- o7 b3 Y1 q
  8.   if ( !a3 )1 D: x0 p0 ?( ?+ }' Z5 ~* A
  9.     return ATL::CSimpleStringT<char,0>::Empty();
    $ m6 v, [/ ^9 ]7 R6 }! }! j7 }
  10.   if ( !a2 )
    1 z  }: |: N2 X  t# j4 r
  11.     unknown_libname_180(-2147024809);
    8 y; t1 O) c2 p2 R  X4 m6 u2 `
  12.   v4 = *(_DWORD *)(*this - 12);
    " B+ Y5 ]. C; W% I( I6 Z
  13.   v5 = (char *)a2 - *this;
    . j& ~" w. Z3 Q" b
  14.   v6 = (void *)ATL::CSimpleStringT<char,0>::PrepareWrite(a3);% I7 T, U& p6 h) q0 e: ~
  15.   if ( (unsigned int)v5 > v4 )) ]$ b/ e+ a% g2 O
  16.     memcpy_0(v6, a2, a3);
    0 s2 |( M+ j" s8 v9 Y5 X0 Q
  17.   else
    / B5 p3 \5 Q& e7 U/ |) h! D6 \* N
  18.     memcpy(v6, &v5[(_DWORD)v6], a3);( _- `/ b8 [8 h2 l
  19.   return ATL::CSimpleStringT<char,0>::SetLength(a3);
    , K' O! N2 n" {6 z+ d0 W9 \
  20. }
    7 g' y9 d& c9 O. Y  N
复制代码
5 ]! O( ]/ S/ \$ `7 q3 q/ _
: G: x# S$ V/ S0 ]% }

6 g! Z. ?" F! {# W




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