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

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

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

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

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

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

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

使用道具 举报

沙发
发表于 2009-10-10 19:10 | 只看该作者
我稍微改了一下程序,包里面有个input.txt和output.txt
5 G2 x; x9 Y  W9 T- A# y先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节" S: ~7 L8 b* b0 Q/ w6 M4 G

# a* f* Y) m" X! Y但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

板凳
 楼主| 发表于 2009-10-10 21:47 | 只看该作者
引用第1楼深绿于2009-10-10 19:10发表的  :  |  _! C; `/ r( e+ o: b0 d& j
我稍微改了一下程序,包里面有个input.txt和output.txt
/ j! K  h4 d6 P# K8 \$ u. ]0 w$ v先在input.txt里面写入字符串,然后运行程序,就会在output.txt里输出小于0x80的字节6 y* H2 N; ~( E$ y: j' c$ T

0 N2 K* w" J* w/ ?* l但是我有个疑问,汉字两个字节的机内码都是大于0x80的,这样如果原字节是纯中文的,不就没有字节被输出吗?

# ]' L9 s- i/ y+ G. H" r是的,如果输入字符串是中英混合的话,输出的内容就只留下英文了。
+ u. ?& ^  v* H0 l  r7 y+ {. {这就模拟了汉化了文本以后,中文字符被过滤的情况。
8 E0 M: F! L; I! Z6 Y2 A4 q  i
& i6 T1 I* M% n- U, D接下去就可以在汇编级用OD载入,开展研究了。
. w8 [6 V/ P0 X9 n0 X2 R# f; |2 z想办法把和0x80比较的地方去掉就行了。
回复 支持 反对

使用道具 举报

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

使用道具 举报

5#
 楼主| 发表于 2009-10-10 22:02 | 只看该作者
由于这个程序很短,OD里面的汇编代码也很短。 1 W( I- R" p9 S+ l6 F8 N$ W# Z
请看红色的部分,这就是和0x80比较的部分。
. q) r9 U$ ]5 H+ w2 t, L1 ]6 v5 f把这2句NOP掉,然后保存修改后的文件为exe。 . Y- k8 A& E$ Z  W9 ~, P2 u* g) l
我们发现input.txt里面的所有内容都能被输出了。
+ `( V( X" K; M5 s  @$ i! {附上修改后的exe.
0 C/ b5 K; b7 B& U. F深绿,你可以把这个操作过程试一下,练习一下.
2 D0 b; ~$ E. e/ @# u- Z$ z
9 C+ ^$ C+ F/ [) A( S: ]' s00401000  /$  55            push    ebp 4 J& x( P  P, E
00401001  |.  89E5          mov    ebp, esp ( Z' N0 p" C5 k& Q" s
00401003  |.  83EC 18      sub    esp, 18
& ^1 ]5 Z2 o' y: }" _00401006  |.  C745 FC 00000>mov    dword ptr [ebp-4], 0 1 r. b, |2 P' \, [
0040100D  |.  83C4 F4      add    esp, -0C * j7 Y' F" ?$ G, ^$ ^" V; h
00401010  |.  8D45 FC      lea    eax, dword ptr [ebp-4]
& j$ y$ r: X; P9 v00401013  |.  50            push    eax 1 d: D$ v9 q9 z
00401014  |.  FF35 08204000 push    dword ptr [402008] % R8 I2 F) {( M! l% A4 U" n5 h. c" g
0040101A  |.  8D45 F8      lea    eax, dword ptr [ebp-8] ; Y3 X2 g5 L3 O( B
0040101D  |.  50            push    eax 5 Q  K9 Z. A: B& Z1 @
0040101E  |.  68 04204000  push    00402004 , c3 K2 X3 W; m
00401023  |.  68 00204000  push    00402000
" w# q' I5 q) h00401028  |.  E8 EB030000  call    <jmp.&msvcrt.__getmainargs> 1 S- ^) ~& e# ~  S! o
0040102D  |.  C9            leave
  `0 S9 A5 ?" m: e& n0040102E  \\.  C3            retn
* e3 Y4 c$ o* d3 e! I( c; S0040102F      90            nop
% K5 ~0 a8 a8 Z8 @4 C- I4 H00401030  /$  55            push    ebp ; ]! h$ b. E  K( |
00401031  |.  89E5          mov    ebp, esp
5 i5 e3 F* Y8 ~3 v/ V' x00401033  |.  83EC 08      sub    esp, 8 6 K9 A1 M1 r# J' S5 \' r; I9 t3 X
00401036  |.  8B15 0C204000 mov    edx, dword ptr [40200C] 6 ]4 z, ~; K& d/ ^# ^6 |* x/ g
0040103C  |.  85D2          test    edx, edx & O8 t% z' z0 i! d; h
0040103E  |.  74 7B        je      short 004010BB * E# O  ^" O4 [
00401040  |.  A1 AC304000  mov    eax, dword ptr [<&msvcrt._fmode>>
9 m1 ~+ W6 J& w8 h00401045  |.  8910          mov    dword ptr [eax], edx
7 h5 S9 X: y6 n00401047  |.  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
4 F6 l/ K: V% c. c5 q: F0040104C  |.  85C0          test    eax, eax 0 l' p% L. m& K9 D
0040104E  |.  74 1E        je      short 0040106E 0 l- p+ C2 t/ ~: E/ _" `& ]( Q, ^! X
00401050  |.  83C4 F8      add    esp, -8 : Y0 H' X( r) ?6 @
00401053  |.  FF35 0C204000 push    dword ptr [40200C] % ?8 X6 \* \3 p. }- Q) H
00401059  |.  83C4 F4      add    esp, -0C ) B9 }' N5 w' q5 \3 V( Y5 R; s
0040105C  |.  50            push    eax                              ; /pstream => offset msvcrt._iob / Y/ y* o7 \) s& }6 }& n
0040105D  |.  E8 A6030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno $ N6 s0 ~& ^2 F* u
00401062  |.  83C4 10      add    esp, 10 ' m2 ^4 q; ]1 a' ~, W, z
00401065  |.  50            push    eax                              ; |handle % P! ]( U( d% ]: \2 P
00401066  |.  E8 A5030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode / q) q6 r; S$ A' f* e4 ~2 R5 R* h
0040106B  |.  83C4 10      add    esp, 10
& [3 a% Z& I: q% p& ^0040106E  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>] ! x' f$ n) M( G9 s4 [
00401073  |.  83C0 20      add    eax, 20 * k4 B+ ?6 N% u! l' A, u
00401076  |.  74 1E        je      short 00401096
( m2 T! ?0 ^5 X1 x: c. }; r* u00401078  |.  83C4 F8      add    esp, -8
* C# F: T# Z5 ~0 P+ T1 s! ]0040107B  |.  FF35 0C204000 push    dword ptr [40200C]   e+ o( f. d  ^" T, _: n
00401081  |.  83C4 F4      add    esp, -0C
) s. d: S/ h  [" f4 [7 `+ H00401084  |.  50            push    eax                              ; /pstream
) e! e5 x; g5 W% T" _$ \00401085  |.  E8 7E030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno
0 q9 |4 c) [- X" P3 V' g3 C1 G) j( [5 O0040108A  |.  83C4 10      add    esp, 10
" g$ S( S3 h7 O3 d4 n% H" ]0040108D  |.  50            push    eax                              ; |handle
, e$ Z6 s, L; i3 J8 s0040108E  |.  E8 7D030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode
$ h- Z" K- F- U00401093  |.  83C4 10      add    esp, 10
; F! J" L" Z& S/ T. p- Z00401096  |>  A1 B4304000  mov    eax, dword ptr [<&msvcrt._iob>]
: [2 q( f' w. d+ Y0 |0040109B  |.  83C0 40      add    eax, 40
+ K4 o4 Y1 p& Q5 T0040109E  |.  74 1B        je      short 004010BB - K% J2 v) T* a0 A0 C$ G% J  Z
004010A0  |.  83C4 F8      add    esp, -8 6 }- c( X' Y; I' ~( q
004010A3  |.  FF35 0C204000 push    dword ptr [40200C] 8 [1 Z  S5 H% \2 K4 L. o$ a7 V
004010A9  |.  83C4 F4      add    esp, -0C
: [/ J. v0 f  {6 s004010AC  |.  50            push    eax                              ; /pstream + l" N) m- K! ]3 }6 H) p5 d0 `
004010AD  |.  E8 56030000  call    <jmp.&msvcrt._fileno>            ; \\_fileno - s. J; ~6 Z6 L% @# T
004010B2  |.  83C4 10      add    esp, 10
2 `& e1 _; m. A+ Z) h1 T. M004010B5  |.  50            push    eax                              ; |handle
# R+ Z6 |. [7 c% O6 ?004010B6  |.  E8 55030000  call    <jmp.&msvcrt._setmode>          ; \\_setmode 1 M" g9 x8 }: p4 |5 m# f
004010BB  |>  C9            leave 8 {& q2 Z) g  [4 `9 e: F0 D
004010BC  \\.  C3            retn : |4 i/ z2 ]2 @2 H+ ?
004010BD      8D76 00      lea    esi, dword ptr [esi]   ~5 i# z) R; D9 q1 a2 D/ n4 x3 N
004010C0  /.  55            push    ebp # m% F0 B1 z" w8 \" u: p
004010C1  |.  89E5          mov    ebp, esp 8 P$ `* K* U! j: {/ k
004010C3  |.  83EC 10      sub    esp, 10 ; o' ?7 e$ k( _. e/ L4 c* Q/ F/ _
004010C6  |.  56            push    esi   X. q0 Z" F# w& e
004010C7  |.  53            push    ebx
. J0 O; s9 h' Q' A7 y+ E4 d004010C8  |.  8B45 08      mov    eax, dword ptr [ebp+8] ( x* {2 {. ?  ^' K- E# z* q
004010CB  |.  31DB          xor    ebx, ebx * q5 V1 y, ]& I# T+ r; T
004010CD  |.  31F6          xor    esi, esi
% o, L+ K- ~! Y' `3 E7 U004010CF  |.  8B00          mov    eax, dword ptr [eax] 0 C4 C( u! T1 y" P* S) H/ B2 V
004010D1  |.  8B00          mov    eax, dword ptr [eax] 1 m( I: l8 n4 a" p; G6 K, |9 L
004010D3  |.  3D 910000C0  cmp    eax, C0000091
2 I+ F$ U8 k8 w  u0 l9 \004010D8  |.  77 16        ja      short 004010F0 ) Y( G6 r) S- P7 e  e5 \' X3 |
004010DA  |.  3D 8D0000C0  cmp    eax, C000008D
( c) K7 v9 W) l" T6 R9 f4 N+ Q004010DF  |.  73 4F        jnb    short 00401130
, h2 G; r. v1 f: G  w004010E1  |.  3D 050000C0  cmp    eax, C0000005 " F: l$ P" u7 v6 v7 L5 T1 y
004010E6  |.  74 18        je      short 00401100
+ R, f9 ^( M% ~  Q# }# m004010E8  |.  E9 86000000  jmp    00401173 " G# ^3 ~7 ~$ |* e( d" V  ~
004010ED  |  8D76 00      lea    esi, dword ptr [esi] 1 M, B: O" X) s$ y3 C+ s8 d# _) o
004010F0  |>  3D 930000C0  cmp    eax, C0000093
# T1 }- m5 G7 o; n6 @2 d& P004010F5  |.  74 39        je      short 00401130
2 d/ n. s* K# v1 p; S. Z004010F7  |.  3D 940000C0  cmp    eax, C0000094 ! f. l! c! F& u
004010FC  |.  74 37        je      short 00401135 3 F+ n0 `9 U) ~4 x
004010FE  |.  EB 73        jmp    short 00401173
/ m) Y- D! {, `2 Y/ d5 a00401100  |>  83C4 F8      add    esp, -8
/ a, r8 h2 a: j  u, [& z. O00401103  |.  6A 00        push    0                                ; /func = NULL 3 P% x" o, |. s0 B
00401105  |.  6A 0B        push    0B                              ; |sig = SIGSEGV
( I: a. t3 v& H/ M7 _) {00401107  |.  E8 F4020000  call    <jmp.&msvcrt.signal>            ; \\signal 6 ]8 m5 T% ]$ A" ^, Y- }, g
0040110C  |.  83C4 10      add    esp, 10
0 @; P" U% J: @: T0040110F  |.  83F8 01      cmp    eax, 1
9 y8 Q* Z+ w! m4 ^( \) ], |( I00401112  |.  75 0E        jnz    short 00401122
* i9 r: ^9 P" u; E: H00401114  |.  83C4 F8      add    esp, -8
6 r" a/ a: E7 x. c00401117  |.  6A 01        push    1                                ; /func = 00000001
5 T4 }% i' t- P. [# N5 o- x00401119  |.  6A 0B        push    0B                              ; |sig = SIGSEGV ' j* \) {9 @# [
0040111B  |.  E8 E0020000  call    <jmp.&msvcrt.signal>            ; \\signal   i; W3 }) J& I( j0 q
00401120  |.  EB 4C        jmp    short 0040116E " k$ P9 d5 }6 S. r/ F  b/ [
00401122  |>  85C0          test    eax, eax 3 \8 B3 \( `' T9 W3 \: e
00401124  |.  74 4D        je      short 00401173 " b6 I  m; }' l! _' G5 ]- J* `" A
00401126  |.  83C4 F4      add    esp, -0C ; [5 o, v, D7 {& n# a, ~
00401129  |.  6A 0B        push    0B
& ]; f! t7 x/ `: k' A0040112B  |.  EB 3F        jmp    short 0040116C
0 Z6 l2 w* k+ y* W# u0040112D  |  8D76 00      lea    esi, dword ptr [esi]
8 g6 W) P) ?$ Y00401130  |>  BE 01000000  mov    esi, 1
! z6 o9 U8 G( z0 `% b9 a! q00401135  |>  83C4 F8      add    esp, -8
) x2 S+ n: P& h. d$ }3 o) P00401138  |.  6A 00        push    0                                ; /func = NULL - ?0 j- |) G( o" l
0040113A  |.  6A 08        push    8                                ; |sig = SIGFPE
( u: f1 O3 l9 q7 ]8 Y0040113C  |.  E8 BF020000  call    <jmp.&msvcrt.signal>            ; \\signal
  p0 w& \( c$ J  t9 O4 R; n3 m6 F* h00401141  |.  83C4 10      add    esp, 10
+ |: }/ f4 B" O1 b) l2 g00401144  |.  83F8 01      cmp    eax, 1 / H6 M4 E6 {5 V4 F
00401147  |.  75 1A        jnz    short 00401163 ( M  `8 ~: q8 x, b/ K  T
00401149  |.  83C4 F8      add    esp, -8
( ~2 `3 L" H; @. ^* G0 }0040114C  |.  6A 01        push    1                                ; /func = 00000001
+ ]5 I+ l) N! [% X1 v6 n0040114E  |.  6A 08        push    8                                ; |sig = SIGFPE
* G$ r6 T0 h% o, N+ f+ r" E00401150  |.  E8 AB020000  call    <jmp.&msvcrt.signal>            ; \\signal
# m0 u" a" M0 f& X! s3 h00401155  |.  83C4 10      add    esp, 10 - X: ?2 `8 W; E5 M
00401158  |.  85F6          test    esi, esi 2 X/ t1 ^( [) L9 R
0040115A  |.  74 12        je      short 0040116E
2 L( f( u; E. b% o0040115C  |.  E8 97020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset / w. [3 }" M) p! O$ i: l
00401161  |.  EB 0B        jmp    short 0040116E ( W* \$ f) T- t: a0 w  Z
00401163  |>  85C0          test    eax, eax
& x3 z" J% O* U+ m: [' {00401165  |.  74 0C        je      short 00401173
4 n, u/ g1 k% w00401167  |.  83C4 F4      add    esp, -0C
3 E, Z" o- U* g0 M0 k  B5 n0040116A  |.  6A 08        push    8
% E& n  u5 e1 X6 V7 b. y6 F9 r" R0040116C  |>  FFD0          call    eax " ]: B% |5 m( j  ^
0040116E  |>  BB FFFFFFFF  mov    ebx, -1
$ j- c9 J1 C6 D, R' o00401173  |>  89D8          mov    eax, ebx , n# }# Y% U  m3 N! I" d
00401175  |.  8D65 E8      lea    esp, dword ptr [ebp-18] 6 ]. Z" F, h5 k5 p2 K1 r2 I/ E" H
00401178  |.  5B            pop    ebx
" L/ s8 \& f- n+ g00401179  |.  5E            pop    esi
! ?$ W5 |7 b! d" b5 b0040117A  |.  C9            leave
6 d3 h1 s3 g8 d$ t( }0040117B  \\.  C2 0400      retn    4 6 }- t& [2 j2 _) `) h' J
0040117E      89F6          mov    esi, esi 1 ?% F1 b' W" N# [: `
00401180  /$  55            push    ebp 0 N" a, c2 c9 J0 O  I; s( C$ h
00401181  |.  89E5          mov    ebp, esp ( Y6 H3 z0 f/ K' h" m  p% y
00401183  |.  83EC 14      sub    esp, 14 ( F' `  b4 s  Q2 `
00401186  |.  53            push    ebx   U# t1 w- Y: L$ a
00401187  |.  83C4 F4      add    esp, -0C 9 u; Y- I2 {6 W. N2 N0 a! V
0040118A  |.  68 C0104000  push    004010C0                        ; /pTopLevelFilter = engoutpu.004010C0
) X" T/ m2 _1 G& W0040118F  |.  E8 B4020000  call    <jmp.&KERNEL32.SetUnhandledExcep>; \\SetUnhandledExceptionFilter 7 o( k1 C: s# u9 Q5 l9 A
00401194  |.  83C4 FC      add    esp, -4 & b  u: E; K2 T2 z! G8 \/ \  Q# N
00401197  |.  E8 5C020000  call    <jmp.&msvcrt._fpreset>          ; [_fpreset : h- W$ l$ u- L2 d
0040119C  |.  E8 5FFEFFFF  call    00401000 / V0 X# |) f5 E* G
004011A1  |.  E8 8AFEFFFF  call    00401030
4 Z; l/ _; R' ]4 `" Z0 L& L004011A6  |.  83C4 FC      add    esp, -4 7 c, c, I, W! b; y2 O
004011A9  |.  E8 42020000  call    <jmp.&msvcrt.__p__environ> ) T% R0 u. h1 @2 f0 \, C0 L2 e8 g
004011AE  |.  FF30          push    dword ptr [eax] " T* J7 A9 s& [
004011B0  |.  FF35 04204000 push    dword ptr [402004]
: r  I# V2 ^$ y( F. J% Y8 W1 C5 n004011B6  |.  FF35 00204000 push    dword ptr [402000] 6 a( W2 d7 z3 J* J
004011BC  |.  E8 AB000000  call    0040126C
, v' b! b' |' }8 F0 I4 d3 ]& W+ c$ s, ]004011C1  |.  89C3          mov    ebx, eax
! ]$ }9 e9 i1 }9 }2 p) I% `004011C3  |.  83C4 20      add    esp, 20 3 p; O6 ]% b5 L5 ?
004011C6  |.  E8 1D020000  call    <jmp.&msvcrt._cexit>            ; [msvcrt._cexit 9 j6 b: @( P2 ~: A( s3 W
004011CB  |.  83C4 F4      add    esp, -0C 3 ]7 o7 e# `& _
004011CE  |.  53            push    ebx                              ; /ExitCode
0 _8 B/ Y* Z/ z004011CF  \\.  E8 7C020000  call    <jmp.&KERNEL32.ExitProcess>      ; \\ExitProcess * b0 t- K5 r# |, c# p7 V
004011D4 >/$  55            push    ebp
3 |/ C0 k6 ~  H1 s( J004011D5  |.  89E5          mov    ebp, esp ( t7 [8 F- i' j2 N
004011D7  |.  83EC 08      sub    esp, 8
7 T6 R9 S) Z" o+ c' g5 W. R004011DA  |.  83C4 F4      add    esp, -0C 7 }: z! P# K! n0 _, v* O
004011DD  |.  6A 01        push    1   U4 i8 m: G+ B: d: w9 t, {
004011DF  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
% }' U6 O( Y5 X4 d' a9 [004011E4  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type> : A, B) S/ G# y6 d5 X1 z! m7 n! C4 H3 i
004011E6  |.  E8 95FFFFFF  call    00401180
3 f2 x9 }; ^2 `# s7 Q( Z+ V004011EB  |.  31C0          xor    eax, eax & P3 {! G' J  t; J% ~# B# r( z
004011ED  |.  C9            leave 3 s# O. Q" @0 H3 S# w0 g
004011EE  \\.  C3            retn
/ ~9 U, [& S& a/ w004011EF      90            nop
- Q( c7 |  a# B+ G/ }004011F0  /.  55            push    ebp : O- E% T+ e' K/ y1 f0 ~$ E
004011F1  |.  89E5          mov    ebp, esp 3 e. ^+ Z: E9 B) X$ I! l/ {. ^% y1 q
004011F3  |.  83EC 08      sub    esp, 8 ) K; E; B+ g1 j7 h, h: p( r
004011F6  |.  83C4 F4      add    esp, -0C 1 [. }  [+ v3 \& R1 I
004011F9  |.  6A 02        push    2 , Q* {  \9 q2 x: \7 s# m( ~" J
004011FB  |.  A1 DC304000  mov    eax, dword ptr [<&msvcrt.__set_a>
: w  K: y/ {% w0 N- J4 [; A  ^00401200  |.  FFD0          call    eax                              ;  <&msvcrt.__set_app_type>
/ X% r" w2 v- d00401202  |.  E8 79FFFFFF  call    00401180 . h" I# v' Y/ L4 I4 S
00401207  |.  C9            leave 7 f* o" n, ~; p: Y
00401208  \\.  C3            retn / t+ h6 i& I7 Z5 \
00401209      00            db      00
$ O5 T/ e* e5 X0040120A      00            db      00 & Q' l! ?- Q% n. e5 Y
0040120B      00            db      00 9 b  m* p7 w5 H
0040120C      00            db      00
8 j3 b( h! r; {) l9 ~0040120D      00            db      00
. n, m  z3 f8 ~& D1 ]& ~' L2 N- g0040120E      00            db      00
: r8 v, `3 @; s( q0 n' L" D' P0040120F      00            db      00
. G* o  ]) \" x$ q: R' C- G, i& ?00401210      72            db      72                              ;  CHAR 'r' % ?5 n  ]- r8 U5 ^, I4 w5 a! y
00401211      00            db      00 ; P2 v6 c1 h! ?1 t
00401212  .  69 6E 70 75 7>ascii  "input.txt",0
& ~- m) O$ M0 E# h6 w0040121C  .  43 61 6E 27 7>ascii  "Can't Find input"
' J* `1 G8 `" E1 }) M0040122C  .  2E 74 78 74 2>ascii  ".txt!",0   H+ Y: Q4 H1 b# k
00401232      77            db      77                              ;  CHAR 'w'
7 p# n* e' ?# @00401233      00            db      00
+ d7 p: B% s2 r% A2 y% P. i4 C$ o00401234  .  6F 75 74 70 7>ascii  "output.txt",0 - M& [# z2 c4 A/ B, G- O
0040123F  .  43 61 6E 27 7>ascii  "Can't Create out"
/ f' w- J* \% E0040124F  .  70 75 74 2E 7>ascii  "put.txt!",0 8 [" C. a; V$ h  X
00401258  .  6F 6E 65 20 6>ascii  "one char outpute"
4 ^8 F6 q; d8 w' a' Q. }00401268  .  64 0A 00      ascii  "d 4 l. D; z3 P- v
",0 " k, {' e& p( i! S9 e
0040126B      90            nop
, q6 e1 {4 f3 h' I( F0040126C  /$  55            push    ebp 1 \9 q5 k- M" D( @1 J
0040126D  |.  89E5          mov    ebp, esp . A/ \1 S  @; n# Z( t6 V2 d( n
0040126F  |.  83EC 18      sub    esp, 18
! r1 M4 W6 h6 V; P2 F1 t00401272  |.  E8 39010000  call    004013B0 ( W" {2 ^9 ]* {# v( u
00401277  |.  83C4 F8      add    esp, -8 ' t1 k$ s4 J+ [; i6 r: c# w- c% V
0040127A  |.  68 10124000  push    00401210                        ; /mode = "r"
: |/ I* o- O8 x# h! f  d0040127F  |.  68 12124000  push    00401212                        ; |path = "input.txt" 6 U6 F# N  R, S4 I( ]0 l. g
00401284  |.  E8 AF010000  call    <jmp.&msvcrt.fopen>              ; \\fopen
- _. [8 o5 ~  D# R" T00401289  |.  83C4 10      add    esp, 10
$ N! J1 G1 L. F+ G0040128C  |.  89C0          mov    eax, eax
/ @& _* G! p; V( g0040128E  |.  8945 FC      mov    dword ptr [ebp-4], eax
4 @# b  q* `3 _( p# d% Z3 g00401291  |.  837D FC 00    cmp    dword ptr [ebp-4], 0 ; O' }9 C# w6 g5 u! p
00401295  |.  75 10        jnz    short 004012A7
6 j, w3 j, K0 l) O; i  s00401297  |.  83C4 F4      add    esp, -0C 8 P2 j( J' {% k1 K" M' g
0040129A  |.  68 1C124000  push    0040121C                        ; /format = "Can't Find input.txt!"
: P% L& ?) U- M  B  R( \0040129F  |.  E8 8C010000  call    <jmp.&msvcrt.printf>            ; \\printf % L! \( D& J' @5 J" x
004012A4  |.  83C4 10      add    esp, 10
; a7 T" }/ V/ m- a( R- i004012A7  |>  83C4 F8      add    esp, -8
9 Q! \! _; G5 o5 j004012AA  |.  68 32124000  push    00401232                        ; /mode = "w" 0 q% C# e0 ^: M' [" E8 J" x
004012AF  |.  68 34124000  push    00401234                        ; |path = "output.txt"
$ n5 }" W  {9 @004012B4  |.  E8 7F010000  call    <jmp.&msvcrt.fopen>              ; \\fopen " @9 p6 P; G* M
004012B9  |.  83C4 10      add    esp, 10
0 a( p- B2 c1 U004012BC  |.  89C0          mov    eax, eax
' Z; Y+ `2 f) r% D7 t004012BE  |.  8945 F8      mov    dword ptr [ebp-8], eax
9 Z/ W, ^0 J5 y5 [4 u004012C1  |.  837D F8 00    cmp    dword ptr [ebp-8], 0 5 l4 D. J& l. h. g; C: V
004012C5  |.  75 10        jnz    short 004012D7 + ~6 r6 M2 m9 F3 z
004012C7  |.  83C4 F4      add    esp, -0C
$ R# ~# s$ y. P004012CA  |.  68 3F124000  push    0040123F                        ; /format = "Can't Create output.txt!"
$ K4 u' R2 H& x  e# ^004012CF  |.  E8 5C010000  call    <jmp.&msvcrt.printf>            ; \\printf
* a  H  \0 \# U4 X1 h( k! O7 S004012D4  |.  83C4 10      add    esp, 10 ) c. n  v+ P7 M5 q+ R
004012D7  |>  83C4 F4      /add    esp, -0C
# O/ g$ i1 H8 E$ w  Q& _( {7 {004012DA  |.  8B45 FC      |mov    eax, dword ptr [ebp-4]
7 @5 P( Z" U& _5 _- n004012DD  |.  50            |push    eax                            ; /stream
# @* T. l8 p- j( o; m  ]: D1 f004012DE  |.  E8 45010000  |call    <jmp.&msvcrt.fgetc>            ; \\fgetc ; Y6 t. F: k3 g. L3 _( f/ n0 \
004012E3  |.  83C4 10      |add    esp, 10 5 ]: Y8 ?* o. J8 C
004012E6  |.  89C0          |mov    eax, eax ' y# Y, W/ x8 P/ e
004012E8  |.  8945 F4      |mov    dword ptr [ebp-C], eax " ?( U# W" t( v4 R5 s
004012EB  |.  817D F4 80000>|cmp    dword ptr [ebp-C], 80 8 H5 P- o+ O+ d* w
004012F2  |.  7F 23        |jg      short 00401317

2 i5 A: F% f- m* k004012F4  |.  83C4 F8      |add    esp, -8 8 Q8 b8 a' P9 n/ a
004012F7  |.  8B45 F8      |mov    eax, dword ptr [ebp-8]
9 q/ _. Y. U: [7 G/ O# @: x% @004012FA  |.  50            |push    eax                            ; /stream
1 Z7 Q7 P! v% H$ w7 t004012FB  |.  8B45 F4      |mov    eax, dword ptr [ebp-C]          ; |
' o7 Y) l9 s: G/ A1 |5 A  m004012FE  |.  50            |push    eax                            ; |c
- [2 w' G- r; ^& |; c; O* J( j" P004012FF  |.  E8 1C010000  |call    <jmp.&msvcrt.fputc>            ; \\fputc ) |2 D# S/ @6 a* y& a% N2 L' t# r
00401304  |.  83C4 10      |add    esp, 10
8 H0 {+ Y4 e2 c! M00401307  |.  83C4 F4      |add    esp, -0C
, v+ h7 \# `& |+ c6 A0040130A  |.  68 58124000  |push    00401258                        ; /format = "one char outputed",LF,"" 8 M3 d/ V" X- ^, A. _* G  S2 @# H
0040130F  |.  E8 1C010000  |call    <jmp.&msvcrt.printf>            ; \\printf
$ D, f! o3 ?+ v' d00401314  |.  83C4 10      |add    esp, 10
5 K% G- F) s( ]9 ]  l00401317  |>  837D F4 FF    |cmp    dword ptr [ebp-C], -1
, p7 ^4 Z# Z! F  A* Z' `6 v0040131B  |.  75 03        |jnz    short 00401320
" |) a) O; B4 O* b0 @; [/ `0040131D  |.  EB 03        |jmp    short 00401322 0 C# ^$ z, k7 i" d% \2 ]
0040131F  |  90            |nop , N" _6 I6 X$ u$ s' N, |
00401320  |>^ EB B5        \\jmp    short 004012D7
8 t' \) |$ v9 m0 S1 ^3 P00401322  |>  C9            leave 9 F8 v) Z9 T8 R7 |6 V( b
00401323  \\.  C3            retn
9 m: a/ t% {. e( T9 K% s# G: L00401324      00            db      00 3 K  g" A( {/ t% M/ Y
00401325      00            db      00
( e; s2 q# [# G7 L- l# g$ P00401326      00            db      00 ' D( o; e2 Z2 y! k/ z& a, A
00401327      00            db      00
; z& b8 A. A/ j" {00401328      00            db      00 2 Y- a5 d# J1 }6 b" i+ `2 C% d/ ^
00401329      00            db      00 ' P3 e  v+ k5 t2 g) U9 B, s! @8 n
0040132A      00            db      00 1 J/ N: X/ F* W3 w& w
0040132B      00            db      00
8 `0 `% `' n# [" I) E0040132C      00            db      00
- H  }7 r0 f( }2 p  e0040132D      00            db      00
/ l4 p: z5 x: e3 J0040132E      00            db      00 ; y9 T) {5 c7 @/ ]& h5 s7 d$ Z7 k% G
0040132F      00            db      00 2 Q8 V) E( H: J) \
00401330  /.  55            push    ebp
: P) i5 ?3 T1 }  @00401331  |.  89E5          mov    ebp, esp
# _* {* \2 }& q5 p2 E00401333  |.  83EC 08      sub    esp, 8 5 q! d6 i0 P! d
00401336  |.  A1 10204000  mov    eax, dword ptr [402010] ( g, S; J1 f6 \) e) t1 A
0040133B  |.  8338 00      cmp    dword ptr [eax], 0 8 K5 v0 ^% j3 g# Z9 `* V
0040133E  |.  74 1D        je      short 0040135D : K+ w0 X2 J8 q% _$ ]
00401340  |>  A1 10204000  /mov    eax, dword ptr [402010] * y. ]  I0 M% b6 p; l
00401345  |.  8B00          |mov    eax, dword ptr [eax] # P5 b8 U; g, _
00401347  |.  FFD0          |call    eax 5 u5 Z9 Z* f6 n! U+ z7 f
00401349  |.  A1 10204000  |mov    eax, dword ptr [402010] 6 I: _  M6 }5 A5 m+ P- v$ S+ B  O
0040134E  |.  8D50 04      |lea    edx, dword ptr [eax+4] . b- y8 ]" l* d! i- ?! u
00401351  |.  8915 10204000 |mov    dword ptr [402010], edx 7 j! u' P; b& t- C4 k; F) g$ G
00401357  |.  8378 04 00    |cmp    dword ptr [eax+4], 0 , h. L, e- f8 ]; T: M4 `
0040135B  |.^ 75 E3        \\jnz    short 00401340 # e/ x: @9 d1 s2 D- ?6 _
0040135D  |>  C9            leave 6 n) N  H$ I7 }
0040135E  \\.  C3            retn 5 U6 Q# V, W7 c  d0 d/ X( B
0040135F      90            nop * U  k5 t0 o# I" A' W# Q) Q
00401360  /$  55            push    ebp
( R- m- P4 i8 g0 S/ m; q00401361  |.  89E5          mov    ebp, esp + z+ c8 r: A& |7 g% _! B3 M' @
00401363  |.  83EC 14      sub    esp, 14 - n# x) U# E3 I( j1 u7 \/ u
00401366  |.  53            push    ebx # B8 I2 s% K8 i4 c. k7 p
00401367  |.  A1 58144000  mov    eax, dword ptr [401458]   k5 \7 z* U+ U3 U3 o3 s
0040136C  |.  83F8 FF      cmp    eax, -1 7 o4 e0 i. [) {$ h  o) u
0040136F  |.  75 19        jnz    short 0040138A + u$ V4 _8 `4 U0 S4 G
00401371  |.  31C0          xor    eax, eax 0 h: h8 z& `& U' n* [$ p& e! ^0 b9 s
00401373  |.  833D 5C144000>cmp    dword ptr [40145C], 0
) \9 U) t8 J( M( B6 r8 L9 p/ Z0040137A  |.  74 0E        je      short 0040138A , K& e+ @( G1 r* [0 U4 d2 A
0040137C  |.  BA 5C144000  mov    edx, 0040145C
  U& S' g; g+ X! {00401381  |>  83C2 04      /add    edx, 4 4 Q6 S! r: f3 a4 f, {
00401384  |.  40            |inc    eax   w2 o* f5 ]% t4 l0 `3 g) `+ w9 k
00401385  |.  833A 00      |cmp    dword ptr [edx], 0
( W; o2 B4 F4 n& u9 n' s# q00401388  |.^ 75 F7        \\jnz    short 00401381
' a% X0 }5 W1 |& K2 r, ^+ q: q0040138A  |>  89C3          mov    ebx, eax
/ A# f' p1 y7 _& p  m0040138C  |.  85DB          test    ebx, ebx ) Y4 P, }9 _: Y( S6 Q
0040138E  |.  74 0C        je      short 0040139C
6 c$ m! S& T# r% v8 H00401390  |>  8B049D 581440>/mov    eax, dword ptr [ebx*4+401458]
, m  T5 n' M" x. d" N00401397  |.  FFD0          |call    eax
: U  Y3 p+ e* [0 g* g! w' U00401399  |.  4B            |dec    ebx 1 [. {# @: l& U7 K
0040139A  |.^ 75 F4        \\jnz    short 00401390
" a) r$ l+ [0 K7 f; G( R1 R0040139C  |>  83C4 F4      add    esp, -0C . B* P* V( [' d
0040139F  |.  68 30134000  push    00401330                        ; /func = engoutpu.00401330
0 X& y# a1 B+ Q. u1 B* U( @004013A4  |.  E8 97000000  call    <jmp.&msvcrt.atexit>            ; \\atexit
3 |' J7 ~( [! B3 e6 I004013A9  |.  8B5D E8      mov    ebx, dword ptr [ebp-18]
7 h4 O# B% w3 ]1 i004013AC  |.  C9            leave ; z9 m2 g7 f6 K. r! R; L% a
004013AD  \\.  C3            retn 9 H$ u0 ?" c1 I2 n5 H. b) V$ A
004013AE      89F6          mov    esi, esi 9 R+ {! H: ~4 v& p* `5 k
004013B0  /$  55            push    ebp 6 Q+ j" M9 \0 u: M
004013B1  |.  89E5          mov    ebp, esp / ~8 K0 Z4 f; l& h5 }9 a" o
004013B3  |.  83EC 08      sub    esp, 8 4 |" d: q. r9 w5 |# i5 Y
004013B6  |.  833D 14204000>cmp    dword ptr [402014], 0
0 R- F4 G5 w$ S1 X004013BD  |.  75 0F        jnz    short 004013CE
3 P$ n7 Q3 P8 K' N: b: x004013BF  |.  C705 14204000>mov    dword ptr [402014], 1
0 J+ c# F5 R0 k: B; a4 S7 O* u004013C9  |.  E8 92FFFFFF  call    00401360
( I' i$ a# l9 k! `! h& Z004013CE  |>  C9            leave
; Z6 @: o1 X) k1 n004013CF  \\.  C3            retn
; Q0 r7 Z) }5 ~* V7 L004013D0  .- FF25 AC304000 jmp    dword ptr [<&msvcrt._fmode>]    ;  msvcrt._fmode
* w3 I9 X3 k# `% f( ]+ `. @' y004013D6      90            nop
% ]8 b: z& }4 K( X: |( {- }2 G/ b: `) d004013D7      90            nop
2 Z0 A+ a; b' Z; Y004013D8  .- FF25 B4304000 jmp    dword ptr [<&msvcrt._iob>]      ;  msvcrt._iob ; \" k* z' x, D/ |  {/ w$ ]+ s; C
004013DE      90            nop 9 i0 e5 [: @% V2 c" G
004013DF      90            nop 3 F: t2 R, P4 I- i$ H8 U
004013E0  .- FF25 DC304000 jmp    dword ptr [<&msvcrt.__set_app_ty>;  msvcrt.__set_app_type / @. f0 L. x5 Y$ o  {+ G! b
004013E6      90            nop ; D3 T8 t2 Y: ~% O7 H/ S
004013E7      90            nop
6 [- D  A' `7 o7 H3 m, O1 {6 e004013E8  $- FF25 A4304000 jmp    dword ptr [<&msvcrt._cexit>]    ;  msvcrt._cexit 7 ^- x; X7 {6 w' _+ X
004013EE      90            nop ) k3 \+ x: x$ e4 j* [/ B* s
004013EF      90            nop # ]8 V0 s; E% {! c' ?8 q0 K5 f
004013F0  $- FF25 D0304000 jmp    dword ptr [<&msvcrt.__p__environ>;  msvcrt.__p__environ
. |* s# I7 F8 r004013F6      90            nop $ t, N: k/ c5 s3 P% i
004013F7      90            nop 1 Q: l7 s( V$ M9 m. @- N  Y
004013F8  $- FF25 B0304000 jmp    dword ptr [<&msvcrt._fpreset>]  ;  msvcrt._fpreset
; G$ q, `+ R8 s2 c004013FE      90            nop ( A# V& j4 u# {$ z' ^
004013FF      90            nop
( o/ @( Q2 Z6 D- [- p: n# X00401400  $- FF25 D8304000 jmp    dword ptr [<&msvcrt.signal>]    ;  msvcrt.signal : j, z' A$ f$ O  e: F8 P
00401406      90            nop / U, P- T& s5 U
00401407      90            nop
8 u+ x* O( A2 y2 E. q; r00401408  $- FF25 A8304000 jmp    dword ptr [<&msvcrt._fileno>]    ;  msvcrt._fileno 1 j6 n3 k" \0 i" |' k
0040140E      90            nop
3 D% U0 b7 V: q  C, x0040140F      90            nop 4 B5 G0 V7 M/ `  E+ r" Q* ?" o
00401410  $- FF25 B8304000 jmp    dword ptr [<&msvcrt._setmode>]  ;  msvcrt._setmode + L: |* O% u- _+ W/ Z# c: P
00401416      90            nop
; N( }2 s2 G. ?0 [/ l2 E) H+ s00401417      90            nop / S, w4 P4 }( ]
00401418  $- FF25 BC304000 jmp    dword ptr [<&msvcrt.__getmainarg>;  msvcrt.__getmainargs
. ^% B) P. }2 }" e# N- L0040141E      90            nop
, r# L2 {. \4 o/ ]0040141F      90            nop
; _$ S0 |5 Y$ P4 N00401420  $- FF25 CC304000 jmp    dword ptr [<&msvcrt.fputc>]      ;  msvcrt.putc 0 d2 M, m: n( H9 o% Q8 h
00401426      90            nop
# b: w& B+ q+ Y' J' J00401427      90            nop ! P: s# @5 S. Y5 ^. i8 }
00401428  $- FF25 C4304000 jmp    dword ptr [<&msvcrt.fgetc>]      ;  msvcrt.getc
0 V. `' S; p- e2 K. h2 J7 I; T0040142E      90            nop 3 d' ~4 f- b- a9 y1 M" d( K% W  o
0040142F      90            nop
: X8 |$ N3 ~- v# o00401430  $- FF25 D4304000 jmp    dword ptr [<&msvcrt.printf>]    ;  msvcrt.printf
% k5 c0 t4 Z9 L0 X9 ~6 b00401436      90            nop
5 `0 B) m* {2 P+ |00401437      90            nop
) e( b# v0 B2 W* p! q00401438  $- FF25 C8304000 jmp    dword ptr [<&msvcrt.fopen>]      ;  msvcrt.fopen 3 d% [- I1 w4 N# ]/ h
0040143E      90            nop 2 V5 ~/ G! k5 D* y
0040143F      90            nop & l9 V$ A+ [7 v2 T3 t4 ]6 K* ^; V
00401440  $- FF25 C0304000 jmp    dword ptr [<&msvcrt.atexit>]    ;  msvcrt.atexit
7 P+ [3 D6 x/ {" i* m/ h- t& R00401446      90            nop
' o' O3 x/ c1 y. P. G00401447      90            nop   ^8 t: M; C5 h$ b# F8 v& w
00401448  $- FF25 98304000 jmp    dword ptr [<&KERNEL32.SetUnhandl>;  kernel32.SetUnhandledExceptionFilter ) O% [6 C" i1 w+ P
0040144E      90            nop
* S' S! M6 \2 s% U. K9 C) F0040144F      90            nop / k, ?, Q3 y2 m0 K, @; M: N! z
00401450  .- FF25 94304000 jmp    dword ptr [<&KERNEL32.ExitProces>;  kernel32.ExitProcess
) t. U5 k# t! s7 [& W5 t00401456      90            nop # R) Z  }* N  n5 L) Q# b6 d# }6 l
00401457      90            nop 1 v& k' B- F, e7 `% Q
00401458  .  FFFFFFFF      dd      FFFFFFFF
. Z; z/ f# G( t9 k) J0 b( ]0040145C  .  00000000      dd      00000000 0 w, e9 [3 o0 z
00401460      FF            db      FF " m( s; |( X2 H5 ]5 S6 ~7 X2 I6 ?
00401461      FF            db      FF ; M- ~9 S& D3 l$ ?* W: K
00401462      FF            db      FF
) x6 e% ^5 l2 K* o4 R00401463      FF            db      FF & N! W6 m  }) Y% }! W' C* B( i
00401464      00            db      00 / |5 ?, W. O3 h% j: Y; h
00401465      00            db      00
# V* O3 B$ m5 p' j: C. x00401466      00            db      00
" d; P+ J' c5 b9 p/ I0 S& e00401467      00            db      00

本帖子中包含更多资源

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

x
回复 支持 反对

使用道具 举报

6#
 楼主| 发表于 2009-10-10 22:14 | 只看该作者
在游戏里面,也可以用相同的修改方法,但是由于代码很多,难点在于找到这个比较点。
8 G. Y, f) p3 j1 }: i" v7 `深绿,你能否把C程序再修改一下,用其他的方法编制出同样功能的程序?
- R& w1 Q6 j1 \; b, V2 f/ U比如不用fgetc这个标准c函数,而用mfc的类似函数来编。, o% F# f1 X, t, x" v: t+ X, ]+ r
让我们看看生成的汇编代码有什么区别。- |, p0 u: x& k. v0 V. X) h2 u) N- |
你也可以试着修改一下。
回复 支持 反对

使用道具 举报

7#
发表于 2009-10-12 11:51 | 只看该作者
MFC是C++的类库吧,我不是很熟悉
+ w2 |! ?  B. S- N9 s  C  S7 j+ h- ^+ E: Y8 x8 @9 |
说说我对单字节内核的看法:
8 a! d9 n7 `$ L+ _+ x
' n% g1 L6 A3 w1 W: H; K我感觉这个程序并不能很好地模拟单字节内核,因为这个程序只是过滤了一些字符,8 V1 V  y  T  v: y1 A  z
然后将剩余的输出到一个文件里。而游戏的内核,很有可能是在输出到屏幕的时候进行的过滤。
6 k& u$ c1 s- b
5 r% d% w' I( x$ \' n9 E" h. T( y- r/ g举个例子:当我们用记事本打开txt看到中文的时候,是记事本将中文打印到屏幕,而如果这不是记事本,是单字节的内核
1 y( o6 P& q: ^: b" A/ g. m& \就很有可能无法显示中文,尽管那些中文数据都存在。
8 J9 U, M, l- T9 m$ i0 d. r5 b! G8 g  F
( k2 _# z0 e5 }1 x7 q" x. J所以,上面删掉那两行的行为其实没有什么意义,就相当于在源代码中,把判断<0x80的语句删掉,就相当于直接把input.txt的东西完全复制到output.txt里,并没有真正体现单字节内核的意义。因为真正需要考量的输出环节,是在打开记事本,把这些文字输出到屏幕上的过程。
7 W' x7 n& Q7 s9 D& k
2 P8 U3 C/ c8 H( |5 K因此我很怀疑,游戏是否会用这种(<0x80)过滤方式。- q) q+ u6 T5 G$ \. M7 F/ [

/ W  s6 ^- Z, Y* X; Q/ ~中文的显示方式是读取2字节—>获得区位码—>在字库中读取数据—>显示汉字。9 [5 i$ b  k; e) q" \

" q0 o2 J' u  L0 n9 q$ f( e% o5 i' v7 C那么英文的应该类似,读取一个字节——获得编码——在字库中读取数据——显示文字
% \6 A  I$ t3 l5 D* E1 S$ f7 w8 F+ C2 l/ z6 Q* s1 o0 e
那么当它读取进中文字节时,很有可能是获得的编码在字库中找不到数据,所以自动过滤了。+ T3 t  I/ ?6 T' k" J- e' _: n
) O& S: E1 m8 L$ a+ [" F% {! q
就我所知,很多内核不支持双字节是因为它不会在读到大于0x80的字节时多读1个字节,而并非直接过滤掉大于0x80的字节
回复 支持 反对

使用道具 举报

8#
 楼主| 发表于 2009-10-12 13:09 | 只看该作者
其实,单字节内核一般有2种情况。
6 y9 B2 J$ g2 f/ k: H3 ~* h( y+ s1. 对大于0x80的字节不做任何处理,输出到画面就是一个中文字符会变为2个字符
. B& t  v! D6 C5 _" |4 {2. 跳过大于0x80的字节,读取后一个字节,输出到画面就是中文字符被过滤了' }) l' ?5 ^" Q8 [: j. z

' `+ Z% Y# r/ B5 Q真正的游戏应该会用这2种方式中的一种来处理。
/ O. V( b" A2 }  I这个单字节内核模拟程序其实只模拟了2的情况。
) r4 g/ P# Y6 Q# _- s% ?要模拟1的话就要制作一个图形程序了。
5 u) M9 R, E# u" M9 s2 U! Q- O
  u9 z2 G+ f1 M( D2 Q$ l这个单字节内核模拟程序本身的意义其实不大。
# c) Z" E+ F) q. k其实我是想开始更多地在汇编层次上研究汉化,当作是抛砖引玉吧。
回复 支持 反对

使用道具 举报

9#
发表于 2009-10-12 15:34 | 只看该作者
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。
( @% |3 c9 i! \- Q0 D5 ?' C: H5 G所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。) T( p6 F% o) Q& k) j0 f6 S
这样的理解对不?
回复 支持 反对

使用道具 举报

10#
 楼主| 发表于 2009-10-12 16:44 | 只看该作者
引用第8楼深绿于2009-10-12 15:34发表的  :3 H4 J" J1 v% V- A! G- h
这样看来,对这两种类型的改造方式是一样的,都是让程序在碰到大于0x80的字节时两个两个读取。4 z) G8 M. x( F* }
所不同的是后者由于要做这么个比较的处理,所以更方便我们定位到需要更改的位置。. L7 Z8 |. K5 f( U3 j/ s9 L( a
这样的理解对不?
; ]9 ^. m% C3 f+ P
理解完全正确。
! b) _7 b3 x+ y7 Y6 j) Z/ V3 A不过,就是简单的和0x80来比较,汇编代码也会有多种形式,不如test,cmp 等等,而且程序里还会有其他和0x80比较的地方,要找到关键的比较点,非常不容易。
' L: ]9 Q' T, {; ^- ?7 b  m) \9 L1 ]$ Z' I' Y
有一个笨办法,查找2进制码80。如果汇编代码是test,cmp等于语句,那么就有可能是比较点。$ Y+ _8 |8 H& N" w1 @/ v0 Q
然后逐个nop测试,看有什么变化。" H' ]+ h" }2 U! I
* n. U: e. k) R0 n3 p1 b
你可以参考一下这篇帖子* N+ x1 z/ d8 q
游戏汉化中的双字节问题处理原理: }5 a! L- w! b+ I" f- N
https://www.chinaavg.com/read.php?tid=18709
8 x. ~9 q& ~* v/ _5 q. ^$ F& {作者好像是左贤王主力人员。
回复 支持 反对

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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