没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。
没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。
) g- {/ j$ o" e1 L6 d妖城在线论坛使用软件IDA,FlexHEX。参考工具AsmFun(汇编指令查询器)Fun_1.2,asm2Shellcode等。
+ R* o$ L$ @5 `; ]7 Mbbs.mocwww.com魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 x1 V8 X! e6 p, H M
用IDA载入gmsv,分析完成后进入Exports选项卡。 bbs.mocwww.com6 j- l( H; K- a- @) s. y
搜索levelexp找到一个名为CHAR_GetLevelExp的子程序。
& c! x; U- R- n" a2 [0 p6 r0 e) Zbbs.mocwww.com.text:08074098 public CHAR_GetLevelExp bbs.mocwww.com8 P0 A' l- R. Y# Q7 C% W
.text:08074098 CHAR_GetLevelExp: 魔力私服,最新魔力宝贝私服技术交流- v" |; |' m+ G+ h) w, `
.text:08074098 push ebp
' t, c% v2 [/ v7 l8 r6 g魔力私服,最新魔力宝贝私服技术交流.text:08074099 mov ebp, esp 魔力私服,最新魔力宝贝私服技术交流. a' Z6 G# @6 s
.text:0807409B mov edx, [ebp+8]
1 E5 O; Z; i. W4 P魔力私服,最新魔力宝贝私服技术交流.text:0807409E cmp edx, 7Eh 妖城在线论坛- v, I6 R5 i4 H. ?4 n
.text:080740A1 jbe short loc_80740C0
( a2 Z( b9 P! Z: V.text:080740A3 push ecx bbs.mocwww.com7 \4 H& @( f; w' r& d- Q( q! A+ Y. T
.text:080740A4 mov ecx, 7 魔力私服,最新魔力宝贝私服技术交流+ V: l% t/ r; ]- d- ^ }! |
.text:080740A9 push edx
' U9 ?: I" O% X0 s# @$ x+ ^+ Mbbs.mocwww.com.text:080740AA mov eax, edx
3 `8 a2 T' K5 k# h妖城在线论坛.text:080740AC imul eax, edx
6 b2 @, b$ b5 j# h2 J% j( C妖城在线论坛.text:080740AF imul eax, edx
! H" ~3 Y+ P4 E( b/ Z$ N魔力私服,最新魔力宝贝私服技术交流.text:080740B2 imul eax, ecx m/ l+ p5 R) |# w3 Z2 ?6 d+ X
.text:080740B6 loc_80740B6:
& g2 o- u$ ]3 _3 ?bbs.mocwww.com.text:080740BE leave # p* ?# L. \9 G+ b( q. z' v
.text:080740BF retn
1 A" ]" s/ n: O( g. z1 ^7 ~* N' m: r0 H2 _魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740C0 loc_80740C0: bbs.mocwww.com4 w! Y$ d5 B b) @
.text:080740C0 mov eax, dword ptr LevelUpTbl[edx*4] bbs.mocwww.com! R* M; J' p( w/ n. G+ |) N
.text:080740C7 jmp short loc_80740B6
+ o' K0 Q' E- J, g6 L+ I1 H, B6 t妖城在线论坛
% y; O9 E2 K4 m7 f. v粗糙的解释下这段代码的意思 bbs.mocwww.com8 E/ {- P' `' P# b. \& a9 `
9 w4 ?2 n/ S2 N- z2 {) Z& ]. l3 L; k
Push edp
. e D1 F: N! Q9 c妖城在线论坛Mov ebp,esp
* ~; Y& P: z- P; d; O" T$ c4 k—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートMov edx,[ebp+8] : o. ?2 }% W/ c0 ~8 x) k7 B
获取当前等级的下一级存到edx bbs.mocwww.com0 x, `6 D& ]! v$ W2 H# ^
bbs.mocwww.com1 Y5 |% C$ n; ?: ]9 }0 K4 [
Cmp edx,7eh
- F. N, B4 ~% w9 o2 Q8 ?3 \bbs.mocwww.com将edx与7eh也就是10进制数130比较 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 o# U' i' K+ v2 y: u; N# P
G. K& n3 c% z* h5 T* T—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートJbe shortloc_80740C0
' g* K' Y" ^7 x妖城在线论坛如果edx小于7eh则进行跳转到80740C0 妖城在线论坛* d& {0 N; z a7 t/ y* D7 P
魔力私服,最新魔力宝贝私服技术交流4 ^9 [, X- X" S' B2 D
Push ecx
5 m$ c) F6 o/ T' Z—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートMov ecx,7
9 E7 L: W% h" m; Z' I" [魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表给ecx赋值7
" w! g) S+ w- k, x. G魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
+ f9 p5 i% E$ p7 F7 w妖城在线论坛Push edx
" ~4 ~: Z9 l; y妖城在线论坛Mov eax,edx bbs.mocwww.com) n5 M( R1 ^& s, J1 ^% {
把当前等级+1的值给eax
5 Q# E, i2 k4 _/ h/ I) f妖城在线论坛4 N0 [! \& q; y
Imul eax,edx
- f; a9 E: ?4 a: d( s- J) E把eax与edx相乘,结果存在eax
) W7 g* p0 b2 \' b% @1 j妖城在线论坛—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. K7 e1 C- c: r- s; s
Imul eax,ecx
9 U7 p. l9 O6 o% I$ u A妖城在线论坛把eax与ecx相乘,结果存在eax
; ]$ R2 q4 [7 G S4 u! \bbs.mocwww.com
1 f h- ?- [: f+ oLeave 5 E/ @0 w+ @+ V- J1 y+ }% ~, c* k
Retn
9 {! b! H; _- o% x妖城在线论坛退出这个过程吧,大概
& \4 [, G0 y$ M妖城在线论坛
- M! y5 V# @" n2 I1 S0 v* T: z妖城在线论坛Mov eax,dwordptrLevelUPtbl[edx*4] 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表% k% y& E6 o/ V% p' m/ V' @
这里是读取经验表的内容给eax,也就是查表读经验 bbs.mocwww.com8 r+ U& i, [4 O0 D( J4 j2 E
' J' j0 p7 W9 a* z
jmp short loc_80740B6
' C: d; P* s4 U- b9 |- }* u魔力私服,最新魔力宝贝私服技术交流强制跳转到80740B6
: M7 ^( ?) _* u) ]—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート魔力私服,最新魔力宝贝私服技术交流! f: m# s3 y% k" L9 S4 @
好了,这段代码就这点意思,逻辑上不难理解。 魔力私服,最新魔力宝贝私服技术交流3 s4 u, i" H6 D) V# F* B
虽然刚开始的时候我也是一头雾水,但是不要紧,随着一步步地摸索自然就会理解了。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート( O# o. Y# D, b8 }: w9 a
! k' f( s# R% t, c8 M/ k+ n
分析完了之后开始修改了,上面的代码具体作用如下: —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 P. x' g. A8 {5 ^& w
判断等级下一级是否小于7eh,是则跳转到查表。 ( N: B# \+ _0 B3 T
否的话也就是大于7eh时,按照下面算法运算 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 t8 g1 k( z: I* V
.text:080740A3 push ecx 魔力私服,最新魔力宝贝私服技术交流" _# g1 Z, G5 M- t$ P! c
.text:080740A4 mov ecx, 7 ! ~# M. N0 ^' U# _4 f) e+ x
.text:080740A9 push edx
3 k n# g! E$ c/ J$ R$ {( d' q. e.text:080740AA mov eax, edx
, o8 ~7 w O5 z( xbbs.mocwww.com.text:080740AC imul eax, edx 魔力私服,最新魔力宝贝私服技术交流6 H- W6 a( q5 ~7 z3 X7 A; ?! h
.text:080740AF imul eax, edx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート1 Y( m) d$ a. m
.text:080740B2 imul eax, ecx
5 y" q, t. r# [3 r, t, @0 c# G7 o妖城在线论坛也就是eax的三次方乘以ecx,这里可以改成我想要的。
! x4 N1 E* S& X) d/ @0 g: n魔力私服,最新魔力宝贝私服技术交流—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. ?& H% s4 p4 e/ E) m2 v
我的目标是改称等级的四次方除以50,但是问题来了。
# ^) F3 `4 |: Z9 d2 j( a魔力私服,最新魔力宝贝私服技术交流怎么做除法,怎么写代码到反汇编里,一步步来,先列出想要的代码。
! J. D. {, |/ O" B, r! ^妖城在线论坛—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 r8 C0 z& q7 O5 U( w0 O/ ~
.text:08074098 public CHAR_GetLevelExp / W( Q% T. B0 h
.text:08074098 CHAR_GetLevelExp:
( G- L0 l0 D6 O6 G—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:08074098
0 |9 L' s. R! ]& M x) b& V妖城在线论坛.text:08074098 push ebp
; D# L6 h4 L% u! x; q1 n.text:08074099 mov ebp, esp —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート: Y+ W z8 j4 ~3 e
.text:0807409B mov edx, [ebp+8]
' J& \6 [1 S0 i+ ]1 L' i魔力私服,最新魔力宝贝私服技术交流.text:0807409E cmp edx, 0FFh 魔力私服,最新魔力宝贝私服技术交流- }; ~- B6 E L; E7 F# y" @1 a
.text:080740A4 jg short loc_80740C0
* a2 w) R2 y( k2 |, F9 B+ @* |.text:080740A6 push ecx
( K& v2 ~) G8 j$ E% I' @+ o- y魔力私服,最新魔力宝贝私服技术交流.text:080740A7 mov ecx, 32h ( R# ~5 [& m* \
.text:080740AC push edx
2 T( n$ s' n, t# k/ M# f魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740AD mov eax, edx
) L5 F$ s; ?2 F4 M—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740AF imul eax, edx 妖城在线论坛7 }/ q# Y) j0 c
.text:080740B2 imul eax, edx
+ @7 d1 R) M+ A7 I—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740B5 cdq / k, F7 Q" b: M1 T5 f" O
.text:080740B6 idiv ecx
4 _* f! R3 Y: z魔力私服,最新魔力宝贝私服技术交流.text:080740B8 mov edx, [ebp+8] 妖城在线论坛$ G. p6 C+ s8 n& D( D6 \8 ~0 D
.text:080740BB imul eax, edx & t, W- E4 f" I. F0 ]
.text:080740BE 1 v3 b9 i9 l3 R& b+ u7 X
.text:080740BE locret_80740BE: 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表- R0 ~% J+ {8 V, u- g7 ^5 K
.text:080740BE leave bbs.mocwww.com4 f# n" |9 N7 ? L" ]0 \
.text:080740BF retn
+ f/ b, h8 q% G# {. \2 D魔力私服,最新魔力宝贝私服技术交流.text:080740C0 loc_80740C0: 妖城在线论坛; i* o$ w5 m; H2 A
.text:080740C0 mov eax, 0FFFFFFFFh 魔力私服,最新魔力宝贝私服技术交流* m9 B" \+ A; y7 z
.text:080740C5 jmp short locret_80740BE
5 U3 ]; g1 n5 x+ @& d+ r' xbbs.mocwww.com
. z8 A1 t+ z/ r# k$ J: C2 j方便起见这里直接把我改好的代码贴出来,与原来不同的地方:
# P8 b0 ~& T( w% y" r( B8 h' k魔力私服,最新魔力宝贝私服技术交流Cmp edx,0FFh 魔力私服,最新魔力宝贝私服技术交流4 J$ w8 r- n7 q+ Z
Jg shortloc_8074C0
: w9 J x2 U0 Z; S1 }# [. J妖城在线论坛判断等级是否大于255是的话跳转80740C0 $ N- l* s6 ~0 Z( j
否的话进入我们的等级公式:
: W" \$ R& w2 {$ S# ~bbs.mocwww.com(等级*等级*等级除以50)*等级
3 x& m* F) @# ?( i5 F) W; ^也就是等级三次方除以50再乘以等级
( }6 F# v7 c" a0 a/ j; l妖城在线论坛为什么要这么做而不是直接四次方乘以50是因为防止溢出数据。 bbs.mocwww.com) T! Q2 d% X( r
216的四次方是2176782336,这个数字正好可以让下级经验变负,呵呵。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表3 j( Z7 e- L" M8 c5 x5 c! Y1 E" x% \
所以先除50再乘到第四次方的时候就不会变负了,这是我摸索了很久突然领悟的真理。 妖城在线论坛7 X* A' ?6 ` p1 a/ ^9 u3 F
魔力私服,最新魔力宝贝私服技术交流 y, h8 |! E1 H4 M
接下去做公式: & H: ?5 G1 d/ s+ P& x* P
Push ecx,32h 这里是经验倍率,就是公服经验除以ecx等于你的经验 妖城在线论坛5 h) k9 m4 n+ L( z
Mov eax,edx 将下一等级的值赋值给eax
' l4 ^- D3 `3 D2 u# ^—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートImul eax,edx 将eax,edx相乘,结果存到eax
$ b6 X0 ?! k5 `2 K9 x魔力私服,最新魔力宝贝私服技术交流Imul eax,edx 同上 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表1 U$ H# T& j5 [) z) b- f
Cdq 这个做除法不加就会出错,用户登录后服务器当机
: _- S( \6 M7 ?6 m2 O+ x, q9 t魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Idiv ecx eax除以32h算到50倍经验 妖城在线论坛" y L; K9 Z+ _& X7 n3 R* N
Mov edx,[ebp+8] 从新获取下一等级的值
2 @. V. M. e3 w—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートImul eax,edx 将eax,edx相乘,结果存到eax
: f! `1 e0 l" M妖城在线论坛! v6 f7 A- q5 o- I% a/ X* F
好了,这样就完成了运算过程。 妖城在线论坛7 u5 e) K1 o4 `" e3 `& Y" V
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. z9 L1 M, D! B+ N2 t W
.text:080740C0 loc_80740C0: bbs.mocwww.com, O$ [2 ]7 I, m3 [$ k
mov eax, 0FFFFFFFFh
! \2 J3 f; Z% ]6 h. s. I: A, T+ o—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートjmp short locret_80740BE
! m |0 A/ n( t% }$ ~妖城在线论坛这一段代码就是等级超过你设置的上限之后返回-1。 ) \4 z# B; Q1 L! V# Z& ?2 D
m3 D& U X( b& Q3 {魔力私服,最新魔力宝贝私服技术交流
" w( }8 t) ^& X( H& n) xbbs.mocwww.com下面有个很严重的问题,新手比较难适应的就是如何写入你的代码。 9 ]' C8 K3 u6 J5 e
这里就要用到FlexHex了。 0 c% X/ a# ]2 S M6 X5 K& ^& a0 c2 `
' r. r% S8 ?9 p—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート首先将我们的汇编代码转成机器码,这一步需要非常的耐心细致。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 E* M! R- U, T
如下对应:
E/ D) ], H$ E& y4 k# i' i# U! O—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートCmp edx,0ffh 81 FA FF 00 00 00 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; K' m) p p- T
jg short loc_80740C0 71 FA
0 ?( v. p! E5 x8 |: E2 z9 ?* _魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表mov ecx, 32h B9 32 00 00 00
" ]9 `3 N5 H2 L妖城在线论坛 K+ z, _( V @
依次类推,都可以在IDA中搜索到你要的代码然后做相应修改。
5 q* m+ G% H: G2 pbbs.mocwww.com这个挺有乐趣可以自己慢慢享受摸索。 bbs.mocwww.com, n9 M. T4 w7 b
bbs.mocwww.com9 v3 }( v8 h; H/ W: m* Q
以上是我通宵玩了20多小时的个人心得体会,谢谢网上一些老人们的教程给了我很多指引和启示。