冒险解谜游戏中文网 ChinaAVG

标题: 【汉化与汇编】单字节内核模拟程序(深绿请进) [打印本页]

作者: shane007    时间: 2009-10-8 17:41
标题: 【汉化与汇编】单字节内核模拟程序(深绿请进)
深绿,你好,有时间的话请帮忙制作一个单字节内核模拟程序。
$ Q6 P0 a' y1 c4 J! V! I
6 N! l: k# N7 l6 H; h) `- H/ H题目吓人,其实很简单。8 j, L  ~' D$ {; G7 b
在程序里面设定一个固定中文字符串。! `# _- L! \8 W0 @
然后按字节读取。小于0x80的字节输出到out.txt文件即可。
- u) j0 g& {8 P, _3 [3 [8 \
& b  i! K, z) y1 B这个程序模拟了单字节游戏后输出乱码的情况。2 b* s3 }( q5 o8 x# F/ C
接下去我们可以利用它进行汇编级研究。
作者: 深绿    时间: 2009-10-10 19:10
我稍微改了一下程序,包里面有个input.txt和output.txt
& \; z" `# L. O2 i+ v! j+ V! w先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节& t# q  c" b! k9 V/ `

) _, w- `, p1 Y6 J但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?
作者: shane007    时间: 2009-10-10 21:47
引用第1楼深绿于2009-10-10 19:10发表的  :
4 s8 A; r8 J2 }* z8 i我稍微改了一下程序,包里面有个input.txt和output.txt/ i3 ^& H8 Q5 S, y4 k
先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
: D3 d$ U! F( S  Z2 w
1 E9 y, O2 Y. k9 K; x% R  x0 {但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?
% C/ L* D0 |5 B
是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。
6 ?. Y& ^2 c' B9 |+ V这就模拟了汉化了文本以后,中文字符被过滤的情况。
+ t5 }; c) T( k/ `& V0 w3 k7 y* x
5 W7 p! V% l5 A6 w  g9 f, F+ y' n! a! U接下去就可以在汇编级用OD载入,开展研究了。; s0 P( f9 T+ O
想办法把和0x80比较的地方去掉就行了。
作者: shane007    时间: 2009-10-10 21:51
看了代码,应该把ch<=128 改为 ch<128 吧?
作者: shane007    时间: 2009-10-10 22:02
由于这个程序很短,OD里面的汇编代码也很短。 . @; K! k) U8 ^1 H/ B4 @$ P
请看红色的部分,这就是和0x80比较的部分。
% [7 v) l/ w# p$ s' n: z把这2句NOP掉,然后保存修改后的文件为exe。
; n! t+ s, ~9 Q  T. f4 h我们发现input.txt里面的所有内容都能被输出了。 , e* ^! p' M- t# _! j* j# |
附上修改后的exe. , r% O! l, z: s8 Z% F- m
深绿,你可以把这个操作过程试一下,练习一下.
. W3 |, V1 q+ r+ \# T, D* `
# N% F' ?3 F- p0 w00401000  /$  55            push    ebp
. F& _: T' Z- ]4 ~- O) ~00401001  |.  89E5          mov    ebp, esp
) u4 l5 ~" n  I9 `00401003  |.  83EC 18      sub    esp, 18 3 r& a9 ], w6 s/ p' Y' ~& {
00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0
9 [, j7 k* F& T: V0040100D  |.  83C4 F4      add    esp, -0C
; Y- C$ P9 G5 N/ V00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4] 2 C" B* S" I# G9 J$ a# C
00401013  |.  50            push    eax # V2 R$ v5 N. ~1 Z. r) K. [
00401014  |.  FF35 08204000 push    dword ptr [402008] # u% f3 _' m+ e
0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] 3 ?# I' a7 _) `4 ?
0040101D  |.  50            push    eax
# ?1 ]% r- A( v0040101E  |.  68 04204000  push    00402004
3 h! a' S2 k0 r) I3 w  b! _0 I8 S00401023  |.  68 00204000  push    00402000 7 T1 B+ j8 R$ h! w) H2 U- Q
00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs>   N7 s, y4 _6 n- ~( @# ?" O: q9 }' J
0040102D  |.  C9            leave
; t" H; D. w: S) P9 T' j; B9 Q0040102E  \\.  C3            retn
# d7 [0 y& I0 k8 |/ q4 t4 W0040102F      90            nop 9 K; ~" r  |8 N* A4 E! A+ t. b/ j
00401030  /$  55            push    ebp
& W, R2 E4 y2 m: |00401031  |.  89E5          mov    ebp, esp / z) H3 J9 R; J& i; f+ d0 e. G' b
00401033  |.  83EC 08      sub    esp, 8 2 M$ |. A; v2 C, U9 S! k
00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C]
6 R' ?; \1 h% O" ]6 U8 C, t2 k' p0040103C  |.  85D2          test    edx, edx : c& D) f* @, {" ^
0040103E  |.  74 7B        je      short 004010BB $ j, ]& d1 @& ~; u% t8 p2 h
00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> ( s$ U) z. e, D5 e1 q$ W
00401045  |.  8910          mov    dword ptr [eax], edx # Z( U! L: J+ W4 r6 l& O/ o4 S
00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 3 `8 r7 v( O. K( U0 c3 b
0040104C  |.  85C0          test    eax, eax
, K% G9 S" t1 x! }" f% }7 L! w0040104E  |.  74 1E        je      short 0040106E 9 s. h8 ^; i' V3 m' k2 Z9 L
00401050  |.  83C4 F8      add    esp, -8
! W( `, z8 j4 P0 s00401053  |.  FF35 0C204000 push    dword ptr [40200C] 0 p& y/ f5 J. O% J0 S
00401059  |.  83C4 F4      add    esp, -0C 1 R# i6 {$ o. ^4 \* o
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob 2 u/ @8 Q" u8 z# l1 |/ x
0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno 5 y0 w6 F! [) _6 k, }( e/ {
00401062  |.  83C4 10      add    esp, 10 ( }& ?9 {0 }% y! n. t+ t6 @& R
00401065  |.  50            push    eax                              ; |handle
+ B) m: D' N5 {, T00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
) x, e8 X% E9 |) B0040106B  |.  83C4 10      add    esp, 10
0 h6 I' O% U' p9 w0 d  D# b0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 4 t$ Y  z: P6 p8 p
00401073  |.  83C0 20      add    eax, 20
' ?+ E, [! ]8 J  ^8 P00401076  |.  74 1E        je      short 00401096
/ m1 S0 l4 ~+ `8 A/ S7 ], q00401078  |.  83C4 F8      add    esp, -8 9 ~) Z2 G8 b) R
0040107B  |.  FF35 0C204000 push    dword ptr [40200C] $ v& c4 l) S& H& l% r$ ]* M8 [
00401081  |.  83C4 F4      add    esp, -0C / }" H! S+ A1 z* D% M
00401084  |.  50            push    eax                              ; /pstream ) w! h7 _( F- ?
00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
, N+ J, r/ B( D  Z' z0040108A  |.  83C4 10      add    esp, 10
4 b7 T! c5 L4 F3 a9 @+ J/ o0040108D  |.  50            push    eax                              ; |handle ! C% G6 R3 v: n# E) K, N
0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode 5 X: y! s/ u' R. U5 \2 l, f7 [
00401093  |.  83C4 10      add    esp, 10 # L1 ~1 a$ w" y, f8 |: N+ N1 q, j6 |' ~
00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
# m: C- q& }8 b0040109B  |.  83C0 40      add    eax, 40 . U1 A# E3 [1 u# ~5 F! @7 @7 S. E8 a
0040109E  |.  74 1B        je      short 004010BB
5 b( j4 [5 R7 ~004010A0  |.  83C4 F8      add    esp, -8 , R# W  d# Q) Y' ^4 l) J6 |
004010A3  |.  FF35 0C204000 push    dword ptr [40200C]
6 B/ |- A% E6 e5 I+ p004010A9  |.  83C4 F4      add    esp, -0C - D/ S, M3 x2 m2 M: B& u9 B
004010AC  |.  50            push    eax                              ; /pstream 0 m+ L3 S8 B8 n' t$ K
004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
) ^4 P0 {/ m5 \% Y) ?004010B2  |.  83C4 10      add    esp, 10
! i( C5 K5 {- U. M004010B5  |.  50            push    eax                              ; |handle
1 r$ G9 I$ G/ ?7 ]& s; M# }* w004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode & z3 `1 O( t' z1 y" \, z& y
004010BB  |>  C9            leave
) V/ N9 p0 H: X2 z$ g3 m0 C) G004010BC  \\.  C3            retn 2 v& d  v% t8 H7 l+ y, y
004010BD      8D76 00      lea    esi, dword ptr [esi] 0 G  K! I4 f7 n7 d; y
004010C0  /.  55            push    ebp 3 s7 v" x' u/ B3 y( ^( Z1 |, d9 Q! y
004010C1  |.  89E5          mov    ebp, esp 0 h9 P$ q5 L; V& i) K
004010C3  |.  83EC 10      sub    esp, 10 * H, U+ e& h- N4 l) I
004010C6  |.  56            push    esi
# I+ Z8 D/ `7 n* S# c. Y004010C7  |.  53            push    ebx - D) O3 U' P# Y- e) H/ ~9 N) ^
004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8] 1 m8 K1 @; e& m9 G) N* ~- Y8 K
004010CB  |.  31DB          xor    ebx, ebx % ?7 y/ ]0 v1 p+ [" o5 e
004010CD  |.  31F6          xor    esi, esi
, T& `* l5 W% F, U004010CF  |.  8B00          mov    eax, dword ptr [eax]
6 t. J$ r3 |) G# Z, ?! i; A" P004010D1  |.  8B00          mov    eax, dword ptr [eax]
4 C% s4 a  d  V7 ]; g004010D3  |.  3D 910000C0  cmp    eax, C0000091
' G8 P+ G0 L+ J004010D8  |.  77 16        ja      short 004010F0 & Y3 H) a) ^. T$ ~3 n4 u% S
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D * _7 j. U+ v- c; }; q7 m8 }. v
004010DF  |.  73 4F        jnb    short 00401130 . T( g" A4 `! \
004010E1  |.  3D 050000C0  cmp    eax, C0000005 7 }3 W. y; |% j8 A/ Y4 a: C  N
004010E6  |.  74 18        je      short 00401100
9 M) a. ~% Y# x3 w0 a  B004010E8  |.  E9 86000000  jmp    00401173
# i9 ?. o1 Y, A; L3 O1 ?004010ED  |  8D76 00      lea    esi, dword ptr [esi] " f6 h5 V, R; {6 Z
004010F0  |>  3D 930000C0  cmp    eax, C0000093 4 S; b7 ?+ W$ J, H: d: K# J
004010F5  |.  74 39        je      short 00401130
; k6 t+ ]! K( w$ w7 L: P% w004010F7  |.  3D 940000C0  cmp    eax, C0000094
( h$ t2 q& K) n% U" u004010FC  |.  74 37        je      short 00401135 / h0 O: u8 y0 `0 P) U3 t/ a
004010FE  |.  EB 73        jmp    short 00401173 7 B1 Z* m! i* A2 e9 \/ v: O6 L
00401100  |>  83C4 F8      add    esp, -8
* X8 g' o  @' A1 t8 T00401103  |.  6A 00        push    0                                ; /func = NULL
+ V& I8 t) W( D1 ^/ P00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 7 W) ]4 o4 {1 R
00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal
* I" _$ m. [- w! F" T1 e& j9 d3 d, U0040110C  |.  83C4 10      add    esp, 10
. l( K; f  _& w4 w. {) p) f0040110F  |.  83F8 01      cmp    eax, 1
/ d; x+ B$ G6 r& m% m; }; W7 G00401112  |.  75 0E        jnz    short 00401122 7 c( N# Y3 E5 u+ V5 V8 z" h' P
00401114  |.  83C4 F8      add    esp, -8
5 s. Z' j" ?* ~/ l, b9 ~7 x00401117  |.  6A 01        push    1                                ; /func = 00000001 + E' j' e9 \, W1 m
00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 4 `6 k4 O3 C4 G3 `' E
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal ! _4 K+ p3 F( T5 D$ @
00401120  |.  EB 4C        jmp    short 0040116E
6 d8 O+ p7 d. T: e# R" ]# g) n00401122  |>  85C0          test    eax, eax ' K& T0 I9 ]9 Z+ i7 v
00401124  |.  74 4D        je      short 00401173   L5 {( m& }4 ~) {: n
00401126  |.  83C4 F4      add    esp, -0C
& K  r$ E/ t( r$ z. S, K( x& p- L00401129  |.  6A 0B        push    0B ; @" m/ `! G7 u! ~2 [$ _" Z3 s/ y8 v) n
0040112B  |.  EB 3F        jmp    short 0040116C 2 `- m. l7 z" b7 u5 C+ v8 @# z  l
0040112D  |  8D76 00      lea    esi, dword ptr [esi] & A" K* A) o" S
00401130  |>  BE 01000000  mov    esi, 1 5 C& T7 D1 D0 Q3 W9 n
00401135  |>  83C4 F8      add    esp, -8 3 N$ y. p7 g+ h
00401138  |.  6A 00        push    0                                ; /func = NULL
. ]( v4 Q: M( O  f9 z0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
5 x; L! k, t: h2 L; Z2 L8 j9 r0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal # W8 ~& F( W5 N) f6 ~4 N$ ^( {) G: b. k
00401141  |.  83C4 10      add    esp, 10   J7 c7 P1 _) C3 i/ ~/ C% Z) R9 g# I) l
00401144  |.  83F8 01      cmp    eax, 1 / r# d) o) E: a6 Y: m" W3 b
00401147  |.  75 1A        jnz    short 00401163
- A. i: m" |0 w$ G+ I( ]00401149  |.  83C4 F8      add    esp, -8
$ N- H+ I+ i2 h& S2 ]7 N# }: z0040114C  |.  6A 01        push    1                                ; /func = 00000001 8 u& z* n  s* j8 M4 w& v. C1 j4 n
0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE 5 S2 m: H; }8 N  ~) f- X! ?0 ^
00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal , v: R- @0 N, J  q) I: {
00401155  |.  83C4 10      add    esp, 10 1 n# G/ K$ f; \: W, H
00401158  |.  85F6          test    esi, esi 9 r# ^& {% |- S6 {' u
0040115A  |.  74 12        je      short 0040116E
+ `9 v! L; C; @  r( D0 d! i& r0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset
# }) g$ r, m: V7 _0 a00401161  |.  EB 0B        jmp    short 0040116E
0 G" V0 \) @! A' ?" n! t5 ~00401163  |>  85C0          test    eax, eax   _8 Y3 ]9 q/ p! Q7 m
00401165  |.  74 0C        je      short 00401173 . }/ D0 N1 p& T! g+ k# `8 A
00401167  |.  83C4 F4      add    esp, -0C
# J) F: R3 F/ S) @9 |9 F9 U0040116A  |.  6A 08        push    8
0 q& d2 h( ?$ Y# [0040116C  |>  FFD0          call    eax
$ i; b( {+ z3 o% F! A) k5 v8 `0040116E  |>  BB FFFFFFFF  mov    ebx, -1
& r4 U* ^$ s" U  r00401173  |>  89D8          mov    eax, ebx $ _) J8 c3 q1 R" u& B* F- e
00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18]
# e4 u7 V* Y0 }00401178  |.  5B            pop    ebx
: I! N4 b! P7 `! O( Z; `, ~00401179  |.  5E            pop    esi
! Y5 j" ]! V1 N: q& y8 s0040117A  |.  C9            leave
7 q5 q6 U$ K, g6 W0040117B  \\.  C2 0400      retn    4
  _& H- J/ `7 a0 o6 i6 j0040117E      89F6          mov    esi, esi ! M& _9 ?( |% t; O3 T! T) s
00401180  /$  55            push    ebp
0 W$ C' ^  p. Y5 s! `% W00401181  |.  89E5          mov    ebp, esp
1 _- X; X+ X* \' X7 A0 E. W: u00401183  |.  83EC 14      sub    esp, 14
9 Z& U& k0 W6 c: {00401186  |.  53            push    ebx ) ^9 y: ?! t" K/ q. H: V# d
00401187  |.  83C4 F4      add    esp, -0C
6 I3 e1 F' O! c. Z0 H0 F6 `0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0 * _2 o% T" Y; F1 U+ `7 c" w/ I
0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter
6 J. v# e! j7 d+ q9 d" F00401194  |.  83C4 FC      add    esp, -4 2 j# l$ ]" _9 _$ }8 M& `: x
00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset " Z% I$ e6 p% o1 E$ e+ W
0040119C  |.  E8 5FFEFFFF  call    00401000 % L; D: j8 N% Q+ d- T
004011A1  |.  E8 8AFEFFFF  call    00401030
" ]' G% M& f, ~9 t3 W$ R" I) a: m004011A6  |.  83C4 FC      add    esp, -4
) {7 ?& ?6 [% l& G$ y3 {, Z9 E0 ^( z004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ> ! f; i" X1 {& n* S1 ]" z6 G% |
004011AE  |.  FF30          push    dword ptr [eax] 4 ~1 z" d. p. ?  l6 D( r# H, G7 T5 n
004011B0  |.  FF35 04204000 push    dword ptr [402004] ( N% {: n) z4 [: H
004011B6  |.  FF35 00204000 push    dword ptr [402000] / d. J/ {  X* x: J. @
004011BC  |.  E8 AB000000  call    0040126C ; u/ }8 z: S0 @2 p. y1 A
004011C1  |.  89C3          mov    ebx, eax ; c0 b5 ~, f1 P. b7 d0 t/ d% J
004011C3  |.  83C4 20      add    esp, 20 0 ~) a8 `# T% P2 X8 E2 h5 `  j
004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit $ }3 {( s4 @$ g' U- X$ f4 ~
004011CB  |.  83C4 F4      add    esp, -0C
$ b3 j" E7 x2 J1 Q7 Z004011CE  |.  53            push    ebx                              ; /ExitCode
" O, `$ U* z5 ]9 O004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess - n( P/ Z0 [! L! `
004011D4 >/$  55            push    ebp ! [, w" h6 b5 ]& L" S9 [
004011D5  |.  89E5          mov    ebp, esp
$ e% x  H! I% L5 s6 A, v' |0 |" Z; h9 ^- t004011D7  |.  83EC 08      sub    esp, 8
" }8 ?, {5 p+ e004011DA  |.  83C4 F4      add    esp, -0C & O4 [: `" @' [, E9 w9 O# D1 [
004011DD  |.  6A 01        push    1 8 z) K0 I. h1 F: W1 r. N
004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> / u0 S. b4 N& a$ W# a3 x; x
004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> 2 s  c5 r; w- ?4 ]! `5 E1 P7 r
004011E6  |.  E8 95FFFFFF  call    00401180
  G% `/ ]: z) O; ~004011EB  |.  31C0          xor    eax, eax
' H( Y5 U3 t8 i+ }6 F9 K' t$ ~7 Y0 r% h004011ED  |.  C9            leave , m; W  m" [  [7 v* f
004011EE  \\.  C3            retn 6 l( ~" V& ^! H
004011EF      90            nop . A! D: Y1 d/ m4 J
004011F0  /.  55            push    ebp & i, C2 m6 G; u0 a$ P5 D# k
004011F1  |.  89E5          mov    ebp, esp
0 k) W. `8 g' S004011F3  |.  83EC 08      sub    esp, 8 - z& r  s, t0 j( q
004011F6  |.  83C4 F4      add    esp, -0C
1 ]1 a8 q+ M) j+ p% I004011F9  |.  6A 02        push    2 $ f- C: |' F: k  l; A3 ]  w7 g
004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
* l$ I- M+ s6 a00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
+ K. Y7 D- u& O/ r7 K00401202  |.  E8 79FFFFFF  call    00401180 : \" m( {9 H. Z2 W$ P# c8 m
00401207  |.  C9            leave ! f1 M/ K, H& W6 k8 z2 l+ T; I
00401208  \\.  C3            retn 3 w0 c  t) G! ?$ X7 P
00401209      00            db      00 ' l) Y( f2 C- J
0040120A      00            db      00
! u' @8 @2 q( W9 i/ v6 @0040120B      00            db      00 - F& ]  i' N5 X4 q4 X
0040120C      00            db      00 6 ^) }, F( n& y# V8 Q$ ?* C. R
0040120D      00            db      00 8 ?4 N9 e9 j1 E( E, ]
0040120E      00            db      00
+ E$ y& n: t" y- k* Q8 B3 R$ e& y0040120F      00            db      00
" E: j* W, l/ k0 s0 y00401210      72            db      72                              ;  CHAR 'r'
, o& a" G3 o  P7 a00401211      00            db      00
& q3 s/ V3 @6 D00401212  .  69 6E 70 75 7>ascii  "input.txt",0
- M! L& o2 H3 X/ J5 |2 e5 t0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
' s: E+ X6 Z  w. N* v9 O0040122C  .  2E 74 78 74 2>ascii  ".txt!",0
1 D- D% A; P, u9 P; |# c00401232      77            db      77                              ;  CHAR 'w' 6 E  X; d- T& M" n6 R, M
00401233      00            db      00 ) z- y$ G2 ~2 D& F# n1 L& F
00401234  .  6F 75 74 70 7>ascii  "output.txt",0 ( m4 q# T: i3 G8 U: {
0040123F  .  43 61 6E 27 7>ascii  "Can't Create out"
7 {$ H7 e' k. R; L' P4 n" l6 {5 R0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0 ( J3 }6 |: J9 N8 _2 l0 a& V! ?
00401258  .  6F 6E 65 20 6>ascii  "one char outpute"
- b$ X5 E5 ]4 T00401268  .  64 0A 00      ascii  "d * v+ w  c; e  J( F# B7 D9 P6 i
",0
% W3 S" M. X3 ]0 O0040126B      90            nop 1 s2 G3 U4 C3 A9 U
0040126C  /$  55            push    ebp / O! v/ Q" t4 o% ^' d
0040126D  |.  89E5          mov    ebp, esp
: |5 r1 l% n1 `# {6 M0040126F  |.  83EC 18      sub    esp, 18
) n% r6 F7 h- U8 Y- ?/ ]00401272  |.  E8 39010000  call    004013B0   ?* b  H3 r: I& x, M
00401277  |.  83C4 F8      add    esp, -8 ( `* O, u5 W8 J) A/ z
0040127A  |.  68 10124000  push    00401210                        ; /mode = "r" 9 ^2 R" ]4 K7 B: e
0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt"   D7 k* T9 l  |' d2 E
00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen 3 t+ L1 _  G0 D/ h: }; D- r
00401289  |.  83C4 10      add    esp, 10 * w7 n- w; {1 ^$ O7 k
0040128C  |.  89C0          mov    eax, eax 1 d$ Q' }. W# _
0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax . D1 \" ]: C& y) `+ e
00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0 8 L$ k. K! e) l- |' s/ [: w3 `6 @
00401295  |.  75 10        jnz    short 004012A7 ! |/ {- J1 |% X- m' b: A
00401297  |.  83C4 F4      add    esp, -0C 3 _6 w  f; I  a, w; @- _
0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!" 1 y& k, |2 v, q$ {4 ]
0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf
- R# }; y! d) }1 h004012A4  |.  83C4 10      add    esp, 10 , R+ s; k( h; k9 A% i
004012A7  |>  83C4 F8      add    esp, -8 2 t( ?$ [+ L- m
004012AA  |.  68 32124000  push    00401232                        ; /mode = "w" . b7 v" Z6 O, }" u; {# A
004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt"   e' t' N0 E5 a' o+ w
004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen 4 z  g# L- N1 Q9 a" |. y/ p( G
004012B9  |.  83C4 10      add    esp, 10
- l) R1 B" K- l. C7 v004012BC  |.  89C0          mov    eax, eax 0 \4 P2 O/ E+ T3 S5 T
004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
0 _+ E! x% J. T  J: ]  [004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0 9 O0 e' p: N% ], E! B6 v: ]$ I
004012C5  |.  75 10        jnz    short 004012D7 7 I( e" Y, [+ I8 w: J
004012C7  |.  83C4 F4      add    esp, -0C 0 ^6 t/ p6 [% {) N- I$ r
004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"   H2 ]( g9 J1 V% T# t6 Y! Z
004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf 1 B7 A6 ^5 c, E* ^% P" x; d
004012D4  |.  83C4 10      add    esp, 10 ( f0 F: J: O3 ]% Z+ t! n
004012D7  |>  83C4 F4      /add    esp, -0C 6 j- `: l' j# m' l- |
004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4] - C! T5 Y! k* b# k: s2 L
004012DD  |.  50            |push    eax                            ; /stream 2 @( f, R7 [  x
004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc
# R  d1 {6 k: e! R) @+ x6 T004012E3  |.  83C4 10      |add    esp, 10 * z$ r/ E7 x$ Z5 Q3 x
004012E6  |.  89C0          |mov    eax, eax , P* Z9 W7 s6 b2 ?2 G% \
004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax . o' m  r! E1 u
004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
! D& N- C( M, `' p: @004012F2  |.  7F 23        |jg      short 00401317

7 s6 A% ~3 O1 z- t& P" ^4 Z004012F4  |.  83C4 F8      |add    esp, -8 7 {: b: C. ^& w) ~" r3 J- U
004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8] " `0 a5 o. d3 J" R: P8 \, f
004012FA  |.  50            |push    eax                            ; /stream 2 j% f; Y8 ?/ ?8 F
004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; |
% g8 V, W8 F. o2 Y3 M! k; U004012FE  |.  50            |push    eax                            ; |c
0 J* x2 V+ A/ T* c- Z3 N004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc , Y, L- c+ B! b6 S) `- u* m, f
00401304  |.  83C4 10      |add    esp, 10 5 R. N4 ^2 X. P2 p% z" J  o
00401307  |.  83C4 F4      |add    esp, -0C
2 L! I/ c4 F% f1 R4 z! x8 {2 C0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,""
) H$ S9 S9 k) @6 z, o. c8 R0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf 0 K" ~. a3 n- L' \: t* d6 o* o
00401314  |.  83C4 10      |add    esp, 10
/ l* R. O. m2 Y% d: O00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1 ; L9 j, Q3 f2 Q% f+ l7 R: j
0040131B  |.  75 03        |jnz    short 00401320
) q7 M5 p! V% E: ?/ |8 \0040131D  |.  EB 03        |jmp    short 00401322
: T9 U: B# R' B0040131F  |  90            |nop ' A5 L% q; A9 F
00401320  |>^ EB B5        \\jmp    short 004012D7
! L/ w( U; S2 [2 r00401322  |>  C9            leave
9 j8 Q: [# @' z0 Q3 C( Y& v00401323  \\.  C3            retn + N7 \5 Q* M. D2 u* X5 l$ N
00401324      00            db      00
7 o  {5 _# b# Y+ V) Y9 z00401325      00            db      00
  @' ], ]; H. C; C) c$ e00401326      00            db      00 . a7 ?8 z2 T. K7 N3 Y
00401327      00            db      00
9 m! ^1 F9 i4 n9 m# j; @. b: ~4 x00401328      00            db      00
; _- r% x  z& Y" u. E  \  F# U00401329      00            db      00
( w7 s# _- Z1 @6 A! ], X0040132A      00            db      00
5 m/ J  T6 ]3 a# e- {6 S  _) E0040132B      00            db      00 2 ^# ~, K* J2 Q9 ^) P( \' V9 k! F' ~5 ~
0040132C      00            db      00
& g: S( \1 h" }( g* @0040132D      00            db      00 3 m) ~3 f8 ]& n8 Y
0040132E      00            db      00
# d5 `: r2 G7 t+ f0040132F      00            db      00
5 h) a) e) h/ d# a00401330  /.  55            push    ebp
; h) M" l+ q  j9 L, S00401331  |.  89E5          mov    ebp, esp
% `$ V: [8 O7 x2 w  }00401333  |.  83EC 08      sub    esp, 8 - y& F6 c" n( E
00401336  |.  A1 10204000  mov    eax, dword ptr [402010]
" l6 B$ m9 I. @- |0040133B  |.  8338 00      cmp    dword ptr [eax], 0 ' f" W+ f8 U3 u6 _$ E
0040133E  |.  74 1D        je      short 0040135D
0 x  e  o# P. T00401340  |>  A1 10204000  /mov    eax, dword ptr [402010]
+ |  B9 B* [4 ^5 ~# O( X00401345  |.  8B00          |mov    eax, dword ptr [eax] . J7 r7 R6 S1 w! p( i' D$ e( k
00401347  |.  FFD0          |call    eax ! Z7 ~# @( w- _# D5 \
00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] 4 t: _# n$ [/ \+ ]
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4]
5 h' y4 Z+ c1 W( K7 W; G4 I00401351  |.  8915 10204000 |mov    dword ptr [402010], edx 5 ?* K5 [! y" z3 g5 G
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0
- R4 O$ }! m4 n  e  G0040135B  |.^ 75 E3        \\jnz    short 00401340 - S5 Z. b7 z6 J6 F! o/ t8 ]' M
0040135D  |>  C9            leave ! R: J1 k5 ]: P% b3 G* `
0040135E  \\.  C3            retn
% k( B* \/ x. B0040135F      90            nop
9 @; Z' t; f; o1 m, a1 [# {00401360  /$  55            push    ebp
5 K# Y# u5 Y) E) c00401361  |.  89E5          mov    ebp, esp
% u! p7 V# g+ ~" U00401363  |.  83EC 14      sub    esp, 14
$ A3 }$ ]" H$ g& ]1 k9 n& c  x1 ]00401366  |.  53            push    ebx ( G3 ?! U6 R1 i' d, S5 N
00401367  |.  A1 58144000  mov    eax, dword ptr [401458]
6 c# m4 f* p# n9 i0040136C  |.  83F8 FF      cmp    eax, -1
' k6 r) Q. _0 f3 l0040136F  |.  75 19        jnz    short 0040138A * \6 y6 c/ k' J, r" K8 [5 ?; h
00401371  |.  31C0          xor    eax, eax
, O" f; a" p7 N3 E# N: }( o00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0 3 |; a+ p; }7 ^$ \
0040137A  |.  74 0E        je      short 0040138A
, v1 Y3 o5 j2 K0 r! i( Q5 r0040137C  |.  BA 5C144000  mov    edx, 0040145C
9 J6 C# o: t3 i* W0 b00401381  |>  83C2 04      /add    edx, 4 ( {( S1 e. m) e
00401384  |.  40            |inc    eax , c4 ^$ o# z$ b5 u9 N5 l" w
00401385  |.  833A 00      |cmp    dword ptr [edx], 0
9 r- R! e# r! V) c2 W+ D00401388  |.^ 75 F7        \\jnz    short 00401381
. t% X1 y2 }# \1 M0 Y( y4 _0 h0040138A  |>  89C3          mov    ebx, eax
: c% f0 P" l4 B. f0040138C  |.  85DB          test    ebx, ebx
/ \) {% ?% Y' _$ ^5 ^7 N0040138E  |.  74 0C        je      short 0040139C
0 I7 i9 ]3 A5 y/ Q  B1 ^00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
+ ~) [4 Y; k  h4 K3 N, ]3 G5 _' ]00401397  |.  FFD0          |call    eax
% L+ w+ Z5 t1 @2 }1 h3 a0 s5 D00401399  |.  4B            |dec    ebx 7 R. Y( q3 s. r6 l" [$ f1 z& V
0040139A  |.^ 75 F4        \\jnz    short 00401390
& I. }/ S8 a' L* C$ [0040139C  |>  83C4 F4      add    esp, -0C   w4 u) B( U3 \: R
0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330 9 d' l) ~- N; W( C) a! ~$ o7 A$ p
004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
4 d3 {5 N( W, d004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18] / e0 g& w. b& x- R3 |
004013AC  |.  C9            leave
, c/ m! C. g% @: I004013AD  \\.  C3            retn ! y5 k! v# n1 C2 D( ]3 u3 G) O* N  X
004013AE      89F6          mov    esi, esi % D4 e; s# l. P8 C( ?2 n# z4 f
004013B0  /$  55            push    ebp ( U( z0 w- a! h2 m5 j, i  f
004013B1  |.  89E5          mov    ebp, esp " N$ O7 w2 t7 ~" @+ Q8 M3 g, w
004013B3  |.  83EC 08      sub    esp, 8
' L0 H7 G) u4 B5 s7 l4 W) o004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0
" X) ~' p, R$ `& L004013BD  |.  75 0F        jnz    short 004013CE
3 S: _4 C2 a( p# s5 E: C3 s, ^004013BF  |.  C705 14204000>mov    dword ptr [402014], 1 0 ^8 d2 X3 Z" ~2 r
004013C9  |.  E8 92FFFFFF  call    00401360 8 ~! z+ D; i' F( C9 V6 m8 H
004013CE  |>  C9            leave / M' V5 _* Y9 B; {& L- S
004013CF  \\.  C3            retn
: H- f& h8 z% F004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode
; s4 t/ Y' f2 T* P004013D6      90            nop * R. v* n8 M$ b
004013D7      90            nop
: m; H9 M7 Q/ D/ C) D004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob
# l' p8 V$ O# r& O3 C/ k004013DE      90            nop 3 I* g' @  F' M1 p" x% V
004013DF      90            nop # Z! v) |8 h/ r$ y5 n4 i
004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type
- e, a; M  P$ I- B  `004013E6      90            nop 9 \+ u8 \7 J5 Y8 D5 \1 j; }! v
004013E7      90            nop 2 K% E! x8 l; c2 M5 C% |
004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit ! R' I) k: e& z: e- l& D& s% b
004013EE      90            nop
0 B- o! \; R# J$ P2 x- f4 O' J004013EF      90            nop 4 w) ?( y4 q; ?: _+ ^# I7 Z
004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ
. a2 w7 a6 ?$ Y+ R7 Y004013F6      90            nop
  Q+ d8 g. y2 u1 z004013F7      90            nop , V2 J2 g$ v  x! U$ M. Q& f
004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset
9 {+ x9 K. |8 ?5 D) {" r0 M$ i) k. y# }004013FE      90            nop 1 O5 Q1 y/ @% u9 a/ P3 o5 H
004013FF      90            nop : c+ W2 N+ Q* G- O& K
00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal
" ^& K2 u) M7 E00401406      90            nop
. f" x1 {( X1 I, T- n00401407      90            nop 9 u, \* J9 U  D! J1 _* M
00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno 8 F: \  C. k5 U0 W1 n1 P
0040140E      90            nop
5 }/ }' E. R* j, g1 o- F- N; W5 I% {0040140F      90            nop & U  i+ _/ m. h( w# t" c7 c/ G
00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode / `+ x. e) s* g7 F
00401416      90            nop 1 S* a  M& r* H% e. F
00401417      90            nop ' U+ A7 J2 p( j
00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs ! x- q7 v/ b5 D4 Z3 R/ C. I6 W1 ]
0040141E      90            nop
0 J  S9 I1 |  U0040141F      90            nop
( W  E4 X! J+ e7 I( C00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc
! u  d1 n  }. |, ~; ]. Q00401426      90            nop
1 l' K; q8 V& ]0 X) Y00401427      90            nop ! D9 ]3 F5 g; z/ f
00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc ( ?, R, T9 S+ U2 `& q! G1 R# O
0040142E      90            nop : ?6 Y- j" s3 H! u1 A; R) N. u
0040142F      90            nop
  z3 e  x5 G: \% ~00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf 9 T& v/ W- i' v' G. `
00401436      90            nop $ p* G+ ]+ `" i7 f1 f( X- \
00401437      90            nop " L: E' z& e7 m- U# V6 n, P
00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen 1 ]# k4 g/ B1 p" {' d3 {
0040143E      90            nop
2 P; K6 j7 g8 U2 ]% q8 s0040143F      90            nop
2 U/ \8 p" r# _5 u( O$ r4 p00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit
& k1 z: {" @4 ^  [00401446      90            nop
, v9 K% h/ r6 Z. v' w# |9 w00401447      90            nop + P- R% H5 W& w% F; H- Q
00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter 2 J% S# z1 R( y  l  ^. N* g
0040144E      90            nop 2 T8 l0 v( P6 _- R0 v' x9 B/ v
0040144F      90            nop
) b6 Y+ j* o$ S00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess   h5 z$ {: e; O/ S4 ?
00401456      90            nop 5 A4 q! @% R/ h' X: A% m
00401457      90            nop
7 v8 u+ V% o9 B1 w00401458  .  FFFFFFFF      dd      FFFFFFFF
* R3 ]" p; M, m0040145C  .  00000000      dd      00000000 7 v- w. S: w- Y) l
00401460      FF            db      FF
' ]3 r% ^" n5 I( D' e00401461      FF            db      FF
! s$ Q7 A. K+ t. e2 a00401462      FF            db      FF
# j& Q5 u( @" _9 r6 R& X: a00401463      FF            db      FF
. `* q* q& l) g) t00401464      00            db      00
/ ]7 w( `) _' {' \# J$ [. m. v00401465      00            db      00 " n# I: X" T) z) E" P) x+ u
00401466      00            db      00
5 W) l; i' m1 p9 W- m" M. u00401467      00            db      00
作者: shane007    时间: 2009-10-10 22:14
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。
! \, D4 n- r8 I9 D" \) }深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
1 s, M* a: e4 X! m# b, {. l比如不用fgetc这个标准c函数,而用mfc的类似函数来编。( }: \0 J" V9 [. z8 s1 A1 e5 b
让我们看看生成的汇编代码有什么区别。% u) R% ?1 ~5 u8 ?5 z
你也可以试着修改一下。
作者: 深绿    时间: 2009-10-12 11:51
MFC是C++的类库吧,我不是很熟悉
) T. S7 A2 f  l! @/ y) T# l. _% b* W, A: t) i/ \4 p
说说我对单字节内核的看法:: v# D" B2 G/ U8 t! F* N
' O7 s4 D8 j2 d* N# L
我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,
1 O) n7 a/ \4 R& v然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。# y6 F% G4 C) e1 d& r: s# X$ L4 [7 B
% ?- F4 _" P% F: _) U
举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核
/ G3 o0 m* r1 W就很有可能无法显示中文,尽管那些中文数据都存在。
- B$ U& R* @4 m' n% v9 d& g5 ^0 }( }+ X$ |+ [$ R) U6 t
所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。
7 P/ ^0 Y6 r8 Q% v- m% E3 |3 Y, i8 B% j% ]+ f! d) K
因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。# K& q( R0 t; d& I3 J; X6 H, G
# w" H# ^& s' ~: [! X% U( h
中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。
) @4 I+ j! y  N2 w+ e
; l" O7 h$ I6 ^: }9 E$ O那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字2 v; x) V3 j8 f3 }

9 Y' K! v9 {, [% F- `: j那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。! j' t  I; u: Z

! q9 C; L/ C1 d7 ?" f就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
作者: shane007    时间: 2009-10-12 13:09
其实,单字节内核一般有2种情况。/ S5 N7 t) D) J. U3 p, Y/ X
1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符
- Z" I7 w( w6 R: M* D2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了
! f7 i3 G" c( G# m3 F2 N1 e5 l( p: J" I2 t% |
真正的游戏应该会用这2种方式中的一种来处理。
" V# d' |" ]+ F) F8 @这个单字节内核模拟程序其实只模拟了2的情况。6 c+ k' |* i/ {$ n) F5 I
要模拟1的话就要制作一个图形程序了。' d+ ?# u) W% u, }6 j

1 M4 o' ?$ B, |" L: N( C这个单字节内核模拟程序本身的意义其实不大。
1 P4 o& L) ?; J; C其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
作者: 深绿    时间: 2009-10-12 15:34
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
9 ~1 n5 j# Z2 s所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。
& S3 t0 ?* S/ \$ y这样的理解对不?
作者: shane007    时间: 2009-10-12 16:44
引用第8楼深绿于2009-10-12 15:34发表的  :, [% @5 ^$ z1 S- y
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
2 `0 @8 E& [7 E/ E& A所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。5 [; Z8 `$ U" n) z& m- V6 _. c
这样的理解对不?
, E9 v$ q. R$ R$ |2 U& b( }
理解完全正确。
! @+ ~. z, _" c: S, S+ w不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。
5 _2 J3 j* D" j( }1 b9 s! ]: E$ N
有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。* I9 m& u5 D& H+ b1 o
然后逐个nop测试,看有什么变化。& g: X2 [1 M) V! x3 n6 f" t1 G0 o2 O
. ^2 w6 Y* c" P( F* _2 P
你可以参考一下这篇帖子
- i3 z4 P1 ], f8 I) n游戏汉化中的双字节问题处理原理# S# R9 Z! @. E1 S0 H" v- l# s4 t( g
https://www.chinaavg.com/read.php?tid=18709
/ F; J3 f& v( U, k" U* q作者好像是左贤王主力人员。




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