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

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

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

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

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

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

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

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt
, f! |3 b. P, O先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
* \" U& V& E. X* @; u5 \
# ]( }0 }0 i1 I2 S* A# W但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :. M# [' |( Z+ Y
我稍微改了一下程序,包里面有个input.txt和output.txt
  M: L9 e& t3 Z. k9 G' b先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节
" X' w7 H/ l* }8 A& W7 N0 G- N( r, X% T  V: w( W* ]$ L5 ~/ x
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?
/ B6 _* J7 o0 H
是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。5 x4 C2 N! Q4 Z& i) G& V
这就模拟了汉化了文本以后,中文字符被过滤的情况。5 }2 ^8 Z2 M& d( t* \3 B

6 t3 {% K& v& Q$ B5 _! i) V接下去就可以在汇编级用OD载入,开展研究了。
9 i: Z6 x8 |! ]3 v. s9 ?9 q想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。
8 R7 Y: c$ l2 i0 t8 ~: T请看红色的部分,这就是和0x80比较的部分。
2 O" }$ k, g! E! m把这2句NOP掉,然后保存修改后的文件为exe。 2 L/ E& k0 i0 W9 D" f* U4 J8 p
我们发现input.txt里面的所有内容都能被输出了。 5 P; R2 p2 p* c1 }7 o
附上修改后的exe. * k' n/ b( b  x4 O0 B
深绿,你可以把这个操作过程试一下,练习一下. + t0 q( ?, j, K7 E# U
2 {6 ]( }* A- }) L* Y
00401000  /$  55            push    ebp / g. y. B2 z, r
00401001  |.  89E5          mov    ebp, esp
' o. p5 o! Y; ^. J0 J2 J00401003  |.  83EC 18      sub    esp, 18
. i4 C  P$ p- ]. [00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0 & |. r% }3 k$ d1 x
0040100D  |.  83C4 F4      add    esp, -0C # K0 A5 g) t: y, o; y
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4]
, K( P1 {2 c- t* B( P00401013  |.  50            push    eax
  E4 }& W2 v- ]% m( V00401014  |.  FF35 08204000 push    dword ptr [402008] & d" F' X3 H" B4 f, x& \) C2 }
0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8]
& q6 s2 w& C+ D' |. o0040101D  |.  50            push    eax
) @( p+ W; `  c3 M+ l0040101E  |.  68 04204000  push    00402004 2 y+ I: p" X+ L$ N, U
00401023  |.  68 00204000  push    00402000
% s) u5 |9 f# g; A; X! g00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs>
$ m+ g0 l# ?6 ?4 ~3 R, S0040102D  |.  C9            leave
6 O7 y- ]5 O# e: K8 X3 F0 L- ~" h0040102E  \\.  C3            retn / O( q, L6 i. J: e6 {" u
0040102F      90            nop % e- V  q. Z# v* x9 c) X1 r
00401030  /$  55            push    ebp ) r5 T  U. l5 w/ R
00401031  |.  89E5          mov    ebp, esp
% [0 p9 e, Q: U5 i6 ^9 t& {00401033  |.  83EC 08      sub    esp, 8
, K7 F6 J  m& s6 W6 o% i00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C]
! I4 U2 ~( O  S7 K7 y0040103C  |.  85D2          test    edx, edx 9 C% ?8 L0 F  o& {; R/ W, {+ G% U1 G: x
0040103E  |.  74 7B        je      short 004010BB ; C' ?& i. s) E1 \% l/ P" V
00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> - s; Q( e* }; o' X' |0 q" g- ?
00401045  |.  8910          mov    dword ptr [eax], edx
9 A2 r9 J2 O0 [9 {2 a, X00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 0 T) M4 l8 s+ R8 @# J, X
0040104C  |.  85C0          test    eax, eax & b9 M8 e) O) ^- D& r- I
0040104E  |.  74 1E        je      short 0040106E
% v, w( U4 g7 W  f6 m00401050  |.  83C4 F8      add    esp, -8
/ M' @" S3 Z7 G' U( T' V6 c- L00401053  |.  FF35 0C204000 push    dword ptr [40200C]
" h' Y) [1 D' Z3 `8 s# f00401059  |.  83C4 F4      add    esp, -0C ( I1 d! A+ ]' W7 i- I/ Z; u6 C
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob
; v9 u( P% W5 t8 T1 x2 Y0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
3 j; D* e1 t( S% _: _00401062  |.  83C4 10      add    esp, 10
) h: f1 q3 Y5 M1 m; L: E00401065  |.  50            push    eax                              ; |handle - \0 `7 d$ m7 g/ W
00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
# u+ l/ k2 [' P9 Y0040106B  |.  83C4 10      add    esp, 10 7 I4 H1 c8 O5 F5 K7 n, q/ |
0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] + Y2 M  ]; k1 b0 c; W0 R
00401073  |.  83C0 20      add    eax, 20 . G4 @" L9 D$ U. ]% Y1 r/ V5 ?. j
00401076  |.  74 1E        je      short 00401096
, u( v) C7 @5 j; P00401078  |.  83C4 F8      add    esp, -8
; }0 T! W) Y+ [' F" i0040107B  |.  FF35 0C204000 push    dword ptr [40200C]
1 ^6 J" i  `3 m6 S# w8 }* B00401081  |.  83C4 F4      add    esp, -0C ; ^+ v, y9 {: e7 u. |$ t
00401084  |.  50            push    eax                              ; /pstream & h6 {6 k8 P4 J$ u( I
00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
8 D" F" g$ o+ A  F2 u- {0040108A  |.  83C4 10      add    esp, 10 $ k& P2 V* l) C4 u
0040108D  |.  50            push    eax                              ; |handle
2 s4 {% y! [: R2 Y0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
$ P+ N' s# g: \( W00401093  |.  83C4 10      add    esp, 10 # A9 t) |5 S; K9 [0 U
00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] % g6 D7 }' c- ]4 ]: s( [. {
0040109B  |.  83C0 40      add    eax, 40 $ z6 u9 o2 f7 ^2 K5 ]* ]  Y: G% S4 w6 H
0040109E  |.  74 1B        je      short 004010BB 9 v+ Y# I0 V) K1 G# H5 V
004010A0  |.  83C4 F8      add    esp, -8 & ^: v- b' Y( {. D7 M; I
004010A3  |.  FF35 0C204000 push    dword ptr [40200C]
1 {6 ?. ^8 b( w% y  r, O8 q004010A9  |.  83C4 F4      add    esp, -0C
4 O# a: b7 c. ?2 c' |$ ^, X7 l/ w: G004010AC  |.  50            push    eax                              ; /pstream
% s) V3 A+ I3 Y) I1 u( Q$ @5 w004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno - k# c0 j) h: I3 a3 L2 o- m$ f
004010B2  |.  83C4 10      add    esp, 10
( _  N; p" }- k; l0 s9 x$ F% j  T004010B5  |.  50            push    eax                              ; |handle
1 [) j, I) P) a  W7 g- S2 O004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
' V2 Z8 d. K6 {6 j, k004010BB  |>  C9            leave
6 V1 F- C8 x* Y0 A" w) C- W4 k004010BC  \\.  C3            retn
+ m$ \# k1 h) V+ T! ~004010BD      8D76 00      lea    esi, dword ptr [esi]
6 u! o3 B- L; p4 L$ K' T% L004010C0  /.  55            push    ebp
6 R8 F( N" J  a- `5 M004010C1  |.  89E5          mov    ebp, esp 4 t% F% s1 k  e3 }$ F0 @2 v
004010C3  |.  83EC 10      sub    esp, 10 " b- e1 s* {+ _% H' D* H
004010C6  |.  56            push    esi 8 j. u' t: l! W
004010C7  |.  53            push    ebx
, V7 i6 }9 D! b: V; U4 Y7 Y$ O8 {004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8]
8 \3 |) P- _0 Z$ j004010CB  |.  31DB          xor    ebx, ebx
/ C* o& e6 ^+ K, _4 E004010CD  |.  31F6          xor    esi, esi
' U* t: u1 ^6 I; q  J6 G004010CF  |.  8B00          mov    eax, dword ptr [eax]
9 ]0 ~$ n0 m# h9 a. q% V+ K004010D1  |.  8B00          mov    eax, dword ptr [eax]
6 ]* T3 A9 @# S# G' R5 |004010D3  |.  3D 910000C0  cmp    eax, C0000091 & k2 X  C, ~0 R7 G! D
004010D8  |.  77 16        ja      short 004010F0 " j2 _3 N/ R1 c+ t" d, y' u$ A
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D
/ d0 D! @- c6 [004010DF  |.  73 4F        jnb    short 00401130
7 P& n- Q* T& k  A& i004010E1  |.  3D 050000C0  cmp    eax, C0000005 5 u( ^3 P' P  h: h
004010E6  |.  74 18        je      short 00401100 * \- ~1 P) F4 @. ]* q6 {
004010E8  |.  E9 86000000  jmp    00401173
( l, y0 _* n$ L& }+ b004010ED  |  8D76 00      lea    esi, dword ptr [esi]
! V# r( S1 H) d2 R0 Q( V004010F0  |>  3D 930000C0  cmp    eax, C0000093
, v3 L2 p8 p3 d& S3 C! F" y004010F5  |.  74 39        je      short 00401130
" f4 [7 B5 ?! G) R6 ~. o004010F7  |.  3D 940000C0  cmp    eax, C0000094
* U  U/ o4 @. \3 z& J( K( h/ ]% Y004010FC  |.  74 37        je      short 00401135
4 s. M( i  J& A004010FE  |.  EB 73        jmp    short 00401173 3 n& x5 X1 x: W) s
00401100  |>  83C4 F8      add    esp, -8 3 Z' q9 `0 h; l- ^5 Q/ \4 b. @
00401103  |.  6A 00        push    0                                ; /func = NULL ) B" `. V# P. J3 b5 V0 @5 _. k
00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 7 X& h/ U8 u% |! }
00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal
9 F5 }4 {* m, g$ I( a3 _0040110C  |.  83C4 10      add    esp, 10 # ?4 E. Z! r5 }
0040110F  |.  83F8 01      cmp    eax, 1 / @% n2 i% Q4 i1 A$ r" y
00401112  |.  75 0E        jnz    short 00401122
. K/ K( t% z8 ^7 }' ]* W1 ]00401114  |.  83C4 F8      add    esp, -8
& ~, D3 ]' `5 F+ O( w00401117  |.  6A 01        push    1                                ; /func = 00000001 , h( w% e6 t9 U8 s, N3 C
00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
$ N  r5 p7 C! _% f& }3 U! u0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal / @8 |, ?- U; x3 e
00401120  |.  EB 4C        jmp    short 0040116E 5 I2 g% p9 \  Q3 x
00401122  |>  85C0          test    eax, eax 1 n4 p+ A0 m% m) w' b
00401124  |.  74 4D        je      short 00401173 # O) w1 {) u0 ~8 H
00401126  |.  83C4 F4      add    esp, -0C
8 A1 e, l7 u; J# ^00401129  |.  6A 0B        push    0B
" a+ a9 M  \8 d! y: G. p0040112B  |.  EB 3F        jmp    short 0040116C
( H3 B. W8 D, H+ l5 T% |% X) e0040112D  |  8D76 00      lea    esi, dword ptr [esi] % |0 O( a$ `4 g3 T1 y+ g. i: n
00401130  |>  BE 01000000  mov    esi, 1
9 y+ O9 G# _/ r; w00401135  |>  83C4 F8      add    esp, -8 6 X# l5 ^7 d& b2 j, T- p) q; [
00401138  |.  6A 00        push    0                                ; /func = NULL ; T- |) m1 d/ ]1 j, w2 ~
0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
9 N; H* A+ T6 K, f0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal
6 x' ^6 w+ e8 N- ^9 g00401141  |.  83C4 10      add    esp, 10 # R& F! j4 \# K7 M1 n
00401144  |.  83F8 01      cmp    eax, 1 4 r( r9 {( O. R' U& o1 I
00401147  |.  75 1A        jnz    short 00401163 ! J' l! y  Y! R( G
00401149  |.  83C4 F8      add    esp, -8
, }; A7 H" ^6 w1 ]. f. j) O( `0040114C  |.  6A 01        push    1                                ; /func = 00000001 ; j8 X9 p5 G9 V" y  Q
0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE
( z* O3 J- C  @( n5 Q, O7 [00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal
6 V, U! c, B  o+ {. H! I00401155  |.  83C4 10      add    esp, 10 ; w' `2 ]4 U$ M/ O6 w
00401158  |.  85F6          test    esi, esi 0 _9 S9 B7 w+ V
0040115A  |.  74 12        je      short 0040116E
3 P0 y; M' V+ I% n0 k7 L8 Y0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset 2 q9 k1 w& s4 x- L1 c( v$ Y- o3 r
00401161  |.  EB 0B        jmp    short 0040116E
* l  F) c. I' G1 z9 C& l00401163  |>  85C0          test    eax, eax
/ B( q4 K& g3 u6 f6 I00401165  |.  74 0C        je      short 00401173
4 L1 [) w0 _& Z5 s( K00401167  |.  83C4 F4      add    esp, -0C % H* B5 o" i( Q+ ]5 ?
0040116A  |.  6A 08        push    8 # ?- e( ]3 B8 L* J& y
0040116C  |>  FFD0          call    eax
$ N7 j# Y: Y' }! p$ w  k, r0040116E  |>  BB FFFFFFFF  mov    ebx, -1
' k5 x. E: U2 A4 Q00401173  |>  89D8          mov    eax, ebx
- |% M3 S) s2 V6 @# o0 g00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18]
+ |% J2 u' r1 B8 I. H00401178  |.  5B            pop    ebx
9 P$ I* J& V! E" J9 D00401179  |.  5E            pop    esi
0 k3 z0 Y& n. u5 z: F( |1 a0040117A  |.  C9            leave
( `/ ?) \" _, m6 h0040117B  \\.  C2 0400      retn    4
7 V) ]/ x! o4 f) w! l0 p0040117E      89F6          mov    esi, esi
; j( z7 H0 f+ J5 N9 [- y% X00401180  /$  55            push    ebp
6 J+ C2 C, l' S' T" L00401181  |.  89E5          mov    ebp, esp   X; h+ E( D* F9 a# C
00401183  |.  83EC 14      sub    esp, 14
5 t- C8 x) p0 |" _00401186  |.  53            push    ebx
- e8 l0 H. ^' T00401187  |.  83C4 F4      add    esp, -0C
5 h; m  D- a$ @& [& K+ U6 K0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0 + I- P, |! ?9 `; H9 R8 w6 j* z6 W
0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter
3 v8 z: }0 K/ [00401194  |.  83C4 FC      add    esp, -4
- x0 ~" I0 w! Z$ ~+ x& P  f00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset
& [+ f: ?  c) j/ A0040119C  |.  E8 5FFEFFFF  call    00401000
/ A* s6 C1 L# {7 c5 x4 S004011A1  |.  E8 8AFEFFFF  call    00401030 5 {# A8 p  q9 S
004011A6  |.  83C4 FC      add    esp, -4 % \. H) z% ~/ K, J: ]! C
004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ> . l9 N' \( Z* t& S+ J. q& i
004011AE  |.  FF30          push    dword ptr [eax] 4 F0 S4 G2 ^6 E7 ^& \
004011B0  |.  FF35 04204000 push    dword ptr [402004] % i; \+ M9 y5 T1 q" _8 p* M  K
004011B6  |.  FF35 00204000 push    dword ptr [402000] 9 ~0 C) W$ v/ T& U$ |5 g' {
004011BC  |.  E8 AB000000  call    0040126C
5 k+ N9 x; S- l% x5 n- m004011C1  |.  89C3          mov    ebx, eax
9 k4 f4 A+ v8 r. P& p004011C3  |.  83C4 20      add    esp, 20
/ k: t2 `1 c8 O' X004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit
% ~9 i$ @. J- |004011CB  |.  83C4 F4      add    esp, -0C
, m# s! u, n+ P9 Z4 ?004011CE  |.  53            push    ebx                              ; /ExitCode ) g# B- ]& P3 d/ |- D
004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess : \3 \4 z# }% M/ h' |! e0 U, J
004011D4 >/$  55            push    ebp 5 b7 |  G( A1 Z* K$ Z
004011D5  |.  89E5          mov    ebp, esp ; E: @8 f6 O- V/ K1 K& [
004011D7  |.  83EC 08      sub    esp, 8
9 h1 n. `% g. O, o. ]* C$ R: i004011DA  |.  83C4 F4      add    esp, -0C 9 }1 a' E; ?  n" |2 J
004011DD  |.  6A 01        push    1 : E1 p4 T7 X- m7 M: C* `
004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> 0 j# G+ H9 Z' D. G! _
004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> 9 W" X: R& k, X5 K4 h3 o& d) C
004011E6  |.  E8 95FFFFFF  call    00401180 ( _9 [% X% d. a7 b  M
004011EB  |.  31C0          xor    eax, eax
- ~7 |8 Q1 v# C$ r004011ED  |.  C9            leave " b6 Y; |" h4 p# F* \
004011EE  \\.  C3            retn 9 x8 S) v1 X( f& E0 A: B! ~1 a
004011EF      90            nop
) x8 D# }) f5 x/ D( j004011F0  /.  55            push    ebp ) d8 S9 l8 n8 s( L8 Q
004011F1  |.  89E5          mov    ebp, esp ( L, F) l# g1 ]
004011F3  |.  83EC 08      sub    esp, 8 / Q4 g6 }0 f- c( T' Z" }% s; v: Y: m2 k
004011F6  |.  83C4 F4      add    esp, -0C
& d! c6 Q3 F* k( t4 c9 I7 |+ f004011F9  |.  6A 02        push    2 " |" Z  b! f. r2 `! v6 E
004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a> 8 s$ {. t0 L2 f  O9 Q) ]
00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> # Z5 f3 L# J: N7 O0 s* o
00401202  |.  E8 79FFFFFF  call    00401180
5 l9 S# M$ m) b- p00401207  |.  C9            leave + u" M$ z* E# r0 Y% d. d/ d
00401208  \\.  C3            retn 1 C0 c- q: U* Z" q
00401209      00            db      00 9 O" J# t' A$ B5 c$ G/ L3 |, l% I
0040120A      00            db      00 6 J  ?3 p4 ~2 O8 V) M; a
0040120B      00            db      00 6 Q1 G6 a& Q4 d1 J/ n
0040120C      00            db      00
8 v4 \( l) G1 ?. F* p" W- ^" f0040120D      00            db      00 & H! P! {. u. ~2 u/ c
0040120E      00            db      00
& ?+ C0 ~0 ?3 j; B4 i7 |. x: N0040120F      00            db      00
: ]- k. Z& b8 ]0 w00401210      72            db      72                              ;  CHAR 'r' ( @0 Q1 p& S  f  A
00401211      00            db      00 ) c* Q  h' k; N, J3 i+ ~
00401212  .  69 6E 70 75 7>ascii  "input.txt",0 9 `& Q2 T" m2 e. Y0 m: [6 d
0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
5 e& o& @' C1 v( u0 Z9 k* {0040122C  .  2E 74 78 74 2>ascii  ".txt!",0 " t0 z. ^3 C7 C( `
00401232      77            db      77                              ;  CHAR 'w'
* e! W3 f1 x* C& c0 F6 y2 e00401233      00            db      00 4 {) W  x; v8 l8 {. i3 p
00401234  .  6F 75 74 70 7>ascii  "output.txt",0
& ^* {3 s: M7 F2 H$ d+ \0040123F  .  43 61 6E 27 7>ascii  "Can't Create out" ' b$ ^8 L& _. T9 N/ y4 {) l
0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0 6 ?! ]  b; y9 u  x( }0 ]: E
00401258  .  6F 6E 65 20 6>ascii  "one char outpute"
/ p( x( `4 c1 j( y% E00401268  .  64 0A 00      ascii  "d
( H  z& d. u  k9 p) ?9 X9 J",0 $ K9 K7 p% r$ v; L! W5 }7 e8 x8 M
0040126B      90            nop
/ |2 a; g3 f" `0040126C  /$  55            push    ebp
& t, G! k/ n6 ^* t1 z  g0040126D  |.  89E5          mov    ebp, esp   |5 V" P& P6 c1 N- @
0040126F  |.  83EC 18      sub    esp, 18 8 V$ U3 S  \, Z# V4 Z% J3 H
00401272  |.  E8 39010000  call    004013B0
7 D* m; ~8 a! f00401277  |.  83C4 F8      add    esp, -8 6 \* e+ j8 T' I5 O
0040127A  |.  68 10124000  push    00401210                        ; /mode = "r"
3 q( g& p* I* ^  y0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt"
+ L' `5 i. h- R0 [; c" C, |  `9 b00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen 7 I3 M4 _) T. i+ m0 y) e% d
00401289  |.  83C4 10      add    esp, 10
: _5 V" U  }' f4 n* Q: n0040128C  |.  89C0          mov    eax, eax
+ a8 s8 h9 M9 [4 y  X- g% |; P+ H0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax
7 l# ~2 k' {$ f+ E7 j00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0
1 g+ f# F* ?, J! h- a. J/ W1 [00401295  |.  75 10        jnz    short 004012A7
. K7 r1 i/ W7 ^  p00401297  |.  83C4 F4      add    esp, -0C
% j- {6 ?- y+ _, U0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!" 3 ?: _  m& E4 l& L7 `, g6 n/ B/ |
0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf . p+ f/ r7 [5 g5 P0 `9 z
004012A4  |.  83C4 10      add    esp, 10 5 D9 l" i. u; A- |& q
004012A7  |>  83C4 F8      add    esp, -8
! K& `! F+ t5 L; V004012AA  |.  68 32124000  push    00401232                        ; /mode = "w"
0 G3 B7 m8 q7 S, q$ h* C004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt"
$ u) t- {! L# g9 s004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen & [& X6 `* v  z& P3 m, Q* F# M8 ^
004012B9  |.  83C4 10      add    esp, 10 & L# V9 I9 m! ^3 _' a% V2 z
004012BC  |.  89C0          mov    eax, eax
, S( I# F0 q6 p0 y004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
# a) A+ V. w% ?! u/ i. `004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0
# J3 ?0 p: K, b6 A004012C5  |.  75 10        jnz    short 004012D7
  j: }( @* L" F' ]  ^004012C7  |.  83C4 F4      add    esp, -0C
1 e: z( b! J0 |6 M% h004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!" 1 U6 i+ W; @, t
004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf 4 w2 U# z4 d1 O( M1 S
004012D4  |.  83C4 10      add    esp, 10 $ H! P, B9 j0 p5 `- `
004012D7  |>  83C4 F4      /add    esp, -0C * _9 P( k0 \) f, |, _
004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4]
' r4 s9 {  _+ f- F004012DD  |.  50            |push    eax                            ; /stream ( `& b) N: r% W6 [1 t& Q0 D4 S- Y
004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc 4 N' u' G: L( x+ ^2 l: h( w
004012E3  |.  83C4 10      |add    esp, 10 / {+ R6 C/ p6 `5 u8 _, Q
004012E6  |.  89C0          |mov    eax, eax
7 k7 ^3 I0 {7 L7 p  d4 |004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax : h) L* y  s" ~2 s* k# ]. W8 Y
004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
8 P8 M+ s. N) H& ~7 w004012F2  |.  7F 23        |jg      short 00401317

. B' {3 I$ @& @% }$ d9 N004012F4  |.  83C4 F8      |add    esp, -8
1 B0 Z  h6 E/ q. h1 g% H$ W, o0 G004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8]
. [; z+ N( w+ V, n8 V; B$ ~004012FA  |.  50            |push    eax                            ; /stream
; D( P5 \8 a: ?5 J( h004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; | 2 K3 W. g0 N  c' o( ?) F* d" Q
004012FE  |.  50            |push    eax                            ; |c $ ~; U  n5 g* }6 N3 ^
004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc 1 I* `, }# s. |2 D9 W3 X
00401304  |.  83C4 10      |add    esp, 10
2 L0 o/ ~) E, _0 y! u. _. F4 ~- W, p00401307  |.  83C4 F4      |add    esp, -0C ) n' ?: v; m* ?; m3 B8 o
0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,"" 7 O( T; L; S, }8 y. H- u0 Q
0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf
; h0 {/ }6 k' ?00401314  |.  83C4 10      |add    esp, 10 % z( E" c* W. y+ s. W' j
00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1
: x. h! i9 T+ A8 \% X( f* v5 p0040131B  |.  75 03        |jnz    short 00401320 , S; s0 L1 u5 Y" h  Y. V
0040131D  |.  EB 03        |jmp    short 00401322
; v, C! _# ~* Z. Z) p1 h0040131F  |  90            |nop ' s' s" m) ]+ Q; f% o/ L+ q
00401320  |>^ EB B5        \\jmp    short 004012D7
) Z+ M% L0 \/ X2 E00401322  |>  C9            leave 9 T  ]8 |: a& V$ H
00401323  \\.  C3            retn 2 P; l  i3 \' K. }4 S- F' F5 R
00401324      00            db      00 - Y, c: ]8 G# a* j* H; r; r  D
00401325      00            db      00
, T7 m, j/ n- t; }00401326      00            db      00
  C. A% w2 K  k00401327      00            db      00
2 M  v' e, V9 }" _$ W) B00401328      00            db      00
6 U+ Q8 h) ]. @  s$ A7 |00401329      00            db      00
7 C. J% o8 Y: V, I  `5 d0040132A      00            db      00 , \0 u  S5 H3 v& G; @9 ?+ [
0040132B      00            db      00 ) i2 x1 d: E( N7 Q  j
0040132C      00            db      00 / }* L- O  u. a0 w
0040132D      00            db      00
# q% s, f$ _3 {  ~; v' V1 j: T0040132E      00            db      00
5 U& W5 N2 ~. B0040132F      00            db      00 . x# _3 H2 O: W5 a  g
00401330  /.  55            push    ebp + {. K2 A  ]/ t  O9 W% ~' J
00401331  |.  89E5          mov    ebp, esp * M; r# m9 x* O
00401333  |.  83EC 08      sub    esp, 8
/ F6 d% L" u  j7 b* h00401336  |.  A1 10204000  mov    eax, dword ptr [402010] # T3 p% Z8 F/ @: U5 H
0040133B  |.  8338 00      cmp    dword ptr [eax], 0
4 q- @  D8 {8 d" X& N0040133E  |.  74 1D        je      short 0040135D $ W' n% L9 k. m
00401340  |>  A1 10204000  /mov    eax, dword ptr [402010] ' {/ x& q3 U9 q1 J
00401345  |.  8B00          |mov    eax, dword ptr [eax]
9 b4 d! o( k6 D/ l9 h6 h, [00401347  |.  FFD0          |call    eax 1 _( u& s$ w% K! L. u$ Y5 \! h
00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] * g. g: `' Y% o: h
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4]
* W' V( g/ ~( R00401351  |.  8915 10204000 |mov    dword ptr [402010], edx " c) B0 g0 }  O' H$ Q
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0
" i$ m# Y) L6 i" w5 C0040135B  |.^ 75 E3        \\jnz    short 00401340 : X8 L, ^" B! U$ f
0040135D  |>  C9            leave 2 |  d) R  P; S. `7 _% {
0040135E  \\.  C3            retn + E; `1 {- c- g' M* V* E
0040135F      90            nop
( a0 l1 ^3 S% z3 Y+ y, c00401360  /$  55            push    ebp / P8 R& o/ x4 W) h$ w; }
00401361  |.  89E5          mov    ebp, esp 2 O3 h' S" z* X/ p  D5 c
00401363  |.  83EC 14      sub    esp, 14 ' n+ N7 S8 R, g1 s' F: P
00401366  |.  53            push    ebx
0 P" d8 I/ @7 o* R& R' i5 M00401367  |.  A1 58144000  mov    eax, dword ptr [401458]
4 v! P- C2 O  g# T' j. J0040136C  |.  83F8 FF      cmp    eax, -1
" D% O2 i  V7 o4 l. J+ Q' ~7 N0040136F  |.  75 19        jnz    short 0040138A 5 \5 Y6 Q# W5 g
00401371  |.  31C0          xor    eax, eax
# V4 h+ s; a! X1 |8 n00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0 * x$ P: `3 y+ N5 C: l9 k
0040137A  |.  74 0E        je      short 0040138A
9 h( _3 J" ]& v* R% h1 b, B0040137C  |.  BA 5C144000  mov    edx, 0040145C 8 ]9 O9 e% p  Y9 d3 G9 a
00401381  |>  83C2 04      /add    edx, 4 0 a& C0 v6 d& E# \5 r5 K1 r
00401384  |.  40            |inc    eax
9 i% l. H" O3 ~8 b+ T/ d00401385  |.  833A 00      |cmp    dword ptr [edx], 0 ( D, ?& L; G+ w+ l. a4 H
00401388  |.^ 75 F7        \\jnz    short 00401381 , v4 R/ {1 Z/ ~% H
0040138A  |>  89C3          mov    ebx, eax 5 \! l$ d, G) l$ o( I0 W) J+ c
0040138C  |.  85DB          test    ebx, ebx
9 L! e, R" Y* c7 |0040138E  |.  74 0C        je      short 0040139C
1 H( a2 G9 _8 p8 q6 g) i0 Z00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
( z+ R( ]* ~/ V$ g* `; i0 W00401397  |.  FFD0          |call    eax " ?+ X1 ^& ]6 h' w" G* k2 x9 N& F
00401399  |.  4B            |dec    ebx 9 @# p( p* H. w& o8 E: E& k
0040139A  |.^ 75 F4        \\jnz    short 00401390
9 E7 k) J/ Z; Z2 K2 z, m/ ^0040139C  |>  83C4 F4      add    esp, -0C
6 d( {4 Y7 W. f9 l4 P/ K5 j0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330
* R2 b: n  Z1 D( T( i004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
- C8 K# t, S2 W& ~004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18] 7 ^+ R# v# W: P( V) Y
004013AC  |.  C9            leave
2 |* T8 J/ T: h  ?+ q004013AD  \\.  C3            retn ) y5 C& B/ {# w1 n2 W
004013AE      89F6          mov    esi, esi
* b- C4 Z' w  d0 k. E$ j004013B0  /$  55            push    ebp
0 w& M: q% R6 L) N# r; L# B8 Q0 F004013B1  |.  89E5          mov    ebp, esp
& W. c! U1 Y# j, n  f004013B3  |.  83EC 08      sub    esp, 8
: C2 R3 y  G6 a  J% E  r004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0
& k: e9 ]; B% s! h004013BD  |.  75 0F        jnz    short 004013CE
3 S( p& Q  f  k% w+ V4 o004013BF  |.  C705 14204000>mov    dword ptr [402014], 1 ( k0 ~1 x# w+ \; c! c
004013C9  |.  E8 92FFFFFF  call    00401360 ! D% i, {7 ], n1 E) h, [* ?* h; g
004013CE  |>  C9            leave + M! j  T- {  ~7 m  x3 k) P; H
004013CF  \\.  C3            retn
# o: w" A5 p' B; o004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode
5 r4 T/ k+ \1 t9 @5 z$ e004013D6      90            nop $ n3 k/ u2 v; w- G; E. o
004013D7      90            nop
' \& F8 M4 ]4 R/ F$ T" D( S% w4 c004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob
& Y" X9 ?0 D" T" d. a9 `004013DE      90            nop
9 f& a4 x; v" m; m004013DF      90            nop ; w: O# G* N! @3 |! F' s0 x4 q
004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type 6 p# T: Q" ^! f- M& P. V
004013E6      90            nop
% Y( W. C4 W! O% A004013E7      90            nop ! D$ ^0 D/ M" s: r: a
004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit % g8 s5 t% L0 C* m2 L6 R0 p7 P$ ?
004013EE      90            nop
0 n, b* s. s/ o7 _004013EF      90            nop . t" C4 ~0 F: p8 v
004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ
: B4 u  R4 d0 T& o# ?! R004013F6      90            nop , A& B9 P! P8 {; b
004013F7      90            nop
. p$ b3 p; X, N' S0 ]% |004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset
% ~0 q0 b8 U' d/ X004013FE      90            nop " \# Q( W! ~8 c$ I% h, r
004013FF      90            nop 9 I# G1 A) n0 L
00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal : m3 m' h; t9 a% y' H' q
00401406      90            nop
! z2 a" f2 @; n. u00401407      90            nop
4 P+ T0 `) r0 C6 O00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno
! K" C% D, k- k8 ^0040140E      90            nop
/ F9 L! f$ X. A4 V$ m) m+ b0040140F      90            nop
4 D, I% H0 s* E) @/ R9 l00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode
- g  U% j' }% Y00401416      90            nop
7 L" i5 ^- C6 z2 L$ O4 |8 h00401417      90            nop
3 e* o( ^1 ~: f/ u9 G3 F8 _00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs
4 r) M" @: n6 H0 n& p0040141E      90            nop ( l  g7 @5 r' y) r- {" f
0040141F      90            nop
7 G' X8 w2 T) @  I7 b00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc # M; k! k2 T2 L6 p6 D; J, h0 g
00401426      90            nop & T* Y$ Y  h. G/ W5 ?$ z& y0 o
00401427      90            nop : d5 |" H* k9 r$ o3 n6 Y: a$ i
00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc
) X9 p* e0 `4 r0 f1 u0040142E      90            nop % _5 J1 n. g4 ]+ t: q
0040142F      90            nop 4 v* {/ h3 G) |* a8 o7 i
00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
- @  k0 B7 @" T, b- o0 ^+ O00401436      90            nop ! Q' g+ l! W- R5 X, @0 C; f1 b  \, U
00401437      90            nop
1 }; g& C# i3 k( Y00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen
" x; r" l+ V5 e7 I, W2 Q  h0040143E      90            nop
& d- o9 r: V: J2 x0 }0040143F      90            nop
2 z! ~2 ?- q2 i$ [! D! r  `00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit
% B) u7 o" S  T% v1 |$ U3 A00401446      90            nop
4 k, v9 N$ d9 K0 [# g00401447      90            nop
4 M5 f( c9 q2 c' e00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter " J, D: t4 C4 m* w! R) l
0040144E      90            nop , H3 `. z, `6 f# l  X$ U  d* }3 `
0040144F      90            nop
/ l4 n3 h  I& j8 i( Z# t( X00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess 1 u" A" i; l9 B- t3 L" y% H
00401456      90            nop 6 x8 g' L( b/ i" A' p
00401457      90            nop   `+ T" ]9 T7 S1 h/ P6 v0 J
00401458  .  FFFFFFFF      dd      FFFFFFFF & G0 J7 o1 G  ?* S3 c1 L! D, B: m
0040145C  .  00000000      dd      00000000
7 h9 O, s9 p& R5 m) j00401460      FF            db      FF 9 v3 J0 t8 ^  E$ S! \+ D
00401461      FF            db      FF
7 E2 p) W8 A& u' W7 G5 i00401462      FF            db      FF + r3 L6 l: I4 J1 r& O
00401463      FF            db      FF   ~! ^" ?  h! S! N5 K
00401464      00            db      00 ( h9 M. ~8 }) l2 H
00401465      00            db      00
* f' u7 o) ^7 L* i5 \00401466      00            db      00 0 q, h2 u- I1 E7 u& R7 W( r
00401467      00            db      00

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。
$ A6 K# D. L# K, H) G深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
' [( ~0 F$ V! W! G( m2 U比如不用fgetc这个标准c函数,而用mfc的类似函数来编。
8 H4 x0 \5 r- ~; S让我们看看生成的汇编代码有什么区别。+ Q3 ~0 P2 f3 Q# {
你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
" I, G! B% }1 ^2 \( m# z! h+ H- ?
9 Q% w' D+ m9 j$ j( I说说我对单字节内核的看法:/ W' q, O8 O$ V, B. I: Y' x/ z
3 f/ P& H5 T& F
我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,2 P. S5 q8 ]# G- i9 \
然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。: Z: S5 L9 @* a% H
6 o1 Z, \8 @0 r" p( n" O# E
举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核
% u/ K+ l! {6 g就很有可能无法显示中文,尽管那些中文数据都存在。! E# r2 ]6 I$ \) Q: t

/ Q: Q7 ~* y' c/ A6 }8 y2 s$ ~- O所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。' j/ A5 e& `% O. n8 q

. ]9 v+ T0 i+ z4 e6 ~因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。  m( L  |! \9 v( u1 V  T

" O8 C1 t! d- E: |- V中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。6 q7 d( D. |8 w5 N/ t0 O
& C4 v9 U& h7 H) z
那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字% Q2 ~+ T; I. g* r
# t" j3 [9 f8 \' }% V
那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。
- ~9 l3 o! ^+ B  Z8 e2 w# o
' u9 v5 k0 k% X# L2 \9 K% q就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。( N5 S/ x7 r# x& d% t% M: ?
1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符
4 d) j6 l  W$ k# b2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了6 p, V2 }; k1 C/ `' v
) k3 X5 }% v1 r3 k/ C; c- q3 Q
真正的游戏应该会用这2种方式中的一种来处理。' l( }) W  l5 e) H+ U2 Y- L
这个单字节内核模拟程序其实只模拟了2的情况。1 L# P; b$ m; ]
要模拟1的话就要制作一个图形程序了。
4 }9 O" q, [; P/ Z. ?# q9 g, j) ~& c- f8 ]$ y
这个单字节内核模拟程序本身的意义其实不大。' Y8 w8 G7 Q' d% I! y: M
其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。' |* @- j& K' F" @1 l* \
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。+ j) q; h* H# S3 e0 g
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :
% y. l, x: t( N* X+ [1 C' M- C这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
/ T- y; D" X/ F1 g* _所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。3 S; e- s" `( T2 g' X
这样的理解对不?

5 C# y4 |; Y+ M7 y! c理解完全正确。
* X7 }8 n0 x+ C2 K不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。
% K& w. M! g, R7 G8 e2 U; s
7 f1 Y5 ]: z4 L0 R& M, D1 Y有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。  n' e6 j+ i0 t& w0 w
然后逐个nop测试,看有什么变化。
& p# k2 {8 d+ c1 u5 A! O# X9 T. v. Y3 g9 k
你可以参考一下这篇帖子2 s2 {* j  B6 c
游戏汉化中的双字节问题处理原理/ ]! ]8 z5 s" O, Q8 S* D
https://www.chinaavg.com/read.php?tid=18709
. \, F3 x4 |: _; @  X/ Z作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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