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

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

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

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

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

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

深绿,你好,有时间的话请帮忙制作一个单字节内核模拟程序。
9 O1 L3 c* |/ x- _- u* p
; a3 U; {  C, w+ E+ D- u题目吓人,其实很简单。
; ~% x3 E- |2 v! z在程序里面设定一个固定中文字符串。
  w" u" @4 u% x然后按字节读取。小于0x80的字节输出到out.txt文件即可。2 D& }' L  w  O% Q$ w

5 ^  M. P4 K$ N3 T* P+ u6 \8 o! ^这个程序模拟了单字节游戏后输出乱码的情况。9 L( ?% w- T2 x# N. x9 N
接下去我们可以利用它进行汇编级研究。
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt
) G" @% I3 S6 M) L先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节  \( g; ~6 m! p+ }0 z) |9 D& D% x* m

: x1 z) [3 z' L- Z7 o( r* Q% H0 r, i但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :
3 ?! }) R( [! s我稍微改了一下程序,包里面有个input.txt和output.txt1 l. y0 I( ?/ x  p, o
先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节8 ^# x+ Z/ d3 w( d9 \* ^
+ a7 j9 \7 Q" k# M/ i
但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?
( D7 F1 ]# T1 d8 n* ?0 c, W
是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。2 L* S  A" T9 H: _  X8 E
这就模拟了汉化了文本以后,中文字符被过滤的情况。! H7 N/ [2 ~. G

' i. N. b; w1 Y! g2 I0 X/ `, V/ \接下去就可以在汇编级用OD载入,开展研究了。
# @3 ^  @3 d1 \6 X' @7 j( `3 K想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。
7 _) B5 I" B  w8 ?" j请看红色的部分,这就是和0x80比较的部分。 $ i% {. p7 D: O4 k
把这2句NOP掉,然后保存修改后的文件为exe。
: t  o. F! h4 o, \- q& U我们发现input.txt里面的所有内容都能被输出了。
% I( n+ W% \6 a5 n4 B* R5 ]- u, Z附上修改后的exe.
5 q% K' s5 I/ j: D, O) f深绿,你可以把这个操作过程试一下,练习一下.
4 y7 r- o2 V! \; D9 d: d* t
/ c+ Z. p/ V* J; Y  e00401000  /$  55            push    ebp 0 i: `$ q9 o& J; |& _$ {9 t$ k
00401001  |.  89E5          mov    ebp, esp 7 q7 `! n, o; f- f- P
00401003  |.  83EC 18      sub    esp, 18 , P" w  c% Z7 [( s
00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0
' J7 }" _' I' O9 x; J0040100D  |.  83C4 F4      add    esp, -0C , U" \. L- r/ A3 w
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4] ; T( b* W) k- A" T1 Q9 R
00401013  |.  50            push    eax
% ?# G1 ]4 a2 A, L00401014  |.  FF35 08204000 push    dword ptr [402008]
' c! e# _. k! i- Z( }0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] . D. e+ E: R( M' Q
0040101D  |.  50            push    eax 2 ]$ h7 L' |; r# W/ P3 \, a
0040101E  |.  68 04204000  push    00402004
7 \; k$ j& f3 Q) k, T! G00401023  |.  68 00204000  push    00402000
8 L- T3 O& ^+ d( K# v$ _- I00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs> . M. K$ l$ M/ X) `  ?
0040102D  |.  C9            leave
) V# |6 j4 Y' j0040102E  \\.  C3            retn 2 K7 i2 u% Q" l9 u6 Z
0040102F      90            nop " A$ k+ E7 N6 O  a( u8 ]( O
00401030  /$  55            push    ebp 0 R3 W/ T( S) E1 x8 s
00401031  |.  89E5          mov    ebp, esp
! ^" G# {- z; }+ D2 j00401033  |.  83EC 08      sub    esp, 8
; P: h) Y. b( h/ \1 \6 L00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C]
3 o2 m% H# n( Q5 t% t  J! y0040103C  |.  85D2          test    edx, edx
2 o2 D) T9 E6 M, I* w0040103E  |.  74 7B        je      short 004010BB 1 q8 \7 D/ i' t3 a) {" n7 A
00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>> 3 r9 k8 C" @3 J
00401045  |.  8910          mov    dword ptr [eax], edx
! A6 K% I3 K( E$ I& \7 J& \! {1 c+ x00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] + O( y4 N1 A. A" k; X
0040104C  |.  85C0          test    eax, eax
/ g9 Y# F" L6 j8 _# A# p0040104E  |.  74 1E        je      short 0040106E ! B+ G' j3 B; l6 U5 s1 M
00401050  |.  83C4 F8      add    esp, -8
- w  p+ P* L2 U. V$ b6 A/ I+ y00401053  |.  FF35 0C204000 push    dword ptr [40200C] : G* `0 M7 ^$ k# D/ c. L0 K, X
00401059  |.  83C4 F4      add    esp, -0C + [' c! y5 L, ]9 V
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob
9 r$ N/ W" K( ^0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
: x% F0 O6 v# {# W; y5 N& y00401062  |.  83C4 10      add    esp, 10
4 X( R2 a4 U7 B* a! Y00401065  |.  50            push    eax                              ; |handle * e8 e) o# b3 d' X0 ?( g
00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode # h! q  h; ], X/ C+ O8 g  `9 g
0040106B  |.  83C4 10      add    esp, 10
: k1 b9 o# ]2 v8 ^0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] % n- \  g# ]# y: n& Y) G7 A0 i: R8 J2 |
00401073  |.  83C0 20      add    eax, 20 ( b* v" ~7 n# ^% K; }& z  W
00401076  |.  74 1E        je      short 00401096
9 a- U. b' L9 o% Q* L8 {* U00401078  |.  83C4 F8      add    esp, -8
5 W; {. F, s: Z0040107B  |.  FF35 0C204000 push    dword ptr [40200C]
, P5 X  \+ m& _( ^  Q% P# N6 J- o00401081  |.  83C4 F4      add    esp, -0C
) `. `- F# B- }! g00401084  |.  50            push    eax                              ; /pstream " _1 f0 k3 ^3 i) U3 o- j) C2 v# `
00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
- I8 k4 v4 [4 k; c5 C) Z0040108A  |.  83C4 10      add    esp, 10
1 L# O$ w( N  {) V1 E6 b8 W" y0040108D  |.  50            push    eax                              ; |handle
1 l' p- C$ M! C: I* x5 j0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode + i3 ?$ F/ Y, ^" c6 U$ x
00401093  |.  83C4 10      add    esp, 10 6 Q' K' q: r; v; Z
00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] , {8 g; l6 ~8 `/ O- |& U1 v$ t' I
0040109B  |.  83C0 40      add    eax, 40 : g+ x% {& Z, H* G: e5 R  {: t
0040109E  |.  74 1B        je      short 004010BB
( V; f! g3 c* o( _! R004010A0  |.  83C4 F8      add    esp, -8
' U1 y6 C7 M2 j6 R004010A3  |.  FF35 0C204000 push    dword ptr [40200C]
) [, |1 z: `4 ]! m0 C3 J; x004010A9  |.  83C4 F4      add    esp, -0C
; A4 O4 m4 r9 P9 _+ W& l004010AC  |.  50            push    eax                              ; /pstream
& g  b; u3 P! I4 X+ F: ^8 R0 S004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno 3 _0 \: f8 U% h% x8 i' X
004010B2  |.  83C4 10      add    esp, 10 ' Z& o3 P  n% ~9 P' m8 C
004010B5  |.  50            push    eax                              ; |handle 6 O4 u' j2 v  A5 c7 F0 A4 q
004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode + o& H) U9 U# M7 s- Z6 W
004010BB  |>  C9            leave   B# Q+ H- C: W
004010BC  \\.  C3            retn / ]6 P0 K# x- V. _$ w" O. r+ q
004010BD      8D76 00      lea    esi, dword ptr [esi] - L0 Y1 \- ^9 F1 ^& Z* y) ^
004010C0  /.  55            push    ebp 6 s( D6 ]/ ^1 h# s
004010C1  |.  89E5          mov    ebp, esp
; N& L  T1 T6 K: \004010C3  |.  83EC 10      sub    esp, 10
% a9 s+ R' Q* D004010C6  |.  56            push    esi
% @- {% f, \4 K' P. g; x; g- Q004010C7  |.  53            push    ebx
" Q- z1 V5 J" G, i0 |3 i004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8] ' f: U' u* p$ r% C. w" z0 ]* `' J# ^- R
004010CB  |.  31DB          xor    ebx, ebx
  i; a2 R/ Q5 v% y004010CD  |.  31F6          xor    esi, esi - F' h1 Z5 j2 h9 N& G
004010CF  |.  8B00          mov    eax, dword ptr [eax]
" c* D) @" [, ]: R004010D1  |.  8B00          mov    eax, dword ptr [eax]
) i& D9 @$ Z+ {. \4 P004010D3  |.  3D 910000C0  cmp    eax, C0000091 1 C+ `7 W/ \* u$ `
004010D8  |.  77 16        ja      short 004010F0 1 g) G' }* V6 o
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D 0 A( _. o2 T" c  O" p
004010DF  |.  73 4F        jnb    short 00401130
  e; S" B* [( d- A004010E1  |.  3D 050000C0  cmp    eax, C0000005 ) x0 T: a6 O+ c3 q
004010E6  |.  74 18        je      short 00401100 " O7 x. R/ P- l1 }7 w
004010E8  |.  E9 86000000  jmp    00401173
/ t6 v4 m+ N; G9 b004010ED  |  8D76 00      lea    esi, dword ptr [esi]
9 }4 O/ }, i$ `& N3 l! Z5 s3 l' d004010F0  |>  3D 930000C0  cmp    eax, C0000093
" R" V2 I, ~7 i004010F5  |.  74 39        je      short 00401130
* |, Y5 O1 e3 n5 y4 l+ M( @6 w004010F7  |.  3D 940000C0  cmp    eax, C0000094
& k2 R- h% ~- h( K  o& D2 k004010FC  |.  74 37        je      short 00401135 # h3 T/ S' u8 \
004010FE  |.  EB 73        jmp    short 00401173
3 ~5 b) B0 o$ G7 q00401100  |>  83C4 F8      add    esp, -8
( B2 f" G" J5 Y. U/ b3 A, T) O00401103  |.  6A 00        push    0                                ; /func = NULL / h( [$ l9 Y! O6 s: S! C
00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
6 f7 m( ~2 w9 h3 o; i00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal " A0 N: V: D" m6 N, f. |
0040110C  |.  83C4 10      add    esp, 10
8 m6 n, h8 L1 A4 t) y& G0040110F  |.  83F8 01      cmp    eax, 1 ; I7 ^$ H6 K) v( b$ U
00401112  |.  75 0E        jnz    short 00401122
# U7 n5 a; y1 f3 J00401114  |.  83C4 F8      add    esp, -8
  l- Z2 T3 ^3 r- p4 X4 B9 ]+ |00401117  |.  6A 01        push    1                                ; /func = 00000001 % f% C2 o; ~' G  t* `
00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV 2 h4 q7 M4 Z  c" Q1 s
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal
1 o! Z5 ^5 p: i) m* B+ _$ L9 l# ^00401120  |.  EB 4C        jmp    short 0040116E
# H- d2 c5 P2 d- Q8 p00401122  |>  85C0          test    eax, eax ) A7 m, M1 q, H2 ]. e8 j) u
00401124  |.  74 4D        je      short 00401173 ( d4 R- t" ~# L% S
00401126  |.  83C4 F4      add    esp, -0C
+ E$ [- R% F) g7 |00401129  |.  6A 0B        push    0B ' k( v3 g6 K/ h& g
0040112B  |.  EB 3F        jmp    short 0040116C   ?& m- i* r# U" e# C, T" O
0040112D  |  8D76 00      lea    esi, dword ptr [esi] 5 R( B1 p9 ]! u7 S7 `' n$ n
00401130  |>  BE 01000000  mov    esi, 1
. m, b5 ?8 p% @+ _& T( |3 ]00401135  |>  83C4 F8      add    esp, -8
7 O' h8 B! G: Y& H- p4 j2 q& j. k; `( r00401138  |.  6A 00        push    0                                ; /func = NULL , P7 d5 ^# L0 t  \
0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
8 c/ x$ |; E* F$ l8 \5 K/ W. A0 Z0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal 6 ~( z7 ^4 A2 X) L' J* [( J6 M
00401141  |.  83C4 10      add    esp, 10
2 J- ^$ N( |7 ^( Y6 S4 _* R00401144  |.  83F8 01      cmp    eax, 1 6 {. n5 ~2 n: |3 a9 {1 V
00401147  |.  75 1A        jnz    short 00401163
! D0 h0 s, Z3 |+ u4 a$ X0 j3 p0 z00401149  |.  83C4 F8      add    esp, -8
  t5 v# `" _/ c6 `, J0040114C  |.  6A 01        push    1                                ; /func = 00000001
. o) \% P( ^; k; B- _- o. W: `8 ^0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE
2 Z3 h  N$ l1 d3 U00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal
$ h' ]+ f7 a. P0 H  f00401155  |.  83C4 10      add    esp, 10 0 E) j9 i0 A7 t, e
00401158  |.  85F6          test    esi, esi ; j4 G% G3 \& n% o3 e: f1 ~
0040115A  |.  74 12        je      short 0040116E
6 R- [! ]; }  a& L  E: ]( J0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset " A) _$ e% I4 E/ I* ^
00401161  |.  EB 0B        jmp    short 0040116E
; f, X; R- g! @00401163  |>  85C0          test    eax, eax ) g) U6 F& n2 c0 K  ?
00401165  |.  74 0C        je      short 00401173 3 `% _2 h! \9 O/ _( ^
00401167  |.  83C4 F4      add    esp, -0C 6 Z9 @$ E: h# G9 L
0040116A  |.  6A 08        push    8
) v  s. L  p/ G( |0040116C  |>  FFD0          call    eax 4 k/ v" M8 C' C5 E
0040116E  |>  BB FFFFFFFF  mov    ebx, -1
+ @1 Z8 W. M1 j! p( n00401173  |>  89D8          mov    eax, ebx
7 J, ?  n( d6 i- @8 _% s; m00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18] ) ]" v  Z% S: b8 ~9 p
00401178  |.  5B            pop    ebx 6 H- s2 w1 d1 `3 P7 P7 P8 w
00401179  |.  5E            pop    esi
8 V1 _! ^( x6 N# A# N0 a0 k0040117A  |.  C9            leave
: e$ W& Q5 \% m  q% G! S0040117B  \\.  C2 0400      retn    4 0 F. p7 W; K% j9 T5 ^4 u
0040117E      89F6          mov    esi, esi + F* H7 I7 Z, r* p3 L( D
00401180  /$  55            push    ebp ' y  l4 q" p! R5 a$ u9 T
00401181  |.  89E5          mov    ebp, esp + G& B5 |2 }" X8 P9 d  ~# [
00401183  |.  83EC 14      sub    esp, 14 6 d# o, F8 Z8 ~: L4 \
00401186  |.  53            push    ebx
! d) \- ?9 g7 K, `* a0 j; s00401187  |.  83C4 F4      add    esp, -0C
$ I" K) I' W, l1 q4 Z  A0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0
" q( D: Q6 p9 P) |+ a. b+ i0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter
0 E  ^5 v. h. r$ E/ I0 l" J5 \00401194  |.  83C4 FC      add    esp, -4 3 ?6 v& ~5 D4 t5 n' U! I( ?
00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset " B. w3 w6 [  l: Q' D" Z; l
0040119C  |.  E8 5FFEFFFF  call    00401000 : G2 T5 F6 b/ m" _$ o
004011A1  |.  E8 8AFEFFFF  call    00401030
( Q( ?3 N3 k  v1 Q004011A6  |.  83C4 FC      add    esp, -4
% n1 X) L( A! v7 x6 H; c' [6 f004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ>
$ n* c4 Z" z/ {4 e& w; d004011AE  |.  FF30          push    dword ptr [eax]
2 ~, y  O6 p) Y& N2 d* g004011B0  |.  FF35 04204000 push    dword ptr [402004]
9 l5 s- k' {+ O, g' L004011B6  |.  FF35 00204000 push    dword ptr [402000]
* X) X! Q+ g* m1 W004011BC  |.  E8 AB000000  call    0040126C 4 v# f1 j1 M) I8 l: l7 D- ^
004011C1  |.  89C3          mov    ebx, eax
7 P) h: o- N2 Y* a004011C3  |.  83C4 20      add    esp, 20 & n4 A4 I2 y% {- i& k* p1 |
004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit + c9 e0 `/ e7 V2 W/ {
004011CB  |.  83C4 F4      add    esp, -0C
! i% c6 y( s5 `( D004011CE  |.  53            push    ebx                              ; /ExitCode
+ M; q3 l. u+ ]' R0 }004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess
. N. \1 g! J) l& x" f004011D4 >/$  55            push    ebp , D# V2 R7 t$ E5 j
004011D5  |.  89E5          mov    ebp, esp 6 a! E$ J+ u. z
004011D7  |.  83EC 08      sub    esp, 8
3 e5 s1 N3 p8 H0 I% e- b4 b- N004011DA  |.  83C4 F4      add    esp, -0C
* T7 }$ U5 ^9 ]. _7 v004011DD  |.  6A 01        push    1
6 r+ F- B9 L% B% P# g004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
9 U+ G, q0 d% f+ o$ ?004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> ' v) N" q) G5 ~5 u+ B) p
004011E6  |.  E8 95FFFFFF  call    00401180 / c# Q) h0 z; f* M8 N
004011EB  |.  31C0          xor    eax, eax 6 r/ e$ `$ Z0 O( f3 B! h
004011ED  |.  C9            leave / w+ A& M3 ^  \, `3 U
004011EE  \\.  C3            retn
5 W  A4 N% G* h004011EF      90            nop $ v: e, h( j8 X0 }
004011F0  /.  55            push    ebp
( m6 B4 S: Y: Q3 n004011F1  |.  89E5          mov    ebp, esp
* y! _8 a2 k: J004011F3  |.  83EC 08      sub    esp, 8
" c3 G: u, m& N, P$ C004011F6  |.  83C4 F4      add    esp, -0C ) P: N5 {% \8 c
004011F9  |.  6A 02        push    2
" o  A# o4 I$ J$ ?0 ~# ~  {. y004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
5 d3 Y: }0 S2 c$ v5 q00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
% U, _5 w' c) {2 G/ W/ _00401202  |.  E8 79FFFFFF  call    00401180
/ W6 E8 k. a5 r00401207  |.  C9            leave
8 l% ], b1 Q, _' U# W00401208  \\.  C3            retn
+ {: b1 R  h8 [' y+ I3 Q$ S3 ~00401209      00            db      00
7 N: [! p9 l$ b1 z$ Z, ?0040120A      00            db      00
. D. I5 U% O: F/ u- m% F  S0040120B      00            db      00 * v; E3 E1 c- h6 Q! s) m* v4 w
0040120C      00            db      00
! x3 [' _+ S9 Y# l( D" b0040120D      00            db      00 2 E  C2 U1 a- _! o1 N
0040120E      00            db      00
) m2 J& r1 `* j9 k9 b- \6 {7 r0040120F      00            db      00
5 D. i( Q& p4 a. a$ j4 M00401210      72            db      72                              ;  CHAR 'r' - ^, R% @9 D. l: P8 S, {% o
00401211      00            db      00 & C3 W# [/ C& R" b' S
00401212  .  69 6E 70 75 7>ascii  "input.txt",0 1 Z3 s2 A( k. h: w2 Y
0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
, _3 j& C7 v* H0 r. s6 [0040122C  .  2E 74 78 74 2>ascii  ".txt!",0
0 o4 P: Z: H$ B: k00401232      77            db      77                              ;  CHAR 'w'
3 V0 k  \1 Y; |% E8 ^5 E* a00401233      00            db      00
9 z: h* r7 B. F0 [( J) s+ d4 \) `2 j00401234  .  6F 75 74 70 7>ascii  "output.txt",0
, k% p7 _( d4 i; r. S0040123F  .  43 61 6E 27 7>ascii  "Can't Create out"
4 R3 t' h/ v2 d# k0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0
! F; P  |' X$ s9 A; Y( Y00401258  .  6F 6E 65 20 6>ascii  "one char outpute"
1 s. p! ?& s! L- P2 j, T00401268  .  64 0A 00      ascii  "d
6 t6 u5 Q  s/ h",0
, I' A: I. `, s; V7 S  u& g0040126B      90            nop
: j3 Q, B. ]! @2 Z0040126C  /$  55            push    ebp
# c+ X$ M5 S- M) w& M2 D0040126D  |.  89E5          mov    ebp, esp % S; B, g; ]% h- l% R6 G
0040126F  |.  83EC 18      sub    esp, 18
9 q3 c: g# b: X' j/ G00401272  |.  E8 39010000  call    004013B0 * o, }/ V0 m) v3 o. v
00401277  |.  83C4 F8      add    esp, -8 : \3 G$ B* u2 B* e
0040127A  |.  68 10124000  push    00401210                        ; /mode = "r" : s7 K! j- [  F
0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt"
, f; ~" S5 Q1 @9 B9 c$ o00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen 0 C. h# q! T' A, j
00401289  |.  83C4 10      add    esp, 10
2 X) }) I  y& {7 @) C% t0040128C  |.  89C0          mov    eax, eax " ?  w# S) ]3 a$ M, N9 D' i
0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax
" I$ O, Z0 ^  Z! D, ^/ J0 k00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0
7 [. _- B) f4 m; Y' R- |: T00401295  |.  75 10        jnz    short 004012A7
5 ~+ E1 ]/ Y7 \1 a/ L/ S3 m00401297  |.  83C4 F4      add    esp, -0C 0 T- U# h2 f! d! M* m& {- R
0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!"
+ a- [6 A( j! W7 M" f0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf / ^& G4 Z5 l2 |! l6 H
004012A4  |.  83C4 10      add    esp, 10
7 I+ M& G) Q, B7 h0 A+ r4 R004012A7  |>  83C4 F8      add    esp, -8
+ v! `: X+ r# p) K! v& P7 Y004012AA  |.  68 32124000  push    00401232                        ; /mode = "w" , \, O! H7 |8 R8 G0 l
004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt"
8 e' c% v. G1 V004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen
- c6 {3 }' r7 @; X004012B9  |.  83C4 10      add    esp, 10
- S' G0 y1 P. Y" Y) R; a" T004012BC  |.  89C0          mov    eax, eax
4 m2 }& X" Z2 n5 p) x3 v9 B004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax # ^8 z( \- G% |# N& x6 L- i2 B9 R
004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0 4 ]9 t5 T* Q: O. K: m! {
004012C5  |.  75 10        jnz    short 004012D7
7 q/ K! ~6 P0 B; u004012C7  |.  83C4 F4      add    esp, -0C . s, h* p' U; L! Y+ \, B8 d* W0 y6 P
004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"
( a+ q; n2 ]9 R0 t$ h004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf 0 l% ]1 y+ G* ^! e
004012D4  |.  83C4 10      add    esp, 10 - M9 X' q. g4 G0 h3 L5 Y, d
004012D7  |>  83C4 F4      /add    esp, -0C
* R; Y$ |. u4 I# \004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4]
  \: J1 K+ @2 ]7 c& J004012DD  |.  50            |push    eax                            ; /stream ' s; w" }# X6 [3 [7 J0 V; ]
004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc ' z% ~1 c& m2 r* @
004012E3  |.  83C4 10      |add    esp, 10
; x8 Q- \$ F; [2 ^004012E6  |.  89C0          |mov    eax, eax
2 Z/ F0 v" G* \004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax # P  |9 a  q* w. O2 C$ u: Z2 f
004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80
- Y  f/ }! ^6 }004012F2  |.  7F 23        |jg      short 00401317
* V9 O) ~  }; [
004012F4  |.  83C4 F8      |add    esp, -8 # N8 C' [& C( L9 K! ?. S
004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8] * l4 h+ L" |' K, P
004012FA  |.  50            |push    eax                            ; /stream " V6 X; k) ?1 x
004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; | ! I3 e& d& \1 `7 ]2 W
004012FE  |.  50            |push    eax                            ; |c $ @. q/ l; z0 b6 m9 a" Z
004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc
( c7 b+ G+ K. _; o+ B' D00401304  |.  83C4 10      |add    esp, 10 - G4 b3 Z4 I* W) g
00401307  |.  83C4 F4      |add    esp, -0C 3 M2 u0 f# r$ ^
0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,""
  Y) n. e# Z! s& y! ~, _& H0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf . Z' M/ V2 J' y+ Z
00401314  |.  83C4 10      |add    esp, 10 + I- X* z& o, b" Q3 f: g
00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1
5 P: W& i; j" @4 n" s5 w0040131B  |.  75 03        |jnz    short 00401320 & x/ g0 u) Y# h% K9 r  G# B9 E
0040131D  |.  EB 03        |jmp    short 00401322 ; R7 W% t% v' p3 A
0040131F  |  90            |nop
! `/ z/ k. `* Q! o9 w00401320  |>^ EB B5        \\jmp    short 004012D7 / u8 L" b0 M- b
00401322  |>  C9            leave
2 [& K9 W- j/ J- |; v' V$ h00401323  \\.  C3            retn 9 w4 I, H2 ^" i6 {: i
00401324      00            db      00
2 H7 j; t/ ~$ w7 ^00401325      00            db      00 9 [( X# C. h! Z5 L* G: M+ Q; H
00401326      00            db      00
7 \. K1 z$ I# i, Y; a00401327      00            db      00
, ?- c# ?  a  ]7 J00401328      00            db      00
! _, v  u" }. @00401329      00            db      00 ! f! a5 \* ]) e3 m9 u
0040132A      00            db      00
; r& e& a; u% M$ O4 Z! p0040132B      00            db      00 ) F1 \$ g7 f" I. j
0040132C      00            db      00
7 \0 ?6 C3 N( N8 ^) G0040132D      00            db      00
( }5 v' V' h& q  j# r+ a/ K0040132E      00            db      00 5 F/ @/ `6 U" v
0040132F      00            db      00
7 s; |5 {. M, _' W00401330  /.  55            push    ebp
; H8 {, }' w& @9 L) p00401331  |.  89E5          mov    ebp, esp
4 E/ G5 A; w9 W1 T- R3 z00401333  |.  83EC 08      sub    esp, 8 ' A+ _* @. e7 A3 h4 `1 x$ i: W- d$ M. \
00401336  |.  A1 10204000  mov    eax, dword ptr [402010] 3 l1 z  P' [- u8 _( i% X- ~
0040133B  |.  8338 00      cmp    dword ptr [eax], 0
$ p! [4 g" L) p+ `3 ?0040133E  |.  74 1D        je      short 0040135D $ m5 q7 W! F5 L/ T; u
00401340  |>  A1 10204000  /mov    eax, dword ptr [402010] ' _' n$ |; N( d& B# R. Y" C/ b9 K9 f
00401345  |.  8B00          |mov    eax, dword ptr [eax]
+ j1 e$ R; m+ n, S6 \' }00401347  |.  FFD0          |call    eax 4 e' Q5 z& k7 P/ F8 e: J6 z
00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] ! L2 i* I$ l1 U: ?) Y5 c$ `
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4] 6 \5 I, A; T! E" \: l
00401351  |.  8915 10204000 |mov    dword ptr [402010], edx $ V4 Q1 x+ ~! v8 G( Y2 e
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0 , w! r/ z- E$ A+ o2 J
0040135B  |.^ 75 E3        \\jnz    short 00401340
  V- E" @  f0 L6 @+ p$ z0040135D  |>  C9            leave : \5 U+ ~. T9 n7 Z4 A: g: U7 Z
0040135E  \\.  C3            retn
- U! T' p# m$ r; r0040135F      90            nop 6 U$ @4 U2 ?% i& p+ g% V$ |
00401360  /$  55            push    ebp + P( M6 R6 o4 W5 }$ }3 W; m
00401361  |.  89E5          mov    ebp, esp 6 v( Y/ V2 ]. ]2 B: ]
00401363  |.  83EC 14      sub    esp, 14 7 G' T8 k% w7 ?* i' B/ K+ U
00401366  |.  53            push    ebx
# J4 S9 @$ @" ~00401367  |.  A1 58144000  mov    eax, dword ptr [401458] 8 s+ e3 v# s) ~4 h7 [5 X
0040136C  |.  83F8 FF      cmp    eax, -1 & E9 w# _$ V( @! |' {7 T+ F
0040136F  |.  75 19        jnz    short 0040138A
7 @5 B% P+ F9 _% f% C00401371  |.  31C0          xor    eax, eax ) u# a% h) J2 T* `, J( Z
00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0
$ j9 m0 S0 A5 z/ u0040137A  |.  74 0E        je      short 0040138A
4 K% c4 X( h. Q7 o7 h1 w0040137C  |.  BA 5C144000  mov    edx, 0040145C & C; I1 W% `- X1 n: k6 u
00401381  |>  83C2 04      /add    edx, 4 * ], U8 O8 v& X* t4 }" r' S# k
00401384  |.  40            |inc    eax $ Q' S9 M, d& Q/ o* ^  E
00401385  |.  833A 00      |cmp    dword ptr [edx], 0
( `. k) V1 H! `0 R4 ~3 W00401388  |.^ 75 F7        \\jnz    short 00401381 + {" p5 H2 ?2 V
0040138A  |>  89C3          mov    ebx, eax
( F7 N* B" Y: z/ Z  J0040138C  |.  85DB          test    ebx, ebx
9 |. G2 T# f6 E0040138E  |.  74 0C        je      short 0040139C
2 M3 s4 I/ {9 B, ^6 G, o* n00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
8 S% ~" E$ n# w7 G/ q00401397  |.  FFD0          |call    eax
8 D' e# H: t  E" N: y00401399  |.  4B            |dec    ebx . Y* j8 P, Q4 B
0040139A  |.^ 75 F4        \\jnz    short 00401390
6 U+ s  Q0 f6 M5 ?: p% E0040139C  |>  83C4 F4      add    esp, -0C
" H0 Y" l  A5 p  i0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330
, C- q0 Q; Y( l9 f( w004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
& l9 J8 |# E* Q004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18] ( F# i& R$ V1 v5 y
004013AC  |.  C9            leave # L# i7 L4 d- P% C' d; Q) ?
004013AD  \\.  C3            retn ; [8 h- r' k& h8 Q/ W
004013AE      89F6          mov    esi, esi + c' C  ^+ v$ M
004013B0  /$  55            push    ebp
3 [2 Z* w# z" j" l: T2 w004013B1  |.  89E5          mov    ebp, esp
: V& L- X7 R# l+ z6 C9 u$ |004013B3  |.  83EC 08      sub    esp, 8 ' U) u! n% |! Q
004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0
! _; N: e1 z9 }6 E. Y5 ^1 N004013BD  |.  75 0F        jnz    short 004013CE 4 g: w% J2 ]9 c. F
004013BF  |.  C705 14204000>mov    dword ptr [402014], 1 + B. ^; w! Z% h1 k7 m+ f5 w/ Z5 B% o
004013C9  |.  E8 92FFFFFF  call    00401360
4 m6 H) A3 R2 Z004013CE  |>  C9            leave
3 @" t6 u7 v& a' G004013CF  \\.  C3            retn   n+ p" n) M! Z
004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode / F: ~; Z* B# I; `& @. A3 Y3 k6 i
004013D6      90            nop
# ~. D6 y: e1 G004013D7      90            nop $ Z; B& V( `2 S. L2 n8 Y0 `" R
004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob 6 O4 X. b# t. X. M+ X5 p- n0 e
004013DE      90            nop
0 M+ c: M* V, q. `# E* L7 L004013DF      90            nop # v; E0 X: J: r/ w/ j/ d) `2 T* F
004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type " m+ Y. g2 U7 K( J% V2 D/ ~$ T8 l
004013E6      90            nop
( g3 X+ @$ {  g7 ^004013E7      90            nop ) S! b6 H6 f+ s7 r# l
004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit # `; y/ v' }0 A7 @6 i) B0 Y
004013EE      90            nop
# N; A, A. ~$ }. B. D' |004013EF      90            nop
- M$ M4 `- n7 N) w004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ # R5 T7 I! W' _/ P( U. q
004013F6      90            nop / ?* s, m# B6 J( G# Z( f* J6 K9 E" f
004013F7      90            nop
7 E5 L9 ~* n4 c0 L* Z' G. f# q- c004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset
/ a! s/ n: l, P3 m5 h8 N004013FE      90            nop
( E! N( f( g& z% w6 M/ O004013FF      90            nop
  |. G; Q/ N1 e3 F$ T, F00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal 7 R( z" I1 h# n/ o2 R8 V
00401406      90            nop
7 |/ G0 s# q8 I7 [( {00401407      90            nop
  O* k. A' Q) C/ ^2 P. ^7 r# ~00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno
$ P5 a1 }' }' z* Z5 D/ _) K0040140E      90            nop ; [4 w% v6 P  w! j
0040140F      90            nop
1 u$ R  d9 Z* \- g3 Y6 @! u00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode
3 ~8 x. o& B2 \$ `" n00401416      90            nop
% v% s( a( Y. d8 b/ [2 A* Y2 B00401417      90            nop
4 `. x- G. E' M0 _00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs ) a2 F; `2 T9 W% ]/ p6 }
0040141E      90            nop
6 k. G6 V- e* F; N4 Z0040141F      90            nop
/ P, e/ ^) y/ L  D) h+ [1 `2 W00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc ! C6 w# c/ n, R. b4 B' Q0 G  O1 t
00401426      90            nop % \" i$ G( Q6 A, h2 v, B3 f
00401427      90            nop
. R' ~  y: S4 A00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc
4 p2 b/ q; W$ J0 |0040142E      90            nop ! J" L/ I# @8 c( c0 d! d  A, ?
0040142F      90            nop ! L% }3 s/ C9 D* m
00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
2 g3 T" `* v' B4 ?00401436      90            nop
, G5 ]2 |3 ~( }! v% r0 u00401437      90            nop
7 B! ^7 v2 H# M& o00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen / {0 @* ^- z% s2 Z7 }/ Z# [
0040143E      90            nop 9 U' D. C8 M$ @7 J0 M
0040143F      90            nop * p1 Y, \0 H9 q
00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit & Z6 X- u! D) H" k
00401446      90            nop
( l( a% O& L6 z6 n00401447      90            nop
* `, `* }) s* i6 A7 c2 |0 {00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter . [; A- [2 J$ F# A7 q. C4 u
0040144E      90            nop
/ K  @5 |+ A3 O6 [& w1 y0040144F      90            nop # y/ c1 N/ t  d
00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess ) j; x9 F1 S0 h
00401456      90            nop ! I8 m& P! o. ~! l3 C
00401457      90            nop
% m. g0 P9 E+ r# M8 R( L00401458  .  FFFFFFFF      dd      FFFFFFFF % `+ T; v4 u' e. f$ n) v! o
0040145C  .  00000000      dd      00000000
2 g6 S8 `9 M5 n6 ?00401460      FF            db      FF : k( D: x$ h( t" N# h. x
00401461      FF            db      FF , r' W! O" a% K0 a
00401462      FF            db      FF
9 F% U9 ~- k% a00401463      FF            db      FF " s) I. C* M- Z- r
00401464      00            db      00
) Y5 J2 U# l% a" U' O4 @00401465      00            db      00
8 {/ o. {/ e# D9 r00401466      00            db      00 % T8 w  P4 @# d, W  A- F. e
00401467      00            db      00

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。1 b) d% ]& H# E- p$ ^% E3 D
深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
2 j! e- h& r( \: {- R" l比如不用fgetc这个标准c函数,而用mfc的类似函数来编。
2 L- u1 f( V/ v7 F让我们看看生成的汇编代码有什么区别。
% ?) E, h/ ?5 h你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
( A8 R: a0 R- B, O- l8 G! r2 D% u$ }2 H" ], x& K
说说我对单字节内核的看法:
4 B# @( C. H' u! w0 j% P# f2 \! b8 ~7 N8 F& f* }
我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,. |3 ~  u* E, \% ?
然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。# H6 {9 k) Z% `6 V' U! ]
9 b+ p% K+ K/ l" R$ G
举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核- @- W/ |: D- I: ^0 ]9 B
就很有可能无法显示中文,尽管那些中文数据都存在。
3 L- e0 |: C1 M3 F0 `  i, p  }5 E# {
8 _1 h! L0 ?1 F" W$ e所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。
5 d4 Y6 F2 J6 {+ i8 f; K/ E( a4 m. f& ?! M! t2 ?/ k
因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。
1 {; B9 V5 U3 l, `& C4 G: Z- h% N5 T) z9 d& e. s9 z% t7 f
中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。
* l, [  N5 B+ r3 t) J1 u  Q- p, P0 G" }
那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字; {/ [: V& R0 B6 h3 G* s# H3 w/ [
! U3 }6 F; t% w: c5 y* v
那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。# \/ j; K, ]  q# {
0 M4 f+ B7 ]* l  |
就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。
9 D* L5 h4 a. _, ?3 I! _9 y1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符
" z3 i) ?3 t, e0 ^& T$ i2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了0 U" E% n6 I  n% q: n  D0 I/ b% p

7 S9 E0 h, _& T/ t% i! g真正的游戏应该会用这2种方式中的一种来处理。# T5 S2 O' x) l- y$ E& O
这个单字节内核模拟程序其实只模拟了2的情况。
) e9 W+ u/ D! R4 d! W: G; ?) B( j8 _要模拟1的话就要制作一个图形程序了。
4 F8 J2 L1 B. m  n, s1 i  M5 ~; `) p/ t' g1 R$ i, f& T3 R' K
这个单字节内核模拟程序本身的意义其实不大。6 C) [4 m$ p0 w5 q5 U
其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。( J! C# \$ g3 P3 K6 k& ^* P3 x3 H+ _; `
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。$ W8 B+ o) g/ W9 s1 f4 ]
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :: }6 z, i+ m' Z, B2 X$ A
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
1 i/ A0 w; W$ y所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。
+ `% ]" o# X1 k+ j% T; h# W6 U0 y1 u这样的理解对不?
2 ?' A! u! q! n  a5 K2 U9 ^. A
理解完全正确。
5 q3 o9 b$ e' m7 q) W5 Q+ t不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。
, _0 {& c; }) p2 d$ [) E; o# x6 F" Q6 N0 Q
有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。. c& S2 X- N  K
然后逐个nop测试,看有什么变化。
: n: t& c4 _' C% V* Q5 h
9 f) v+ ], z' f你可以参考一下这篇帖子
( B& R  {8 H  z; H游戏汉化中的双字节问题处理原理. j+ f) q; |0 Q% z' k+ w, r
https://www.chinaavg.com/read.php?tid=18709
1 ^, S) s7 u0 l" X' @1 @作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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