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

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

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

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

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

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

深绿,你好,有时间的话请帮忙制作一个单字节内核模拟程序。
$ X; g  y4 w& ~; ~
6 _# P+ ?9 _& i, D5 ]5 v题目吓人,其实很简单。
! ~, G7 o8 d- O! O7 U" s在程序里面设定一个固定中文字符串。
" B3 K- v0 |9 p" O然后按字节读取。小于0x80的字节输出到out.txt文件即可。
8 Z8 }! K* ?4 ?6 ^  L, p$ o$ r
1 k: ]% l5 s  X3 |: X4 D这个程序模拟了单字节游戏后输出乱码的情况。
& @8 b7 e7 b& J! V0 ^接下去我们可以利用它进行汇编级研究。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt
! g( e% J, J& |7 W, X先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节4 p& s# [5 ^9 n! s
6 ~: M  |; K5 @4 Q: P
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :
3 v  b1 t- `1 p& v# b2 ~我稍微改了一下程序,包里面有个input.txt和output.txt
" r; g9 m# i6 I5 g8 y7 {. V先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节8 u) k5 n! j: B! j8 n. _
" Y; f1 j5 h; V3 }$ M# |
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

$ k; I" t) }6 w% y是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。- f, \" H/ S* P# L* k5 p! O( z
这就模拟了汉化了文本以后,中文字符被过滤的情况。, r1 L- L. d1 a, W( G# l
8 A& u) N' W  J9 m1 d% ]
接下去就可以在汇编级用OD载入,开展研究了。  O3 m+ [; x7 U
想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。
8 [% z; G( m, ?; U* R请看红色的部分,这就是和0x80比较的部分。 . ^; v( B- Q  z7 _1 g) r& z
把这2句NOP掉,然后保存修改后的文件为exe。 ' v: p+ F. ^6 n* X1 [
我们发现input.txt里面的所有内容都能被输出了。 : |2 S  a) X1 F0 c9 W; O; i* l% J
附上修改后的exe. . u( ^+ f' P+ I
深绿,你可以把这个操作过程试一下,练习一下. # |% d* h7 z3 g; ^8 a

" z+ N* n. E# }  I! @9 B00401000  /$  55            push    ebp
* ^$ b9 B9 M1 ^( ]00401001  |.  89E5          mov    ebp, esp 4 M9 f" G- B, n+ Y+ B0 }/ k
00401003  |.  83EC 18      sub    esp, 18 - W0 Y, W" G6 Q" H. C
00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0 9 M; H: G  `$ m6 u9 |
0040100D  |.  83C4 F4      add    esp, -0C
4 S4 J4 h5 i' ^: Q# C00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4] - [- J- A7 ]$ o! j8 e+ A, i9 I
00401013  |.  50            push    eax ! H+ J& {3 |  z
00401014  |.  FF35 08204000 push    dword ptr [402008] 9 Y, S. b- @+ I* _$ h5 _
0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] ) P! Y! l- Y: {3 `7 x+ g
0040101D  |.  50            push    eax ' q* J; u& b) D
0040101E  |.  68 04204000  push    00402004
8 {7 Z% v( X& p0 p3 p' t, v00401023  |.  68 00204000  push    00402000
1 {1 [) f1 B9 T# R& y8 c* \4 Q00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs> : @* H0 o7 U% q+ U+ U( _
0040102D  |.  C9            leave 4 Y* I9 o3 x: E( }4 v% O0 U
0040102E  \\.  C3            retn 7 w8 U$ c2 w% D2 A4 l& t
0040102F      90            nop 7 {; s5 v2 y9 f! y* M" I- ]/ L: p
00401030  /$  55            push    ebp 3 U% y% N& `2 E
00401031  |.  89E5          mov    ebp, esp : M& a0 _' P! V2 I
00401033  |.  83EC 08      sub    esp, 8 ' P' l" a# f. R2 p5 R
00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C]
; B' t0 x' `! d: Q+ T0040103C  |.  85D2          test    edx, edx
8 _" o7 A4 F3 Q/ M. t' G0040103E  |.  74 7B        je      short 004010BB ) V) S6 p- }& O- U" S
00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> 6 m# y1 e' h( |5 O  W3 `
00401045  |.  8910          mov    dword ptr [eax], edx $ K2 ?7 W8 w9 j8 Y
00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
4 b! l8 `  _# A9 Z4 B- B( ^0040104C  |.  85C0          test    eax, eax
8 }" K5 @" `% d, b; g0040104E  |.  74 1E        je      short 0040106E
0 m6 c4 h5 n( C7 I1 i00401050  |.  83C4 F8      add    esp, -8 8 r! i4 l5 l2 f' ]7 v. R7 j, ?  A
00401053  |.  FF35 0C204000 push    dword ptr [40200C] ) q# z0 P5 ]; Q
00401059  |.  83C4 F4      add    esp, -0C ' H5 f* ~/ x4 E6 a# H, J) ^& V
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob
$ |+ e; r% q3 ?2 S9 a& C6 U, x9 u! b4 o0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno 4 a9 P' a5 E# {+ ]) |2 a
00401062  |.  83C4 10      add    esp, 10
8 ~* h2 ~  E5 R' p/ l7 h1 W6 [00401065  |.  50            push    eax                              ; |handle
" w: _8 Q' D, h9 e; K4 ~6 |9 E00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode . d. q/ T6 V- O* H* w
0040106B  |.  83C4 10      add    esp, 10 ) R: \. n% S. S0 p- U6 o
0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] 8 N9 L  l4 O  Q( u! z) d
00401073  |.  83C0 20      add    eax, 20 0 o) P- H) d. \1 @- y) T
00401076  |.  74 1E        je      short 00401096 : X& P4 D2 \8 X  F1 u
00401078  |.  83C4 F8      add    esp, -8 ! }" [" f" S' a  J$ C1 U3 W6 ]+ m
0040107B  |.  FF35 0C204000 push    dword ptr [40200C] 9 e" S% `  v0 h  W$ H
00401081  |.  83C4 F4      add    esp, -0C
  f7 F' ]. W2 o% g3 o8 `$ `00401084  |.  50            push    eax                              ; /pstream & b1 I! C+ c4 }9 X
00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
% u1 m( y* d5 R8 w0040108A  |.  83C4 10      add    esp, 10 $ F3 H2 c$ j4 z$ H/ i2 [
0040108D  |.  50            push    eax                              ; |handle ; i0 N% M6 a2 w3 Z
0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode & [1 M) c( @5 S/ ^9 ~
00401093  |.  83C4 10      add    esp, 10
" n( s, c/ U6 _, H6 {. ?  C00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
; y+ Z# q0 N/ n9 h# \* B0040109B  |.  83C0 40      add    eax, 40 , v) |5 {3 p* o( ]. `3 z
0040109E  |.  74 1B        je      short 004010BB
. ?+ \7 h7 S# B8 {# X3 U004010A0  |.  83C4 F8      add    esp, -8
. l' L- c1 x$ {) e* y* E5 P) }/ X004010A3  |.  FF35 0C204000 push    dword ptr [40200C] ; k9 t% l4 |6 q
004010A9  |.  83C4 F4      add    esp, -0C
! Z% Q& D$ B# ~4 U004010AC  |.  50            push    eax                              ; /pstream
6 ^5 ^% E# p5 [/ a) e4 \004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
9 U9 S: r7 ?3 U7 S004010B2  |.  83C4 10      add    esp, 10 6 v& b% ?; q) z7 Q
004010B5  |.  50            push    eax                              ; |handle + `' ?$ q: j# l" n0 @( Q9 O
004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
; ?, s0 l6 d2 f- o004010BB  |>  C9            leave
& i" i, y  T) y7 F+ w004010BC  \\.  C3            retn 8 I1 P( S. ]/ y; H
004010BD      8D76 00      lea    esi, dword ptr [esi]
. W' @9 G1 X" y/ r004010C0  /.  55            push    ebp " {2 G1 T. u/ f4 K
004010C1  |.  89E5          mov    ebp, esp % u6 @9 |, {7 J# ~/ t: j
004010C3  |.  83EC 10      sub    esp, 10
1 g8 |& `: P9 N1 w004010C6  |.  56            push    esi * W" a' k9 C. b' f
004010C7  |.  53            push    ebx
% @' a. F# y  l; U004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8] / ]; s! z1 g3 L8 e1 X, d1 I. l
004010CB  |.  31DB          xor    ebx, ebx
7 T  c2 J9 u5 R8 o1 e004010CD  |.  31F6          xor    esi, esi + d$ H# ^( _9 `+ t6 P7 v6 P
004010CF  |.  8B00          mov    eax, dword ptr [eax] 0 y% z3 z$ }3 E: e1 x: d+ A
004010D1  |.  8B00          mov    eax, dword ptr [eax] $ C6 U$ [2 e) y) x, I
004010D3  |.  3D 910000C0  cmp    eax, C0000091 6 j# W0 ?" }( e* N, F! }5 s
004010D8  |.  77 16        ja      short 004010F0 ( W& t6 z$ N8 v4 y/ i
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D 4 i* f" |* |& \+ f3 {
004010DF  |.  73 4F        jnb    short 00401130 ) l6 W# r: K$ i0 V; V. d
004010E1  |.  3D 050000C0  cmp    eax, C0000005 ! d0 @; `- _1 d& _: y8 D/ D0 {
004010E6  |.  74 18        je      short 00401100
8 N7 [' S1 r$ j5 ^+ M004010E8  |.  E9 86000000  jmp    00401173 " y0 g% |( s, ]0 k3 C2 s
004010ED  |  8D76 00      lea    esi, dword ptr [esi]
5 I/ z% V% ~  i) f004010F0  |>  3D 930000C0  cmp    eax, C0000093
% z) Q7 W1 D, U9 [2 p004010F5  |.  74 39        je      short 00401130   u- M6 w0 `5 q. h, i9 V
004010F7  |.  3D 940000C0  cmp    eax, C0000094 6 ~" S2 e$ r6 D! `8 S) P7 s0 p2 C( o. s
004010FC  |.  74 37        je      short 00401135 / W# ~0 h5 y8 ?. t5 f0 T" a; _7 d
004010FE  |.  EB 73        jmp    short 00401173 2 }* n6 d5 x9 S( D
00401100  |>  83C4 F8      add    esp, -8
; N3 s" K0 u7 ]0 N: p00401103  |.  6A 00        push    0                                ; /func = NULL
% m" ?" ^" k& ]# a00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV . [2 A+ D% x) f$ @$ A5 C; I3 y8 j& s
00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal 5 _0 S# W4 {- A5 [6 [0 }) L) @
0040110C  |.  83C4 10      add    esp, 10 8 O& o- _6 F. ^! x5 j2 e9 @7 e( B" X
0040110F  |.  83F8 01      cmp    eax, 1
7 B3 d/ R0 B' K% Y" v3 h* w8 Q00401112  |.  75 0E        jnz    short 00401122
1 l& Z- Y8 `& L, A+ q$ g0 V7 q00401114  |.  83C4 F8      add    esp, -8
3 S+ H; c; e& h( ?* u4 q8 j1 R00401117  |.  6A 01        push    1                                ; /func = 00000001
) M6 w& C5 o, ?2 e; j00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 9 y  f4 A: W" G  w* _6 a
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal & \. ]' y# N% J$ @8 m; t
00401120  |.  EB 4C        jmp    short 0040116E
3 c7 F# b5 w- {) ]00401122  |>  85C0          test    eax, eax $ p$ t/ M  C. D& F4 I, A: z
00401124  |.  74 4D        je      short 00401173
2 w; G- W0 P! H; D2 o00401126  |.  83C4 F4      add    esp, -0C 1 Y, E4 ]- q7 ~* {( e/ M8 [
00401129  |.  6A 0B        push    0B ; F& [" D9 v8 t! D/ E! o+ w3 b7 ?
0040112B  |.  EB 3F        jmp    short 0040116C
) Z2 m/ v3 m2 d- L( d( u8 v  l0040112D  |  8D76 00      lea    esi, dword ptr [esi]
2 W+ i% U3 D8 l, ]6 ~9 ^0 Y+ F3 D00401130  |>  BE 01000000  mov    esi, 1
+ i0 j0 w. ~8 q) R  ?# E00401135  |>  83C4 F8      add    esp, -8
# S; |; ~% p! w2 P8 f" c1 g$ U9 K00401138  |.  6A 00        push    0                                ; /func = NULL
' V! ~# H+ Z& `) P/ K" q4 u0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE # H8 w2 h4 e0 K
0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal 8 @) t3 ~; f$ n8 l* R( }
00401141  |.  83C4 10      add    esp, 10
4 V( Q3 @8 w1 U% ^0 R( j00401144  |.  83F8 01      cmp    eax, 1 2 Q  f# Y; c: Z  i/ \* y
00401147  |.  75 1A        jnz    short 00401163 " p6 c2 {9 p2 W8 a8 i, q3 L
00401149  |.  83C4 F8      add    esp, -8
: q3 a3 }' h# j0040114C  |.  6A 01        push    1                                ; /func = 00000001
6 q; `" S) ?# {& B/ G0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE
4 r$ R% ^: u% o6 c6 F( M. w9 B1 S00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal
% P  `# V: k' `' r! x( z00401155  |.  83C4 10      add    esp, 10
( l. o) ~1 N+ j00401158  |.  85F6          test    esi, esi
( z' E4 k- B6 l0040115A  |.  74 12        je      short 0040116E . s$ h' A% R# E0 _5 p
0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset 8 S" Z( A) T4 D. r0 g: E
00401161  |.  EB 0B        jmp    short 0040116E " u/ {1 }$ e/ E* K6 P
00401163  |>  85C0          test    eax, eax
5 N' r+ ^+ r: d" C00401165  |.  74 0C        je      short 00401173 # m) O! Q3 f6 d8 C! d2 e# w
00401167  |.  83C4 F4      add    esp, -0C
  C7 e% ~# ?" I+ Q& S* Y( F* ?0040116A  |.  6A 08        push    8
2 ?& D& T" Z8 }0040116C  |>  FFD0          call    eax 1 e/ C& b# C& i! H0 J0 Y) ^
0040116E  |>  BB FFFFFFFF  mov    ebx, -1 6 T2 y% l5 j3 A& P" w5 @) q. [3 y
00401173  |>  89D8          mov    eax, ebx
6 m3 _$ y# w1 u" i2 B) V* q00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18]
: p* A5 j, T  a# w6 A00401178  |.  5B            pop    ebx
* U+ V* m: u, h00401179  |.  5E            pop    esi 1 R$ \4 h  z# l7 B* p( {
0040117A  |.  C9            leave ; j) T2 R+ e0 R0 s; X4 t* O7 Q
0040117B  \\.  C2 0400      retn    4 # j% U# ]$ z4 |/ m; j; p
0040117E      89F6          mov    esi, esi ' I1 L% |( u0 G- P/ R  Y
00401180  /$  55            push    ebp 1 D. B& z8 s+ e7 \8 _: e
00401181  |.  89E5          mov    ebp, esp
. G4 T1 c# ^7 ~1 M$ h1 x; e- t00401183  |.  83EC 14      sub    esp, 14
0 _, B0 C6 K, N$ b5 O  P00401186  |.  53            push    ebx
  U. ^7 Y4 J4 }. Z& C3 B3 C. q00401187  |.  83C4 F4      add    esp, -0C
3 ~' T; N2 z. `0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0 * z( p6 V5 z5 N$ `
0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter
, v9 H3 t: [1 O+ F% j00401194  |.  83C4 FC      add    esp, -4
! T2 E: v0 b& g* X% M# @% ~! k00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset 7 l. ~. U& i" d% o
0040119C  |.  E8 5FFEFFFF  call    00401000
9 B9 j$ U, k9 A; V004011A1  |.  E8 8AFEFFFF  call    00401030 8 S3 Y7 e$ P. Z/ i0 e! f9 b# G
004011A6  |.  83C4 FC      add    esp, -4
# ^# x  H- s  a& k! U' m: n004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ> , G5 a4 g! ~3 d$ \& h
004011AE  |.  FF30          push    dword ptr [eax] . a: |5 c, c# Y* w& z
004011B0  |.  FF35 04204000 push    dword ptr [402004] " U7 ^" [- i+ b' T
004011B6  |.  FF35 00204000 push    dword ptr [402000] # ~; F! ]( r5 a" R, ]
004011BC  |.  E8 AB000000  call    0040126C $ P/ Y* _2 P" c. X+ s/ [3 G
004011C1  |.  89C3          mov    ebx, eax
* i: @. P4 b6 ]1 i% U& A6 g004011C3  |.  83C4 20      add    esp, 20   I$ ~& g# e9 g. P. o/ P- v' r
004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit ) V/ ^5 ~/ Z2 s7 d2 [$ {
004011CB  |.  83C4 F4      add    esp, -0C . h3 `# J0 h/ U* Z
004011CE  |.  53            push    ebx                              ; /ExitCode
/ x! s) A0 d( d) h. x2 R004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess
3 N8 U* F' L1 P004011D4 >/$  55            push    ebp
) F# E" D4 L' [: c! S' {( C$ x- P004011D5  |.  89E5          mov    ebp, esp 7 y4 ~: V' ?! l
004011D7  |.  83EC 08      sub    esp, 8 ; `) l* E: ~% ^) q1 I
004011DA  |.  83C4 F4      add    esp, -0C
/ P* h' R8 {* ]1 X004011DD  |.  6A 01        push    1
$ }; V0 F' b9 J7 f% V7 D004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
2 Y6 O9 _, U7 E5 J004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> " P1 V+ b/ l  J: _7 R
004011E6  |.  E8 95FFFFFF  call    00401180 $ ]/ p. w8 L# Y+ N. ]- J) F
004011EB  |.  31C0          xor    eax, eax
! `# A* x( |( ]* `, v5 i( @1 Q! m004011ED  |.  C9            leave
$ v1 y0 p" |' c. P004011EE  \\.  C3            retn " L0 {# t% y2 h, _
004011EF      90            nop 9 S, X- w! g* T4 N9 O
004011F0  /.  55            push    ebp
2 A" [# l& s! T6 j004011F1  |.  89E5          mov    ebp, esp
& D3 ]9 f4 x# b; {$ |- u004011F3  |.  83EC 08      sub    esp, 8
& g9 ^1 f5 x5 \004011F6  |.  83C4 F4      add    esp, -0C 7 X" p' G, r5 B
004011F9  |.  6A 02        push    2 ) ~( S1 x+ K7 g
004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
( |! O, A; N% h6 G00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
5 h( t, c8 q7 T: r# _! S00401202  |.  E8 79FFFFFF  call    00401180 3 ~1 G# a" T, k5 b4 H
00401207  |.  C9            leave 0 t) b4 Z) S' X$ @' }) }5 _
00401208  \\.  C3            retn " B0 u) l; c3 L; Z& M8 F. e
00401209      00            db      00 # A( l. F" f, H: L  w7 T
0040120A      00            db      00
2 T! K% A) u5 {2 x0040120B      00            db      00 6 i; T  C# @8 l0 ?  v
0040120C      00            db      00
) e: U* r- \( T5 `& A" q" q0040120D      00            db      00 3 y* P7 Q/ e0 d, P& d
0040120E      00            db      00
$ k( W$ }: l  I0040120F      00            db      00 * q+ M. Y, H( B- B4 e3 X
00401210      72            db      72                              ;  CHAR 'r'
' z8 y! U" q  }: j00401211      00            db      00
3 E* F$ Z) k& V00401212  .  69 6E 70 75 7>ascii  "input.txt",0 , `9 n4 E: Z$ o- B
0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"   n  g  x* j) H& h
0040122C  .  2E 74 78 74 2>ascii  ".txt!",0
+ G3 B4 V2 r! b8 E, q! o1 s* m2 t00401232      77            db      77                              ;  CHAR 'w' % X* |% c3 H! G+ I/ a# g- J
00401233      00            db      00 4 r: g. f! L$ F9 V+ L9 d- t7 }
00401234  .  6F 75 74 70 7>ascii  "output.txt",0 - A/ j! Y2 `0 H
0040123F  .  43 61 6E 27 7>ascii  "Can't Create out"
! ?, B' L+ e2 m2 c0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0 " a/ I9 t* I: j! R+ U4 p
00401258  .  6F 6E 65 20 6>ascii  "one char outpute" 5 ?2 y/ q+ |0 z
00401268  .  64 0A 00      ascii  "d % X% {6 S8 ]3 H7 }$ Z5 f$ B
",0 " X) U6 h8 e* _0 E
0040126B      90            nop
& ~% B% q' Q2 V6 z3 y' ?& D. H8 E% d0040126C  /$  55            push    ebp
7 j  g' e& h2 `+ T5 E0040126D  |.  89E5          mov    ebp, esp - U0 z* q6 X5 e" B8 O
0040126F  |.  83EC 18      sub    esp, 18 3 a1 C6 W+ `6 n
00401272  |.  E8 39010000  call    004013B0 * f( y6 B1 u& `4 W( N
00401277  |.  83C4 F8      add    esp, -8
$ h& c$ E8 S0 H5 j) z. [& B' q0040127A  |.  68 10124000  push    00401210                        ; /mode = "r" $ C- ~+ c& J* I  l  X2 t
0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt"   o6 E7 c' ]5 p" ?: t% d
00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen ) c( O7 ~" j; T! V$ h" n
00401289  |.  83C4 10      add    esp, 10
9 h! H3 q" K  ^7 A0040128C  |.  89C0          mov    eax, eax
; P2 a; t1 ^: ^0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax 2 A. O$ r4 ]# R( F% Z
00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0
0 l1 Q% d1 r: e# M/ y# |6 O4 n00401295  |.  75 10        jnz    short 004012A7 + k5 u5 Z6 N) U( j# L0 j' n6 Y
00401297  |.  83C4 F4      add    esp, -0C - L* r0 p: o0 N/ @
0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!"
% h/ @- r9 [" M4 x4 k0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf 0 ?2 y. ~- k' P
004012A4  |.  83C4 10      add    esp, 10
3 {& r/ U9 g0 L' D, T004012A7  |>  83C4 F8      add    esp, -8 5 V, F1 Y1 Z, `, n) c/ a9 b5 D3 a" K
004012AA  |.  68 32124000  push    00401232                        ; /mode = "w"
% C( U1 X) p4 S8 b$ s2 A" \% d004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt" , g% P& {2 u! L  V  b
004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen
7 N$ f1 H' ?+ D- s1 f& h$ g  A) }004012B9  |.  83C4 10      add    esp, 10
9 z) m  o" c8 I5 C" S; f" V. z7 w004012BC  |.  89C0          mov    eax, eax
7 E( Z2 a- Y; ]004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
2 I; T3 ~4 Y- K/ m  _& ]4 P0 F004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0 9 ?6 d0 b% J* G
004012C5  |.  75 10        jnz    short 004012D7
! U8 P7 u4 J! Y1 o8 {" E$ y- i004012C7  |.  83C4 F4      add    esp, -0C 2 s" a) P0 n1 D% v
004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"
; v2 N7 A% |; ~1 e004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf
" U4 N& Z+ J& j& |004012D4  |.  83C4 10      add    esp, 10 # P) n7 i) E$ \3 f8 ^
004012D7  |>  83C4 F4      /add    esp, -0C # M9 \  g8 e/ l. @" j' d9 G- i
004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4]
2 m' p% b: @3 Z3 s004012DD  |.  50            |push    eax                            ; /stream
# P% ]5 C4 p  W; D# U) o/ `* h004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc   N: ]* z. s7 k
004012E3  |.  83C4 10      |add    esp, 10
; w' G8 J9 P6 O& M7 g* P2 C5 n004012E6  |.  89C0          |mov    eax, eax
; ?) O! z6 q7 u3 f" W& Z7 t004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax
4 _, k# w: U6 }4 L5 l" |, {004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
4 L$ i# ~6 B, Y2 |- n- I8 H7 f9 p- ?004012F2  |.  7F 23        |jg      short 00401317
- q2 q7 g* S) C. w" o5 o/ m
004012F4  |.  83C4 F8      |add    esp, -8 " M& k0 ]% _9 Y! d, ]
004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8] ! j- {1 `: y5 D# y. l6 m- _$ i/ r
004012FA  |.  50            |push    eax                            ; /stream $ @8 N; W8 d7 }8 g9 ~; g: w
004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; | # J. Y4 q6 C% P/ d( ?: n1 j" n
004012FE  |.  50            |push    eax                            ; |c ! ^& o# z: u/ ^9 @8 x8 ~7 \) Y; t
004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc : O9 K3 j1 ^+ Q7 D
00401304  |.  83C4 10      |add    esp, 10
9 c5 U! D% D$ e  S  {00401307  |.  83C4 F4      |add    esp, -0C 2 o/ f# P* D* H1 X+ @  k
0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,""
% L' v; K, r, `  E, U0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf
% b3 X" Z4 y; O1 [+ L/ j! M7 z00401314  |.  83C4 10      |add    esp, 10 ' y, `0 n$ A) O0 g( J! U
00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1
, W  A; s2 _" O3 B+ H0040131B  |.  75 03        |jnz    short 00401320 - q& ]$ T& }( r* W
0040131D  |.  EB 03        |jmp    short 00401322
" B- D4 G/ g/ ^0040131F  |  90            |nop ( t) q! D  G& c  h' G( A, m
00401320  |>^ EB B5        \\jmp    short 004012D7
2 }# R, Y+ i6 J. \1 Z. d00401322  |>  C9            leave ; R2 J- }) e: g! v1 n
00401323  \\.  C3            retn
7 y+ ^' i  ^2 K2 u8 M00401324      00            db      00
4 n: h6 e' i  `9 N00401325      00            db      00
2 X9 R* Y3 G! j00401326      00            db      00 ) a. h0 c: k) F) S' ^: R
00401327      00            db      00 2 K. u8 S9 [5 d* k
00401328      00            db      00
% U. W* O( g+ P" G2 }00401329      00            db      00
. l" A& Q8 I) b+ i4 O! z0040132A      00            db      00
" E& ]' ]6 u9 X1 C2 Y; a* y0040132B      00            db      00
% q& u; u  ?1 N1 `1 i% |; d0040132C      00            db      00
' Q9 ~6 T2 u8 J' L" W0040132D      00            db      00
! D9 \; h3 v6 {; `( d0040132E      00            db      00 : l$ \8 K* A6 [
0040132F      00            db      00 ; h) C7 X6 l& a  }1 G, U7 A
00401330  /.  55            push    ebp 2 m- S. B1 ^8 z, m; \
00401331  |.  89E5          mov    ebp, esp
" m' n8 Z9 z% K/ |8 l' _+ F00401333  |.  83EC 08      sub    esp, 8
7 X# d. j0 K: I1 z8 j0 g6 k00401336  |.  A1 10204000  mov    eax, dword ptr [402010]
& Q$ i0 F8 z/ G1 m" `2 [  G0040133B  |.  8338 00      cmp    dword ptr [eax], 0 : G/ @& c. Z" T
0040133E  |.  74 1D        je      short 0040135D & L) L- P5 n/ j
00401340  |>  A1 10204000  /mov    eax, dword ptr [402010] , c+ v7 k* b/ g/ E
00401345  |.  8B00          |mov    eax, dword ptr [eax]
3 T) u3 ~7 D- P+ x! k; Z. Y6 a* `00401347  |.  FFD0          |call    eax
$ e# i- B/ l: C7 t1 w00401349  |.  A1 10204000  |mov    eax, dword ptr [402010]
$ _* x5 f1 l) U0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4]
. ]( n; u5 o- [. A3 e00401351  |.  8915 10204000 |mov    dword ptr [402010], edx 0 Q* I, X& \2 t1 t6 l
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0
" B# w  ?6 S# I9 Y0040135B  |.^ 75 E3        \\jnz    short 00401340 3 k+ X' L* G4 j' s: m  G/ a' W
0040135D  |>  C9            leave
$ B- L3 e: ~1 F) p+ I0040135E  \\.  C3            retn
( ]  o' M+ m# f( e2 P) `  M) H0040135F      90            nop : \" s1 l$ O9 R; ]2 J
00401360  /$  55            push    ebp
3 v$ s4 [, ~2 |5 h00401361  |.  89E5          mov    ebp, esp . B7 A8 q3 m6 l) a+ D
00401363  |.  83EC 14      sub    esp, 14
  X1 E" B4 N/ X- d: s/ I00401366  |.  53            push    ebx
, M5 b4 V8 K* j; A2 W00401367  |.  A1 58144000  mov    eax, dword ptr [401458]
0 N! }5 d( r" w0040136C  |.  83F8 FF      cmp    eax, -1   E8 C8 T) G& f2 [) J' Z7 x
0040136F  |.  75 19        jnz    short 0040138A " S9 @  A4 y, n3 C. l
00401371  |.  31C0          xor    eax, eax 4 k5 H2 {6 V9 Q0 q' Y/ C
00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0 : p6 K* {' v" |9 X) X
0040137A  |.  74 0E        je      short 0040138A
1 B) s$ P8 E! b0 I! Y- ]0040137C  |.  BA 5C144000  mov    edx, 0040145C
0 r, @* Q2 G2 |; R2 F! e4 X" L" a$ F00401381  |>  83C2 04      /add    edx, 4
! b0 W4 J$ e* O00401384  |.  40            |inc    eax 1 X# d$ X# |# V6 z+ V$ o  \
00401385  |.  833A 00      |cmp    dword ptr [edx], 0 ; {. V$ J4 T2 ~0 R5 T, @6 v4 a
00401388  |.^ 75 F7        \\jnz    short 00401381 8 L: N, p% M, O4 v+ f( d. e  G
0040138A  |>  89C3          mov    ebx, eax ' [( m6 s" ?% ^% y; b5 l, u, p
0040138C  |.  85DB          test    ebx, ebx 1 @1 G* b/ v7 @% ~6 k6 I' Q8 ~
0040138E  |.  74 0C        je      short 0040139C
7 K9 T: w4 N9 |- M9 w2 k- w00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
  ]' U' h( r/ B6 _00401397  |.  FFD0          |call    eax % {3 r$ K& D" M; t' m$ p' r
00401399  |.  4B            |dec    ebx
' z/ U9 }/ K1 P- G2 M0040139A  |.^ 75 F4        \\jnz    short 00401390
/ p- l* G0 b' q  p3 U0040139C  |>  83C4 F4      add    esp, -0C $ T# ]+ Q. u$ x! K
0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330 . H- Y% M. N: q( g+ u* @* [" [7 ~
004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
4 u8 @, M" ?! P004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18] - G" g2 z9 {, y; t9 m0 G  H3 K
004013AC  |.  C9            leave + t& c: i; P4 ^% m
004013AD  \\.  C3            retn 5 S. I7 w8 ]7 y/ ?; k
004013AE      89F6          mov    esi, esi
( ^6 M: H+ F* E) p004013B0  /$  55            push    ebp
% f7 b- D9 P2 i- O9 s1 v004013B1  |.  89E5          mov    ebp, esp 8 c. w4 L) i/ Z5 H" @
004013B3  |.  83EC 08      sub    esp, 8 9 G) t/ E1 S. r8 _( c' t% V3 h
004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0
4 E' l! V4 O/ T; B5 F& l9 \004013BD  |.  75 0F        jnz    short 004013CE
: Y, t* n7 H+ p/ _004013BF  |.  C705 14204000>mov    dword ptr [402014], 1
4 Z/ D" G1 e6 Z3 ^: A004013C9  |.  E8 92FFFFFF  call    00401360
6 k1 r- m* [& D1 t6 A$ f004013CE  |>  C9            leave + |6 I3 g1 q9 }7 o5 a  w
004013CF  \\.  C3            retn
4 K! ~! V3 d- ?' k  ^" K004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode
4 `- k3 ^5 X. }' a% L4 Q004013D6      90            nop
7 P$ _$ i6 L3 X' [& ~004013D7      90            nop % x) n1 O9 B" L# f
004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob
2 F% Z6 f# \6 h004013DE      90            nop
/ _  R1 g- p' R6 s; H" _* Q004013DF      90            nop
9 `( F+ t  `0 Q& J$ l$ v1 X! X7 Y004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type 2 n9 U5 C! q* ~5 [- }
004013E6      90            nop 2 [0 m( {1 n" w! V7 I4 x2 h- h
004013E7      90            nop   H0 c/ ^8 @7 F" d  y; a
004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit
+ o1 H" @  g) _+ _* ?* J& ~004013EE      90            nop
4 I0 O( T4 ?& P: j/ l% d7 N' A6 `004013EF      90            nop
- O' [/ B  t4 d- L. T1 m004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ 8 N" @. `* E& R- M8 Y
004013F6      90            nop 0 M! I; |1 b& S! N. {
004013F7      90            nop
/ M8 j! E" Q9 c" k* P4 b/ ?- C* T004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset 9 ?; C$ `; ~' w7 G
004013FE      90            nop
( x3 k: ?# j! X7 ~004013FF      90            nop
% h) E) U: K8 S4 P. u00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal
6 Y" L$ B( P5 r00401406      90            nop 2 Q3 ^" P  q! |( P  |, R
00401407      90            nop
7 a( a  z+ E) a00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno
5 ], G) {$ y3 k0040140E      90            nop
+ S* C& I/ X" _) z/ I$ o. q8 x! ^0040140F      90            nop
, n0 {: C& @! p% P5 o- f00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode
0 x) G& s8 K& \) ~& q" v00401416      90            nop ; N4 D& }8 E! k" }
00401417      90            nop 7 W5 Q6 F3 Q4 ]& r  T9 n
00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs
4 T& w* E7 ^* g& Z5 ^8 s0040141E      90            nop
7 f4 C$ {2 h! M$ ^. K4 }9 ~0040141F      90            nop 7 s. i# f' ^, M! {6 S
00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc * ^& m9 e3 d2 [$ t2 h
00401426      90            nop
; d; l" I" F' o- c00401427      90            nop
% G6 V8 t% J9 j2 g2 W) s7 v00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc ) m2 |; H) P( x* C/ B* B& v
0040142E      90            nop ; r. a5 i7 m0 H% f/ g
0040142F      90            nop
/ O  C3 j* r9 s+ H; U1 e00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
' O. a  Q; r  V3 n; u00401436      90            nop ( b! Q" D3 `4 m) y% D  x7 C; A7 z
00401437      90            nop
, y; ]9 p  ]% j0 R7 u8 u00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen
5 N5 m! B! @- C) _9 m0040143E      90            nop   c* _; f, z; f; Z! [" K
0040143F      90            nop ) m# n3 C2 ~9 S9 L/ D
00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit " \! z( v( U0 f  r2 y
00401446      90            nop
) N6 y! u) k4 m6 J( o3 n00401447      90            nop
) C8 L7 E: {) ?% Z- k/ j6 q00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter " H4 d4 E! ?6 F
0040144E      90            nop * n. x7 ^# H. [
0040144F      90            nop
% N! Q" K/ Y6 P$ J2 [8 C. r; l00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess 9 k0 [( C3 ]! _0 P7 c. }3 A3 U/ s
00401456      90            nop 4 }6 N+ r' c$ k6 w* G6 R
00401457      90            nop
8 S. r* r. y% D2 r4 F8 O00401458  .  FFFFFFFF      dd      FFFFFFFF
' t* p* L( C$ U: i2 Y  B. z5 X7 A0040145C  .  00000000      dd      00000000
: m$ q% B% |0 S5 P# w00401460      FF            db      FF
( x( a6 h* Y# d$ ^' {% A00401461      FF            db      FF
( T% J" a$ b3 k; Q* z) C. F00401462      FF            db      FF
( e. P# S5 ^& Q. d. f2 x. q00401463      FF            db      FF
4 |* Y$ {2 t) v( u" r5 }00401464      00            db      00 . H0 Y* d! q1 Q8 L, o. A, K2 k( X
00401465      00            db      00
$ t0 B2 E- t9 W' x$ M00401466      00            db      00
2 `; L: k, v# {00401467      00            db      00

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。
, B# Q4 G$ K9 y9 c# y* x深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
( t* Q# F( x) q5 {$ O比如不用fgetc这个标准c函数,而用mfc的类似函数来编。
0 ^3 Z; }9 ]; }/ {2 v让我们看看生成的汇编代码有什么区别。+ H5 o8 P5 ~1 V5 w' e
你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
' o* Z% k* C. R, y. [. [2 I
2 s3 a4 T9 o% @. F4 N说说我对单字节内核的看法:
* w7 ~+ C7 Q2 z6 Z/ k! D
& \7 t; N" `8 c, D& s+ W我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,
* q6 [- |- M' S+ j, g. Z0 o5 h然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。
8 v* ^  l3 R' C
6 U# f4 d# s1 Q, r6 f% s举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核& l# T$ t- F' }
就很有可能无法显示中文,尽管那些中文数据都存在。3 l8 l; b. G9 \$ s( ~, ~
; V" W& g  j- t, @% h
所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。
3 I7 x: E0 a, ?( |2 U8 Z& F) s  N! w: p! m
因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。
$ p$ [4 n' J% l% X# S7 t) G6 b2 o& R! U( D: p. d9 @
中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。
. u8 J9 R, \- g; i
, X+ x1 _( U' w0 n* S9 u2 P' I: I. }那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字  O* H- o* X2 Z: _, _
! B0 H2 ]2 x; [3 ~$ m$ }
那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。1 f) A: W: U4 N# }! |2 k( M

0 z$ U; T( j6 T1 F/ L: }1 C就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。
$ S) ?* q: _' Q. X3 t' `5 k5 b1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符' ]# g/ ~* ~: e9 }6 \
2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了
  t% F$ \8 U1 ^2 F- B
& b3 [3 m% L- X; J9 w真正的游戏应该会用这2种方式中的一种来处理。
# f) t2 V% r) r6 p9 N" Q这个单字节内核模拟程序其实只模拟了2的情况。+ {/ @8 |* |$ P* t& L) o
要模拟1的话就要制作一个图形程序了。% t$ K( j( A% @

' W& Z1 r* r, E2 y1 A, d" @这个单字节内核模拟程序本身的意义其实不大。) Y% y# x* g) S  h
其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。0 Y5 s$ \( L' d( {* ]
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。
: t5 g; N8 B  `; l( L这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :
8 c' O( _( R; d& e6 a这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。) O+ C. r% v- _' H
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。$ t: o& ~+ N. i) r1 i
这样的理解对不?
& a0 j3 e* D- `" ?/ J+ W
理解完全正确。! x0 |% V9 c. I/ J0 J% N' H  i
不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。( Y$ ?5 r' o8 j4 V  Q3 G

6 \/ |! l) @1 G9 e有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。7 N! F5 f3 I8 `2 u: Y" c# B
然后逐个nop测试,看有什么变化。
& u( X& n, A; ^4 q- |- l9 T; |$ s& G. e. |5 u
你可以参考一下这篇帖子
( e  I" i+ e+ r5 d# t" ]7 L游戏汉化中的双字节问题处理原理) Q9 D; K- Z5 A
https://www.chinaavg.com/read.php?tid=187095 c6 t! ?4 z4 p' r3 H+ c" {% n
作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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