设为首页收藏本站官方微博

汉化任务 【汉化与汇编】单字节内核模拟程序(深绿请进)

[复制链接]
查看: 2753|回复: 9
打印 上一主题 下一主题

[汉化任务] 【汉化与汇编】单字节内核模拟程序(深绿请进)

跳转到指定楼层
楼主
发表于 2009-10-8 17:41 | 只看该作者 回帖奖励 |倒序浏览 |阅读模式

【汉化与汇编】单字节内核模拟程序(深绿请进)

分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt# j4 ]* C8 `# R: J/ K' _' ]
先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
' D  w' {" J; y$ y& S
8 j* Z5 M8 l6 L: O但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :3 A4 [, V1 [5 u5 I
我稍微改了一下程序,包里面有个input.txt和output.txt
4 [. H1 i8 }7 W2 \; w" {; Q; u先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
# ~, O9 X* F  I* V& z0 j- O) M
- d. p9 ^! Z% ]: U+ K0 u  N3 P但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

$ Q  K+ A. a# s1 @9 Y8 }是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。9 k5 z$ `6 S8 E5 K. m' x
这就模拟了汉化了文本以后,中文字符被过滤的情况。
  D5 b+ ~) M8 \  _& l* V! `+ m  U0 Q, y+ j
接下去就可以在汇编级用OD载入,开展研究了。
" J8 g% h3 D% y+ ^% z  F4 D  r, g想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

地板
 楼主| 发表于 2009-10-10 21:51 | 只看该作者
看了代码,应该把ch<=128 改为 ch<128 吧?
回复 支持 反对

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。 0 @2 P& b3 u( T' p' H" v: V1 j6 B$ w
请看红色的部分,这就是和0x80比较的部分。 & D  J; R: |, ?2 c# x
把这2句NOP掉,然后保存修改后的文件为exe。
  q4 M5 K: h7 E6 K* t我们发现input.txt里面的所有内容都能被输出了。
6 e; Y: u. N; B& t& q8 \附上修改后的exe.
7 c# D6 T) J; m深绿,你可以把这个操作过程试一下,练习一下. : t/ u' q2 P0 e
9 N2 |. ^3 U2 s2 M7 a7 d. v
00401000  /$  55            push    ebp - E. Q; b" b* ^3 T! z, W
00401001  |.  89E5          mov    ebp, esp / |$ `! ]9 k# @* N3 M( U
00401003  |.  83EC 18      sub    esp, 18 & P4 R% @% o0 y  [
00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0 ! @: y& I( @! K" Y/ R# b4 W$ B
0040100D  |.  83C4 F4      add    esp, -0C 2 L. ?, Z  d$ q) z, R1 H. t7 ~
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4]
$ s( T) f/ a" p. ~& }4 G00401013  |.  50            push    eax 9 d* Y' V# x1 h( N4 A) U
00401014  |.  FF35 08204000 push    dword ptr [402008] . S* k; E# t( B8 X3 X
0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] + |& q( g9 J7 f2 x- [
0040101D  |.  50            push    eax
# c1 S+ t+ `! c/ L0040101E  |.  68 04204000  push    00402004 8 g3 d: H4 u0 w* `
00401023  |.  68 00204000  push    00402000
: g* L. I, s4 e00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs> + r! N, T* j( {; w! y
0040102D  |.  C9            leave
, s1 C0 }0 j5 J! |1 I0040102E  \\.  C3            retn   D# D# F/ ^+ t/ |* P3 j; ^5 F
0040102F      90            nop % t: K4 a3 Z' M2 {- M
00401030  /$  55            push    ebp $ b) G) A- y6 u: S& e
00401031  |.  89E5          mov    ebp, esp ( a8 Y0 T. O1 U4 S6 S
00401033  |.  83EC 08      sub    esp, 8 % _% w' I, \8 E" h  d
00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C] 8 w: j- w( a5 j/ e7 w) \- H
0040103C  |.  85D2          test    edx, edx ) t+ \- C% y% I( y+ x5 I
0040103E  |.  74 7B        je      short 004010BB
9 u, D1 s6 _  P+ `% {00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> 6 W7 _9 A0 q( P& Y6 ?6 U9 c
00401045  |.  8910          mov    dword ptr [eax], edx / |* ?: L- R, [' c8 N! v
00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
1 ~4 D6 p/ l2 H: F0040104C  |.  85C0          test    eax, eax 7 S+ F8 \9 p* p7 O
0040104E  |.  74 1E        je      short 0040106E
- s. ?' A/ C: }) ~* n" S00401050  |.  83C4 F8      add    esp, -8 " ?7 L: ]9 J- ^" a  `" G: V
00401053  |.  FF35 0C204000 push    dword ptr [40200C] 5 `7 J5 z3 o8 x& y) V8 O
00401059  |.  83C4 F4      add    esp, -0C
, H- c7 O" b8 i0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob 4 C, B6 w# u: I/ r
0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
, \1 W9 r/ {6 M/ M1 Y# A00401062  |.  83C4 10      add    esp, 10 1 G0 I; V( x: Y  ~
00401065  |.  50            push    eax                              ; |handle " x/ I. _; ]5 H) z2 N' r
00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode 4 W! k) P& C, g$ `; e; n
0040106B  |.  83C4 10      add    esp, 10
& @. I6 T- K9 O) M$ \8 l0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
5 _* B0 A+ V4 U  r, P  z00401073  |.  83C0 20      add    eax, 20 ) b  E! e$ \1 S  A0 n: g
00401076  |.  74 1E        je      short 00401096
! l9 b, ?. l, S00401078  |.  83C4 F8      add    esp, -8
3 P! v5 c9 J# W' H* X  L( y0040107B  |.  FF35 0C204000 push    dword ptr [40200C] 3 t( T$ x. M2 o; j- }, I
00401081  |.  83C4 F4      add    esp, -0C 9 o7 L' W3 k- Z9 T0 p  u
00401084  |.  50            push    eax                              ; /pstream
' f0 b; F8 Y/ p( g! t00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
) C0 k0 ^, w, k! e5 m$ u0040108A  |.  83C4 10      add    esp, 10
6 t5 A, M; _- w9 e' G0 M, j( V' W0040108D  |.  50            push    eax                              ; |handle 7 k4 E- p3 H9 F( D: G! ^
0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
! B% @! b% e9 i8 S0 N, L7 }00401093  |.  83C4 10      add    esp, 10
$ I0 l/ e; T2 {. |# p" |00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 5 o' w7 h" N3 R/ U/ y! p
0040109B  |.  83C0 40      add    eax, 40
  g+ o. t# {; K  u4 ~5 N0040109E  |.  74 1B        je      short 004010BB . k6 g' S+ V  s0 ~
004010A0  |.  83C4 F8      add    esp, -8 ! y3 C( I/ H# y8 B- M# k. @' |
004010A3  |.  FF35 0C204000 push    dword ptr [40200C]
* G6 g/ K( g" G- n: G004010A9  |.  83C4 F4      add    esp, -0C
! `. u6 ~$ c% x* H; R& |: R004010AC  |.  50            push    eax                              ; /pstream   E* c- C: E& c. |8 r
004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
7 @8 Z4 T8 H2 ^* ]  Z" r' C. v004010B2  |.  83C4 10      add    esp, 10 3 g  a; x, |2 `3 q
004010B5  |.  50            push    eax                              ; |handle 8 X( f, N# \& f# z) q/ H' \
004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
4 x2 l, }0 b7 G4 e004010BB  |>  C9            leave
; s/ j* |* _$ O5 r: Q% g004010BC  \\.  C3            retn ( `* x$ _! u8 z5 b* k7 b. d6 _
004010BD      8D76 00      lea    esi, dword ptr [esi]
5 X) }: Z2 ~5 r, ~& C7 i: \004010C0  /.  55            push    ebp
$ ^0 E2 T+ b: e5 c$ o004010C1  |.  89E5          mov    ebp, esp
0 q& u, c  Z) z5 P. R004010C3  |.  83EC 10      sub    esp, 10
0 W+ y$ ]+ ?( F004010C6  |.  56            push    esi
( j  g6 z0 M# y' @004010C7  |.  53            push    ebx
! b8 R& f! L9 k+ D004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8] : |$ q- D$ l5 g/ L
004010CB  |.  31DB          xor    ebx, ebx
# F0 U" f1 L1 r7 X' p0 a5 D004010CD  |.  31F6          xor    esi, esi % F; B+ ^9 Q: q0 O; w# P9 C
004010CF  |.  8B00          mov    eax, dword ptr [eax]
0 k8 k, G9 G1 S. F( g5 @& D  n2 B004010D1  |.  8B00          mov    eax, dword ptr [eax] ) \0 S! P& B, C& I5 N
004010D3  |.  3D 910000C0  cmp    eax, C0000091
3 H0 |5 b5 P( F! e  T. v0 E1 s' c004010D8  |.  77 16        ja      short 004010F0 $ q/ g4 }4 q9 Q
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D
$ q1 q9 F4 ]: r, l# i: d/ s004010DF  |.  73 4F        jnb    short 00401130
- y, q$ K, d9 \) l004010E1  |.  3D 050000C0  cmp    eax, C0000005 " T( |1 Q5 W9 x% v- V
004010E6  |.  74 18        je      short 00401100
" F3 p7 ?" {3 _2 D004010E8  |.  E9 86000000  jmp    00401173
3 @4 }$ t7 n5 W004010ED  |  8D76 00      lea    esi, dword ptr [esi]
/ ]" ~! |8 G/ o* S+ J' o" a$ T004010F0  |>  3D 930000C0  cmp    eax, C0000093
5 `. d. E/ Z" p- L" M- V+ l/ Z004010F5  |.  74 39        je      short 00401130 * n' ?$ M6 {' g3 Q
004010F7  |.  3D 940000C0  cmp    eax, C0000094 - B  S  A' m+ x! ?6 ]( q8 \4 J
004010FC  |.  74 37        je      short 00401135 # y% [4 S" E+ }8 V
004010FE  |.  EB 73        jmp    short 00401173
, g% `1 ~8 _  Y: F00401100  |>  83C4 F8      add    esp, -8 , B; F4 V* @( `; g
00401103  |.  6A 00        push    0                                ; /func = NULL 3 U8 X) e. ?4 D
00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
4 G2 u7 C5 j2 W00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal
3 ]. M" m% ~9 L0040110C  |.  83C4 10      add    esp, 10 ' {% Z( M5 T. r
0040110F  |.  83F8 01      cmp    eax, 1
: _% D+ E' U5 u9 X00401112  |.  75 0E        jnz    short 00401122
3 C2 f1 `/ w7 i% K00401114  |.  83C4 F8      add    esp, -8 9 a) V$ q: ]6 d7 a$ l2 y& _* F) p
00401117  |.  6A 01        push    1                                ; /func = 00000001
, ~0 N) [5 L0 f7 s$ C00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
. g' i% l  ?0 W, b7 V" J0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal   p7 e# z5 F4 W1 R
00401120  |.  EB 4C        jmp    short 0040116E 2 `0 t; j; j8 V  H8 z5 `% P6 o1 d
00401122  |>  85C0          test    eax, eax . Q4 X5 W8 j% y' i# n
00401124  |.  74 4D        je      short 00401173
6 v$ ?' ^( y2 h, p( m" F00401126  |.  83C4 F4      add    esp, -0C
3 I, U3 |$ y4 R$ w00401129  |.  6A 0B        push    0B
, Y, e4 K, a6 g. `7 ^0040112B  |.  EB 3F        jmp    short 0040116C 2 k! [: p- @; ~3 Z- r* n
0040112D  |  8D76 00      lea    esi, dword ptr [esi]
8 d1 |3 V" W) W$ t4 R3 u3 y" F: J00401130  |>  BE 01000000  mov    esi, 1
% G) ~; P1 H0 ~00401135  |>  83C4 F8      add    esp, -8
& `0 c' j6 w5 s: D. x3 |; x* s0 d00401138  |.  6A 00        push    0                                ; /func = NULL 6 g; D2 i$ i) |! U
0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
  ?) X0 H' R- g( f. Z7 v+ w. G0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal
5 Z5 S* I( j' D; d00401141  |.  83C4 10      add    esp, 10 0 e( _( [, ^, T
00401144  |.  83F8 01      cmp    eax, 1
- o) P2 G% m( [: v2 W, F5 x00401147  |.  75 1A        jnz    short 00401163
& f, t( j, y* M4 }  |" \00401149  |.  83C4 F8      add    esp, -8 : Z7 {$ u( W$ B: \" j) Z- H: T' \
0040114C  |.  6A 01        push    1                                ; /func = 00000001 5 A" H. p) @6 O! L
0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE
* [. h/ X% s! p  D2 N00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal
0 U, k7 {$ i- `& R: @" h00401155  |.  83C4 10      add    esp, 10 5 o1 V7 l$ ?8 X0 u( V& Q
00401158  |.  85F6          test    esi, esi 5 M+ k  Z2 Y( _, l8 Z; T
0040115A  |.  74 12        je      short 0040116E 2 r7 `9 e! V+ l8 @
0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset 5 u7 H# J" |5 D+ i, K5 H
00401161  |.  EB 0B        jmp    short 0040116E
4 I' m; b5 \9 S5 T# E* j$ v: h4 N00401163  |>  85C0          test    eax, eax
& ]0 L. O9 U0 |: ~( b+ X00401165  |.  74 0C        je      short 00401173 8 q" F+ O# z) I& h5 |
00401167  |.  83C4 F4      add    esp, -0C
: s9 T, v) l- r; i# f) ^0040116A  |.  6A 08        push    8 4 t$ E/ h0 w0 n. R2 [
0040116C  |>  FFD0          call    eax 9 [+ w4 O% N3 o* J, k; b
0040116E  |>  BB FFFFFFFF  mov    ebx, -1 ( \* S1 k9 A5 V: I/ v# ^. b, Z
00401173  |>  89D8          mov    eax, ebx * }$ f. ^* N0 _
00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18] $ C; C1 D4 G8 G8 n) l5 g/ O
00401178  |.  5B            pop    ebx
( n( V% D5 ~& T  I00401179  |.  5E            pop    esi
/ u# P+ p. a& E! C) r0040117A  |.  C9            leave 0 N- |1 t/ q  L( x/ y# n% T
0040117B  \\.  C2 0400      retn    4 ; g  j0 b& X1 {9 h1 i+ S
0040117E      89F6          mov    esi, esi
) V; C( j7 ?  X$ j00401180  /$  55            push    ebp
5 z6 e. }( A  J00401181  |.  89E5          mov    ebp, esp " ~. m8 Y7 A( ^8 y4 o
00401183  |.  83EC 14      sub    esp, 14
1 ^* ~9 E* J5 {! `00401186  |.  53            push    ebx
  o- I4 [" N' [  j: G6 ^00401187  |.  83C4 F4      add    esp, -0C
  a/ k# |2 R3 C* r7 H. K3 l, ^0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0
. n7 O& `0 n* k( Q, L6 B0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter
' G- ^, |% P* z3 L2 g00401194  |.  83C4 FC      add    esp, -4
" ^% e! i/ J9 r% T" C00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset
2 X2 P! t8 A) |9 D+ ?5 I* I0040119C  |.  E8 5FFEFFFF  call    00401000
; ]; S& T( |9 i; K/ P004011A1  |.  E8 8AFEFFFF  call    00401030
$ a$ O/ v3 v: T7 i' U0 ?: S- R004011A6  |.  83C4 FC      add    esp, -4 * r% r2 @! f- A( y, ?" ?# g' B, Z, X$ x
004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ> & _1 O- {' e2 c, a( X; ~
004011AE  |.  FF30          push    dword ptr [eax]
9 k& t, o2 @9 c( N; m. U8 |% K' l004011B0  |.  FF35 04204000 push    dword ptr [402004] * o5 O( x7 w9 v7 n( Z1 m! r. l: n% a
004011B6  |.  FF35 00204000 push    dword ptr [402000] . V& [3 U2 P; h0 [; Q
004011BC  |.  E8 AB000000  call    0040126C
2 r2 z- M* [% O& D004011C1  |.  89C3          mov    ebx, eax
8 N3 N7 X* k! L. R8 n/ n, k- l( l0 x004011C3  |.  83C4 20      add    esp, 20
. ~! p7 U" Z  N& a+ ^004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit
9 R  h/ A& x' R; c" f004011CB  |.  83C4 F4      add    esp, -0C 0 n: @& ]$ l7 N9 Y
004011CE  |.  53            push    ebx                              ; /ExitCode
3 R0 u1 k; i$ h004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess
1 I6 O* r0 h9 w: Q! \004011D4 >/$  55            push    ebp ( q8 Y, D, z4 G* P8 l% w& ]
004011D5  |.  89E5          mov    ebp, esp 2 c1 `/ Q) A  s$ D* ^% [' p3 a
004011D7  |.  83EC 08      sub    esp, 8
0 H" \( h% c! t% {8 m004011DA  |.  83C4 F4      add    esp, -0C . Q  J. \3 ~- I3 X& b# ~
004011DD  |.  6A 01        push    1
0 u( V) X8 j9 J004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> : m( d* r( N! }( C1 {  f" M, d& B, T
004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
2 D: @7 W; v3 y+ M! J9 ~004011E6  |.  E8 95FFFFFF  call    00401180
1 u# M+ [! w* V2 }& n& N004011EB  |.  31C0          xor    eax, eax 9 m* e2 N4 u" A! k
004011ED  |.  C9            leave
' m6 T# s. k/ w) r8 [004011EE  \\.  C3            retn # G8 Q* }( }! Z% M
004011EF      90            nop
% B+ ~( d1 m3 ?0 ~004011F0  /.  55            push    ebp
; z. V, ^/ D- `5 R004011F1  |.  89E5          mov    ebp, esp 9 y' _: {6 i) Q$ L3 n; j( y
004011F3  |.  83EC 08      sub    esp, 8 + }8 P' W. ?* k* K& N
004011F6  |.  83C4 F4      add    esp, -0C 2 i& g4 e$ W# W: F& c9 E
004011F9  |.  6A 02        push    2
" W- w7 ?* y9 S* S004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
5 H. G, b: p; j6 y' Q) B4 B00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
6 X" M; X2 M0 A! g8 h& X00401202  |.  E8 79FFFFFF  call    00401180 ( D0 X% a' l! N8 X
00401207  |.  C9            leave
0 r7 n/ k9 }4 n- w# i% V9 G00401208  \\.  C3            retn ( s$ _$ T6 V3 \4 V$ \  ~
00401209      00            db      00
/ u( T5 E8 Y7 R. {- P- n/ x0040120A      00            db      00 $ Z7 X+ H( j4 m3 U1 X
0040120B      00            db      00 0 l( f2 K/ |+ Z( k
0040120C      00            db      00 6 p8 B+ W2 c2 B9 j1 l0 e
0040120D      00            db      00
( ?; t# m  {! M3 V0040120E      00            db      00
4 P: i9 o1 j) _: V3 @8 t0040120F      00            db      00 : z( q0 V  ~  G9 Z; e4 j: J0 @
00401210      72            db      72                              ;  CHAR 'r' # ^! @# i# L2 D5 G5 R& L
00401211      00            db      00 4 r  c8 f0 N8 G# s
00401212  .  69 6E 70 75 7>ascii  "input.txt",0 4 J2 b7 n* @0 q" k" |8 I
0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
. C& \+ K! _8 m: m" `0040122C  .  2E 74 78 74 2>ascii  ".txt!",0 % O3 ~% D/ n  e5 ?+ a
00401232      77            db      77                              ;  CHAR 'w'
3 c, i' p1 y: P00401233      00            db      00 2 u7 L% L& t- Q9 o0 C* s: a
00401234  .  6F 75 74 70 7>ascii  "output.txt",0
4 Z3 e( F" P7 \/ ~$ P0040123F  .  43 61 6E 27 7>ascii  "Can't Create out" 3 `# l( c8 b+ z+ O$ Y+ F
0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0
# Y" s8 ?. h1 F& U4 t* t00401258  .  6F 6E 65 20 6>ascii  "one char outpute" - M) z; ]$ ~& E% q, C" R
00401268  .  64 0A 00      ascii  "d
1 }0 v. ~) D) O  {% u7 z",0 1 e, g$ Y$ _+ U2 H- y
0040126B      90            nop ! G, a4 ]' o+ K2 D0 i) E2 m
0040126C  /$  55            push    ebp * E) b3 o5 T0 M6 U! i
0040126D  |.  89E5          mov    ebp, esp
8 a  w" q2 L3 m. e( T0040126F  |.  83EC 18      sub    esp, 18
0 H6 z- X. ]& R! y" |00401272  |.  E8 39010000  call    004013B0
1 m' k- m$ @' u( T/ L7 f00401277  |.  83C4 F8      add    esp, -8
5 W$ f2 M' L1 X& _3 T6 _4 S0 b0040127A  |.  68 10124000  push    00401210                        ; /mode = "r"
, P" h- d8 \% o8 z# q0 p0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt" # {) B0 v* W& I4 {# p, \$ k3 T$ ~* K% f
00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen 2 c; c+ c) d( O; W3 F
00401289  |.  83C4 10      add    esp, 10 + W/ E5 M$ a0 G" I% l
0040128C  |.  89C0          mov    eax, eax
! F6 H, h9 c: o0 W' s1 @0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax
1 [( C$ [- q3 {% {5 _00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0
1 y+ u) F; v# m; f0 U8 w  _00401295  |.  75 10        jnz    short 004012A7
1 |$ u5 L% M: {7 w0 O00401297  |.  83C4 F4      add    esp, -0C
* F! {2 _( P/ a0 p0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!"
3 z) D5 i$ r- B/ J6 L0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf : h8 Y" y+ a" k& l/ K0 L. Z* O8 j
004012A4  |.  83C4 10      add    esp, 10 ! Z7 J/ E- J6 g+ U/ ^1 f* A
004012A7  |>  83C4 F8      add    esp, -8 ; w7 c) [3 |! G
004012AA  |.  68 32124000  push    00401232                        ; /mode = "w"
+ g0 g5 N* B' g5 @! n# M1 p004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt" ! u+ Q4 m" @& F  e5 O- w
004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen
5 l) Y* k0 r5 B: N6 `/ \+ H004012B9  |.  83C4 10      add    esp, 10 " Q! S! \$ L. Y1 {0 \7 r
004012BC  |.  89C0          mov    eax, eax
$ ^) ]( v  k$ g. K4 \! u0 k004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
. j  y, O) U. R% [" A9 J004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0 9 Z6 x1 Q2 L/ J! U- v7 v: ^0 j
004012C5  |.  75 10        jnz    short 004012D7 & r# |: x4 h( f3 R; e6 L4 {
004012C7  |.  83C4 F4      add    esp, -0C
6 E1 [8 F5 l% _, C004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!" ; v1 `3 W* B* y4 @  O8 @4 M
004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf
. A& N, v" w4 l4 F# l004012D4  |.  83C4 10      add    esp, 10
- c5 t2 A' j: W- U9 {5 d% ^004012D7  |>  83C4 F4      /add    esp, -0C
' n% c2 S' I2 ]8 w- m004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4]
1 Z& Y4 k$ X2 g1 s; E004012DD  |.  50            |push    eax                            ; /stream ! T: \6 S3 @- `5 X1 ^9 t
004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc 5 y5 b1 t- A3 E1 ]/ f2 |
004012E3  |.  83C4 10      |add    esp, 10 % ?/ C& b- T4 a0 O) X# D) X3 i) N6 ~
004012E6  |.  89C0          |mov    eax, eax
8 B; r1 N9 _/ N* H004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax . I0 C5 o. C" U1 i" u+ l1 t
004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
% H" q* |: y2 [( x% a/ ~: ~* j2 r004012F2  |.  7F 23        |jg      short 00401317
8 J- p2 D. J0 N
004012F4  |.  83C4 F8      |add    esp, -8 4 J: k* D' x! a( M
004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8]
$ v; j: A! x/ }004012FA  |.  50            |push    eax                            ; /stream
% w1 o: @1 [" k- I/ Z& X* S1 c004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; | ; I' i" T4 W1 F. C
004012FE  |.  50            |push    eax                            ; |c 0 e  _+ ?9 u2 X5 \. `# |1 K* [  V
004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc
4 p, _  w- z9 G3 M00401304  |.  83C4 10      |add    esp, 10
0 e1 g7 ]3 L# R' f  T7 t00401307  |.  83C4 F4      |add    esp, -0C
- P& I5 Y( R: u! m0 u. T( `0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,"" ) _1 \# H- Q& d) ?$ v
0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf 8 v# y; h- n$ F: B- B7 K- y
00401314  |.  83C4 10      |add    esp, 10
- G% h; N! W7 o& k00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1
2 J& y4 k0 W* h/ J7 `0040131B  |.  75 03        |jnz    short 00401320 : W/ @: n: i7 Z6 r* u9 ^) d
0040131D  |.  EB 03        |jmp    short 00401322
( J4 f& P* ?- B4 F2 j0040131F  |  90            |nop
+ }7 I0 H% i' S! q/ m00401320  |>^ EB B5        \\jmp    short 004012D7
; d% Z  J2 _( C: i00401322  |>  C9            leave ' F: Y& a& w/ a8 S
00401323  \\.  C3            retn
0 @' W+ f  ]  F# `5 D00401324      00            db      00 6 e; D( t' n1 S! {/ E
00401325      00            db      00
6 e+ Q, P# I3 o9 X6 g- Z& P  N00401326      00            db      00 $ }: ?  \" D3 V8 k5 ~& @/ m% Y
00401327      00            db      00 , t& ^, o1 T/ W* K' a  D1 e! O
00401328      00            db      00
3 u$ `# K# o; {# L4 J  ]00401329      00            db      00
8 k4 \7 ~0 x" @6 G% u4 ]0040132A      00            db      00 , b# s8 d2 u, a' U: X( f/ M
0040132B      00            db      00 + s& d) M7 b2 i) B  S- V# H6 F4 \
0040132C      00            db      00 ; f) G7 O4 A: R* Q/ b1 u
0040132D      00            db      00
1 _9 i- x8 K/ d) c' e2 }/ e0040132E      00            db      00
4 c: D" y) R1 `, m0040132F      00            db      00 ' E1 Y  K( J5 W/ J3 n# \
00401330  /.  55            push    ebp 9 \0 K; a% p1 F( T' y. |! ^
00401331  |.  89E5          mov    ebp, esp
% U5 O8 w* o" J5 ^00401333  |.  83EC 08      sub    esp, 8
' F2 B  q: B- Y- I: S! g1 ]; c00401336  |.  A1 10204000  mov    eax, dword ptr [402010] 7 z) E. i8 h: X. T: F2 c- z: k
0040133B  |.  8338 00      cmp    dword ptr [eax], 0
% _1 \0 Z3 y- e  b9 L3 h- C# R( u4 v9 p0040133E  |.  74 1D        je      short 0040135D - S4 j- a2 n* A9 Q4 Z6 H
00401340  |>  A1 10204000  /mov    eax, dword ptr [402010]
: M3 y) j& K' v  z* `00401345  |.  8B00          |mov    eax, dword ptr [eax]
/ S  f' P3 k0 E5 p" f00401347  |.  FFD0          |call    eax
' i4 J: K6 W" j* L& U. N00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] " {2 w* Q* v* Y; b, q
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4]
0 O( V" W- G& d+ M) k00401351  |.  8915 10204000 |mov    dword ptr [402010], edx
. D: D3 x, e' ?! c% C& ^) ~00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0
+ p4 g8 s. u# G$ z0040135B  |.^ 75 E3        \\jnz    short 00401340 . |" I$ d* W5 ^2 [- G8 c/ ~
0040135D  |>  C9            leave
0 d* I4 j1 J3 p0 N- h9 H0040135E  \\.  C3            retn
9 o# f7 B" S4 K8 A+ P2 A+ T! K0040135F      90            nop 2 V  ?% P4 h. R* H
00401360  /$  55            push    ebp
# j2 N* h, E3 W4 E0 Z- l00401361  |.  89E5          mov    ebp, esp 9 q+ F5 |8 q& z: P
00401363  |.  83EC 14      sub    esp, 14 8 m0 m. x3 P6 a+ S
00401366  |.  53            push    ebx 0 [$ H, v* I# d! f* R( X4 y
00401367  |.  A1 58144000  mov    eax, dword ptr [401458] - _7 L$ U: l8 s" Z
0040136C  |.  83F8 FF      cmp    eax, -1 0 J4 u2 m& [. G8 c- _2 \4 s! @
0040136F  |.  75 19        jnz    short 0040138A
" G! c4 P# ?6 `5 a' W  }/ Q00401371  |.  31C0          xor    eax, eax . V4 W6 H: Q  t/ l+ e0 Z
00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0 8 u7 J( J( G& s. b- n! U
0040137A  |.  74 0E        je      short 0040138A
3 }  J7 q( z& c  o7 Y0040137C  |.  BA 5C144000  mov    edx, 0040145C
5 B* [# O( F- k7 ^- b0 L3 a00401381  |>  83C2 04      /add    edx, 4
, J8 f8 T  _5 @  Q  r00401384  |.  40            |inc    eax - B( {/ B- Q, j: q
00401385  |.  833A 00      |cmp    dword ptr [edx], 0 . r1 _; D0 X# F. b
00401388  |.^ 75 F7        \\jnz    short 00401381
8 A1 u+ a' n9 f, T/ g! p0 e% \6 j0 I0040138A  |>  89C3          mov    ebx, eax / E1 p7 L0 {( J- s' S9 d, P
0040138C  |.  85DB          test    ebx, ebx ' H6 h# `6 H* ^0 f% ?1 C
0040138E  |.  74 0C        je      short 0040139C
$ ]7 }( {/ r1 G( g( k9 v1 O  U00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458] + W2 p) [/ `  T& z, F4 d
00401397  |.  FFD0          |call    eax
7 N+ J, ?/ I/ R00401399  |.  4B            |dec    ebx ; W) I! a% F1 b) u# s, P
0040139A  |.^ 75 F4        \\jnz    short 00401390
; _0 ~: D6 L* ?: T( d+ A* @- x0040139C  |>  83C4 F4      add    esp, -0C
$ P4 u+ K4 k5 `0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330
& J/ z+ t+ d4 t! `8 o" L, v004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
* r. q$ _- W2 l004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18] ( ~; D+ T7 O6 G) |7 W
004013AC  |.  C9            leave
/ a' t: H" b2 n# M4 ]004013AD  \\.  C3            retn + q/ g5 Z+ l- w# ~0 _1 V1 G* g0 L
004013AE      89F6          mov    esi, esi
" D/ W( n& f$ k- K! O004013B0  /$  55            push    ebp + R8 ]% D) W( ^4 H
004013B1  |.  89E5          mov    ebp, esp # S; B2 {4 ?" R
004013B3  |.  83EC 08      sub    esp, 8
) @8 o: Q" M- q004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0 ' H2 e; J7 c" P
004013BD  |.  75 0F        jnz    short 004013CE & r+ D8 o6 ^! [0 p
004013BF  |.  C705 14204000>mov    dword ptr [402014], 1   a+ ]0 T3 w; x# ]8 J* ~7 |1 V
004013C9  |.  E8 92FFFFFF  call    00401360
. M  _) k# K* c+ Z& u004013CE  |>  C9            leave 6 X! c1 ]- ]6 O. S. p; M& d) [/ t
004013CF  \\.  C3            retn
" ]; E/ v4 }# T! i9 Y004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode & A3 |0 W4 a2 q& y
004013D6      90            nop 1 Y9 i4 A+ b, O& c2 S
004013D7      90            nop 7 v  P, L; Z, p; k  o
004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob
7 x0 |% f! t8 Y! `004013DE      90            nop
  Q' P" k6 A, n9 c  X  R* M9 D* g004013DF      90            nop
1 ?! X( ~3 i2 O1 p$ i& X004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type # B6 F2 D" _6 C* b' ^) x
004013E6      90            nop 8 l1 @$ L( l& M, M0 v  S
004013E7      90            nop
- x7 ~/ r# K5 t* x004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit 7 F: I( S( b  P/ ]
004013EE      90            nop 4 V2 B8 _# e) p/ y
004013EF      90            nop # x: ], c+ @6 o. W  r5 ~' O# x
004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ
3 `2 z# @8 R- u  Y- i$ M, e! w8 j004013F6      90            nop
* I+ N* U2 ]0 ~' s' q004013F7      90            nop ' L  e3 K6 q& m8 `& G  b
004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset
, R5 M+ t  V4 O5 C004013FE      90            nop 8 g1 U8 `( s+ n8 [( }+ x
004013FF      90            nop , w7 ?0 r. o, L1 I7 B9 H
00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal * H, O' Q2 q" Y1 q$ S5 t; \
00401406      90            nop # q' r  b6 G# V0 |5 N8 l( D5 }6 O
00401407      90            nop 9 u8 p3 v( E) x: o
00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno
% `' D- l! l, e% b0040140E      90            nop 3 \3 H* C' _. a3 a
0040140F      90            nop % I6 s, `7 I, D1 q# D$ Z
00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode
' m! g+ Z% G: R. j, _$ C  j1 w9 N00401416      90            nop
+ D# `. i  s( P/ S00401417      90            nop
5 T9 d  _+ f& @; @; _00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs 9 {. x. ]1 b. {$ b# _2 H
0040141E      90            nop 2 M  F' I8 O" J% H
0040141F      90            nop
1 M9 R7 [1 V5 U0 l- R00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc
  T% e8 Q: J9 g8 {- o$ ~' @00401426      90            nop ) s# P1 U  o$ P) \% |" Z
00401427      90            nop
- x7 c# S4 t% E3 r00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc
# ^7 T! a+ d4 y- z1 [; r( R0040142E      90            nop
) _  n6 P! f" q7 `+ C0040142F      90            nop
$ h5 |' [) }/ F# N7 ]8 T00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf & Q2 \5 V( m7 \' b6 r
00401436      90            nop ; J- k2 Y; g# M! I! Z) I6 B8 [8 g
00401437      90            nop + I3 \3 Q, `+ R# N5 @: P) z
00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen " ^- g& N7 f5 A- N
0040143E      90            nop
8 K. B3 b7 |) C4 M; q0040143F      90            nop
( N. w1 [3 S" U' g) a6 x3 @00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit
2 N( [; V+ ]& h2 k; L- a00401446      90            nop
' @# T6 {6 u9 _- l8 r8 u: O00401447      90            nop
+ F% C. q+ F4 B6 E( E5 Q00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter
4 g. N8 t' X& N7 ^) L9 R' U0040144E      90            nop
# P: u7 i4 A3 v. [1 t0 C+ N0040144F      90            nop
" B0 V' k1 ]2 h9 U/ z% |00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess + E, w1 ^" N5 D) o+ @7 S
00401456      90            nop 9 p/ H6 @6 E% |8 i; e
00401457      90            nop ; O! R# N( ]: `& C( }
00401458  .  FFFFFFFF      dd      FFFFFFFF " o* i, m8 P$ _+ S4 s/ G
0040145C  .  00000000      dd      00000000 + {# [3 m: J- v8 u' m
00401460      FF            db      FF
# _- A& p! M7 Y! B7 W: a00401461      FF            db      FF / K# ]* m" j/ M6 M# V4 U# Y
00401462      FF            db      FF   |& [" F$ [- o% `0 d
00401463      FF            db      FF 5 O3 X2 h. d$ j' t5 E
00401464      00            db      00
1 Z3 {3 K* N* v( H! {0 r) q00401465      00            db      00 3 G, H/ m+ h4 `" b/ X& O  Y. w
00401466      00            db      00
4 m  A1 U- T/ d. S) ]- {- Z5 i00401467      00            db      00

本帖子中包含更多资源

您需要 登录 才可以下载或查看,没有帐号?立即注册

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。# {; R; b; j0 a* n
深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?& c$ R" s% U1 A; [) h7 u& k
比如不用fgetc这个标准c函数,而用mfc的类似函数来编。
; E7 Y+ I3 R5 o5 Q让我们看看生成的汇编代码有什么区别。7 H& ^4 X! @, _8 N( t
你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉! `0 G& y+ ?' g& \# _3 B

! R( }/ W8 a( l2 x. o说说我对单字节内核的看法:8 g& Z& z0 i, a, e9 ^$ r; n
, t# p1 U# k5 }  k
我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,6 }( k# K! }* j8 A
然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。- M) A/ @* R1 y) u
2 \( b. P2 z( j& D5 Z" r8 k6 A
举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核
+ x1 G6 c# O6 N/ X1 L5 P  d- r) q7 y  O就很有可能无法显示中文,尽管那些中文数据都存在。) p4 A1 h% z  i: A" ]
& {* Q: H6 F; I3 `% K
所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。
  B4 r1 `9 _- j7 r  V& _) Y( _/ K2 D6 C
因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。
6 n; r8 z' v! c8 i' x
1 W6 R+ t! }' _5 d中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。
% h, [# G9 k) P, _# O& j; b( x2 U0 B7 b$ |% c6 Q8 k/ b# h
那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字
8 @4 |- ^5 \. ]: S' _8 i" `+ @$ ^8 k3 ~
那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。7 J; w3 C: R+ r/ M& q- P
9 ^9 i- Z" ?; l# y6 N2 g
就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。. l  [9 A* y. z8 X% K4 {
1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符, [+ X) s; c7 [; c
2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了5 Y7 J$ |# D9 d5 m
& T; x( R' P' \6 R
真正的游戏应该会用这2种方式中的一种来处理。7 Z# n, C$ C  P7 v1 V) w
这个单字节内核模拟程序其实只模拟了2的情况。
  b, k5 H& x5 q, n: u$ w7 h! E/ z要模拟1的话就要制作一个图形程序了。
7 _! b5 u& ^% M+ g3 U( Y5 U
# L% _$ H* F. \7 I  u这个单字节内核模拟程序本身的意义其实不大。
7 ]; C- ]3 J) e# r+ |4 B其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
3 x! m8 f" Z, u2 c. V; O; a所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。& q! l% u; d2 w- w. M2 u; E; G% N$ a8 S
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :
8 A+ K' N  J0 S% q$ }, ]这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
/ E2 e5 r6 x' l: W7 y3 d3 ~所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。
6 D0 M9 C+ g/ Y4 r这样的理解对不?

5 o* C- b/ \+ N理解完全正确。
( I- t4 w: t$ x" l7 v不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。
! _2 r$ B2 R2 ~4 q& E, r
. u; Q/ {$ a, H有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。9 d$ E& H5 n. H5 F  T! Z! v* N7 K( _
然后逐个nop测试,看有什么变化。
! m! s$ ~1 G/ {4 K2 w, _" g; o& I- G$ a, g9 Y9 H! s; C: J" M. x4 q
你可以参考一下这篇帖子. `! R) w% [/ c9 }- [# }
游戏汉化中的双字节问题处理原理
4 @2 X6 y' g6 F) n1 ]8 S5 ^https://www.chinaavg.com/read.php?tid=18709; u8 t( {9 ~& a. p5 J' [
作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

您需要登录后才可以回帖 登录 | 立即注册

本版积分规则

冒险解谜游戏中文网 ChinaAVG

官方微博官方微信号小黑屋 微信玩家群  

(C) ChinaAVG 2004 - 2019 All Right Reserved. Powered by Discuz! X3.2
辽ICP备11008827号 | 桂公网安备 45010702000051号

冒险,与你同在。 冒险解谜游戏中文网ChinaAVG诞生于2004年9月9日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

快速回复 返回顶部 返回列表