没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。
没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。 魔力私服,最新魔力宝贝私服技术交流 ]5 i# T/ f6 a$ B4 n
使用软件IDA,FlexHEX。参考工具AsmFun(汇编指令查询器)Fun_1.2,asm2Shellcode等。
" _' ]/ s/ c3 E V% F5 [; d& V$ n妖城在线论坛
, O( F2 j8 ?& v) y7 n/ S; T妖城在线论坛用IDA载入gmsv,分析完成后进入Exports选项卡。 妖城在线论坛2 |6 O! J6 Q6 r- v) a) Z) \
搜索levelexp找到一个名为CHAR_GetLevelExp的子程序。
) M# q! l: K5 q0 ^妖城在线论坛.text:08074098 public CHAR_GetLevelExp
: w! e' @# A3 l* p2 k, `2 Kbbs.mocwww.com.text:08074098 CHAR_GetLevelExp:
& d, i j! A$ e* K# W) a妖城在线论坛.text:08074098 push ebp 妖城在线论坛5 S8 x* N/ x! h/ w& e6 M `& P
.text:08074099 mov ebp, esp
. w: Q( \7 E; W魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:0807409B mov edx, [ebp+8] 妖城在线论坛, b1 [+ R+ d3 I$ g
.text:0807409E cmp edx, 7Eh
# d& P4 h, ~' T& J/ s+ H.text:080740A1 jbe short loc_80740C0 妖城在线论坛% z) p& Y! x# `) B! _
.text:080740A3 push ecx 魔力私服,最新魔力宝贝私服技术交流8 I% |8 X' G4 ?8 _/ ]
.text:080740A4 mov ecx, 7 妖城在线论坛2 Q5 b6 ^* w9 V, U* F! I( z& C
.text:080740A9 push edx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート1 o( u0 m, c& W |' f9 q
.text:080740AA mov eax, edx 妖城在线论坛2 N7 z2 I: R7 V8 z9 {9 Y) P) N( T
.text:080740AC imul eax, edx
. c) z/ i+ t2 U# g—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740AF imul eax, edx
. B# D# `& B! B& W9 s0 |.text:080740B2 imul eax, ecx 妖城在线论坛! q; {- _$ k$ r& G+ m# Y+ R
.text:080740B6 loc_80740B6: bbs.mocwww.com M |, E9 c) F+ ?8 p& i
.text:080740BE leave
0 K# H( }! p, W) w) K" b; m魔力私服,最新魔力宝贝私服技术交流.text:080740BF retn
$ ?4 `3 H2 W1 I" j1 `魔力私服,最新魔力宝贝私服技术交流.text:080740C0 loc_80740C0:
+ U8 Z( |' B" U- x2 T1 P K, {魔力私服,最新魔力宝贝私服技术交流.text:080740C0 mov eax, dword ptr LevelUpTbl[edx*4] bbs.mocwww.com/ Z4 e3 a4 T; A
.text:080740C7 jmp short loc_80740B6 bbs.mocwww.com( e! G' }, I/ n) c2 j' m
7 U! s+ T J7 c9 N a* a, c妖城在线论坛粗糙的解释下这段代码的意思
* `. v( q" J Z- x魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 Q$ L) t5 m7 r, A( u1 F- B0 B
Push edp bbs.mocwww.com+ e) {( g# {1 h: N( g: K$ Y' j
Mov ebp,esp 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 i- R: b' b( z: u+ w# L9 `
Mov edx,[ebp+8]
# r) o. N3 U4 d' @) i魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表获取当前等级的下一级存到edx
' b3 A7 Q, p* Y4 M1 k& W魔力私服,最新魔力宝贝私服技术交流
+ ?/ v9 _6 G" H) d& f, l+ \5 OCmp edx,7eh 妖城在线论坛1 {/ N) |3 ?( \0 q: j7 g
将edx与7eh也就是10进制数130比较 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表2 D+ B$ s' ~" q
2 w; X) H' y( H0 u魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Jbe shortloc_80740C0 妖城在线论坛1 E: R0 \- e. \* l: M7 i2 i
如果edx小于7eh则进行跳转到80740C0 bbs.mocwww.com& v& [0 ~/ z+ Z) k/ ^
- W+ h8 |1 ?- w W7 v魔力私服,最新魔力宝贝私服技术交流Push ecx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート& u$ c. ?9 n3 B; `8 G! H2 S
Mov ecx,7 5 @1 z, U( U- F# r( p, k
给ecx赋值7
( Y* x, i% e' ^2 T# w5 E5 Ibbs.mocwww.com
( `) S4 O7 p) ]; m8 n1 I# Mbbs.mocwww.comPush edx 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 `& }, {/ S* J: M2 V+ K( T
Mov eax,edx bbs.mocwww.com0 Y( d; f! C# X+ s
把当前等级+1的值给eax
; h, }6 R: Y3 x3 A—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート* t0 l' v! G* }
Imul eax,edx
3 N( Q+ g( c( s, t% L$ u- t3 wbbs.mocwww.com把eax与edx相乘,结果存在eax bbs.mocwww.com7 O" C1 q M) i% i: T% t" x) X# s6 r! \
妖城在线论坛, S. E; S9 \* J+ ~8 k
Imul eax,ecx
( _4 ~9 I+ e; {& |把eax与ecx相乘,结果存在eax
- ?1 p V: _, f魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
6 s" q6 [# p" S) NLeave 魔力私服,最新魔力宝贝私服技术交流8 \5 M1 @( T. n4 ]
Retn
: ?9 w: Y4 \5 k! w退出这个过程吧,大概
$ x3 g: O% H$ P6 C. l- Z魔力私服,最新魔力宝贝私服技术交流
# k! E! ]6 t# G: f5 N—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートMov eax,dwordptrLevelUPtbl[edx*4] 妖城在线论坛+ o0 h1 y" o s
这里是读取经验表的内容给eax,也就是查表读经验 妖城在线论坛. J+ a9 j5 A6 d, c
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート" B/ h. M1 G- b/ B# N
jmp short loc_80740B6
9 i5 w2 B7 c( M$ b强制跳转到80740B6
/ s% j1 j9 W5 |: T/ ^* Y2 f魔力私服,最新魔力宝贝私服技术交流
+ N( h) f4 T# k2 Z4 H' C8 ]好了,这段代码就这点意思,逻辑上不难理解。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 y3 s$ ?4 l3 Z* M
虽然刚开始的时候我也是一头雾水,但是不要紧,随着一步步地摸索自然就会理解了。
2 n* O- C' t3 p+ G% D6 b5 Ubbs.mocwww.com
5 |4 J+ n, o, y分析完了之后开始修改了,上面的代码具体作用如下: 魔力私服,最新魔力宝贝私服技术交流6 p& d7 C+ [* d) B3 t! y
判断等级下一级是否小于7eh,是则跳转到查表。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表! j( F' U7 M9 Z7 p; l. I
否的话也就是大于7eh时,按照下面算法运算 妖城在线论坛) h o. T3 n4 l5 Q
.text:080740A3 push ecx
* x# {7 @0 Q- P/ k) `; `6 V3 m: z6 u—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740A4 mov ecx, 7 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート @, j$ n' ]/ c! Z) C L
.text:080740A9 push edx
! z: d& G- e* E0 z; R* @) xbbs.mocwww.com.text:080740AA mov eax, edx
4 D3 i" Z* J. Y+ _- a魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740AC imul eax, edx 魔力私服,最新魔力宝贝私服技术交流7 j# q b3 k( h' ^$ s# S) M$ [
.text:080740AF imul eax, edx
# C5 f1 U. Q- ^5 o—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740B2 imul eax, ecx bbs.mocwww.com: ] I4 ~3 e" k s
也就是eax的三次方乘以ecx,这里可以改成我想要的。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート1 B% M8 f1 X3 o
bbs.mocwww.com" i5 P' D0 H. Q, d* ?' J. {- z0 [! S
我的目标是改称等级的四次方除以50,但是问题来了。
, t- M0 B5 R, a怎么做除法,怎么写代码到反汇编里,一步步来,先列出想要的代码。 魔力私服,最新魔力宝贝私服技术交流3 \6 p2 \4 U$ T
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 g4 ?6 K& N/ o$ D7 o6 x
.text:08074098 public CHAR_GetLevelExp
0 X6 J; |- {& c9 u) K.text:08074098 CHAR_GetLevelExp: bbs.mocwww.com0 B: p7 \0 `6 }8 S
.text:08074098
) |# \) } [5 d9 y1 f魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:08074098 push ebp 4 U' c6 E7 M% }- `" H# a
.text:08074099 mov ebp, esp 魔力私服,最新魔力宝贝私服技术交流3 I: E/ N7 K; V6 @2 r: C5 u; f; f
.text:0807409B mov edx, [ebp+8]
" J" V; g6 |. ` ^bbs.mocwww.com.text:0807409E cmp edx, 0FFh 魔力私服,最新魔力宝贝私服技术交流1 A' c. F& t; B
.text:080740A4 jg short loc_80740C0
# W' t: R! J8 m& s- V" j魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740A6 push ecx 魔力私服,最新魔力宝贝私服技术交流8 m( m$ H- ?/ X
.text:080740A7 mov ecx, 32h 魔力私服,最新魔力宝贝私服技术交流- Q7 t/ R$ J7 j
.text:080740AC push edx bbs.mocwww.com: f* {# j5 o' v7 D
.text:080740AD mov eax, edx
! P s2 ?% F5 t. z魔力私服,最新魔力宝贝私服技术交流.text:080740AF imul eax, edx 妖城在线论坛: s9 n2 m# }" _, Y3 M
.text:080740B2 imul eax, edx bbs.mocwww.com# D9 R: V u; }
.text:080740B5 cdq 魔力私服,最新魔力宝贝私服技术交流8 S/ Q4 \" i& W: E$ o" a( H
.text:080740B6 idiv ecx
; K) V$ x$ i0 Y2 P0 ~.text:080740B8 mov edx, [ebp+8]
4 i# K- M2 i: R* n: c—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740BB imul eax, edx
7 g8 s: i& d+ L2 d7 d! K8 r( a: sbbs.mocwww.com.text:080740BE 魔力私服,最新魔力宝贝私服技术交流. E- b5 J7 F5 R& x
.text:080740BE locret_80740BE: / }! f2 ?: ?( u, H6 \- w& \
.text:080740BE leave
8 R( G0 W U) B- w, K3 m妖城在线论坛.text:080740BF retn
! {0 M+ a" U# W8 F魔力私服,最新魔力宝贝私服技术交流.text:080740C0 loc_80740C0:
7 ?4 m' F6 o! Z3 ~* c7 a# f—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740C0 mov eax, 0FFFFFFFFh 妖城在线论坛: s$ [0 r/ u. T; h0 M0 Y1 y. K
.text:080740C5 jmp short locret_80740BE 妖城在线论坛( Y* } Z8 w6 L, B
妖城在线论坛2 F6 x) m* y/ n3 z& r2 r
方便起见这里直接把我改好的代码贴出来,与原来不同的地方: bbs.mocwww.com/ m) @& |$ U$ m$ w* a: P3 d
Cmp edx,0FFh 魔力私服,最新魔力宝贝私服技术交流- p" E9 L$ u- w' M$ g1 c
Jg shortloc_8074C0
6 ]( V/ i; i3 u# h3 H l判断等级是否大于255是的话跳转80740C0
' a2 |3 w4 i* e$ B$ z: Mbbs.mocwww.com否的话进入我们的等级公式:
* K/ ?0 n$ ]. I) G) O& R0 b% c魔力私服,最新魔力宝贝私服技术交流(等级*等级*等级除以50)*等级
& }" E. [9 }3 b5 g! a1 U. p- }8 h+ v也就是等级三次方除以50再乘以等级 妖城在线论坛& L! p9 ^) c3 J! e. f5 l
为什么要这么做而不是直接四次方乘以50是因为防止溢出数据。 魔力私服,最新魔力宝贝私服技术交流. u z* {/ L1 B2 \2 r3 F
216的四次方是2176782336,这个数字正好可以让下级经验变负,呵呵。 魔力私服,最新魔力宝贝私服技术交流( c/ `9 A: o" _( ]: G" v! _9 M( I/ a
所以先除50再乘到第四次方的时候就不会变负了,这是我摸索了很久突然领悟的真理。
( G/ M) A5 O+ B, g魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
5 H2 [; x! r! x# I* P. W) f. mbbs.mocwww.com接下去做公式:
9 l2 H) N9 U/ S& ~# c: x—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートPush ecx,32h 这里是经验倍率,就是公服经验除以ecx等于你的经验 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート8 @" S A+ V" h& V( D
Mov eax,edx 将下一等级的值赋值给eax / d$ p% i# X d8 e: ^" Y' D$ B$ z7 |9 _
Imul eax,edx 将eax,edx相乘,结果存到eax 妖城在线论坛 d$ h) r6 u* ?% X
Imul eax,edx 同上 bbs.mocwww.com! c% z1 M$ s2 y" o% `! l+ }' u
Cdq 这个做除法不加就会出错,用户登录后服务器当机 bbs.mocwww.com- d H9 E( |, Z3 v. V
Idiv ecx eax除以32h算到50倍经验
8 {) f' h( o* ?; P4 n8 A魔力私服,最新魔力宝贝私服技术交流Mov edx,[ebp+8] 从新获取下一等级的值
' X* S: H0 u, x% C, D1 ~! ZImul eax,edx 将eax,edx相乘,结果存到eax 妖城在线论坛) y0 b* w, X6 e/ J4 C3 X
2 }: ^; C/ n( k% C, n好了,这样就完成了运算过程。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 e, B2 \. N7 r" K H
5 o$ T4 {) z* y& ?# }4 K. X妖城在线论坛.text:080740C0 loc_80740C0:
1 N$ k: f$ r: l3 y; b. o- c魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表mov eax, 0FFFFFFFFh 妖城在线论坛/ v; B' P t/ \% U7 C& W
jmp short locret_80740BE
$ K9 T, ?/ p4 N. T这一段代码就是等级超过你设置的上限之后返回-1。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート, k9 S7 K4 ?8 v7 N7 m8 \/ h$ x9 s
! E) E, `1 h0 W; Obbs.mocwww.com
: N! J L; E! w+ k/ v魔力私服,最新魔力宝贝私服技术交流下面有个很严重的问题,新手比较难适应的就是如何写入你的代码。 魔力私服,最新魔力宝贝私服技术交流* y4 I& Q- Q9 O% m8 T% F7 q
这里就要用到FlexHex了。
: B- V& ~' `! ^9 H魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表妖城在线论坛3 v7 }& e A! _
首先将我们的汇编代码转成机器码,这一步需要非常的耐心细致。 魔力私服,最新魔力宝贝私服技术交流$ D, \0 |$ ?) x1 `% q0 _
如下对应: 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表8 L: X# y7 o, Z. w- y
Cmp edx,0ffh 81 FA FF 00 00 00
1 j$ E4 v* i0 r0 L9 H$ K; |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表jg short loc_80740C0 71 FA 妖城在线论坛( D6 h: I( [5 _1 Y, p4 _4 k) Y; @
mov ecx, 32h B9 32 00 00 00
: U2 a0 I r' H5 @/ a妖城在线论坛魔力私服,最新魔力宝贝私服技术交流8 U0 d1 a: T) O6 D
依次类推,都可以在IDA中搜索到你要的代码然后做相应修改。
+ o( S! X, C) f# _; p# V这个挺有乐趣可以自己慢慢享受摸索。
8 d$ @$ z* ? Z. kbbs.mocwww.com
2 i5 E! h; Y' _9 \魔力私服,最新魔力宝贝私服技术交流以上是我通宵玩了20多小时的个人心得体会,谢谢网上一些老人们的教程给了我很多指引和启示。