没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。
没有汇编语言基础,参照网上无数教程和相关资料,修改GMSV文件的一些心得体会。
X! x, v& ^" H3 e# Y妖城在线论坛使用软件IDA,FlexHEX。参考工具AsmFun(汇编指令查询器)Fun_1.2,asm2Shellcode等。 妖城在线论坛. o+ j$ }. y; O( Y% O) @ g, s) e
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# x2 C/ C" A+ b; D) v
用IDA载入gmsv,分析完成后进入Exports选项卡。 bbs.mocwww.com# m' \1 Z% e6 P @5 t0 y
搜索levelexp找到一个名为CHAR_GetLevelExp的子程序。
2 j) _0 M D9 @8 D1 jbbs.mocwww.com.text:08074098 public CHAR_GetLevelExp 魔力私服,最新魔力宝贝私服技术交流7 B) ]( I8 b$ [/ }
.text:08074098 CHAR_GetLevelExp:
7 a; |3 k( V! H6 J妖城在线论坛.text:08074098 push ebp
1 L. \" O4 }% q( S$ E4 m妖城在线论坛.text:08074099 mov ebp, esp 妖城在线论坛; l5 q, A4 Z, @ m2 Z9 ?' s( H
.text:0807409B mov edx, [ebp+8]
7 b, J) M$ c/ x2 b! ibbs.mocwww.com.text:0807409E cmp edx, 7Eh ' v" f% D! _& \! A% @
.text:080740A1 jbe short loc_80740C0
, O' Y7 Y1 G8 d6 T魔力私服,最新魔力宝贝私服技术交流.text:080740A3 push ecx
" C7 t* J/ Q# R. T2 i( a魔力私服,最新魔力宝贝私服技术交流.text:080740A4 mov ecx, 7 bbs.mocwww.com# K) c m8 m- Q: \7 v9 V& ]8 P, M* q
.text:080740A9 push edx
/ B- b7 }- s$ {" L" N \0 F妖城在线论坛.text:080740AA mov eax, edx 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表# @) h! j) t0 J* J0 `* r
.text:080740AC imul eax, edx
9 K$ @# k7 k$ o. T' s9 {.text:080740AF imul eax, edx 魔力私服,最新魔力宝贝私服技术交流, Q! I* b7 y2 P, J# T1 S8 I5 k% d
.text:080740B2 imul eax, ecx 妖城在线论坛" h+ i* ]) b! W
.text:080740B6 loc_80740B6:
' f7 b+ I' B* s魔力私服,最新魔力宝贝私服技术交流.text:080740BE leave
1 i8 U& t2 R8 M9 {4 a+ |—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740BF retn
- V/ Y5 G+ ^) M3 E/ a Z5 Xbbs.mocwww.com.text:080740C0 loc_80740C0: 妖城在线论坛& r' m& w6 O* L7 b6 m
.text:080740C0 mov eax, dword ptr LevelUpTbl[edx*4] - `/ |5 V" v+ d
.text:080740C7 jmp short loc_80740B6 0 t4 Q5 B% _$ y5 Q8 h: i' p
: [! S$ |/ M/ r2 i
粗糙的解释下这段代码的意思
4 ?; \! y" V$ v/ L3 a8 w5 z0 o+ a! n0 Z& c
1 [, T6 h7 G7 D# r7 e8 [ N魔力私服,最新魔力宝贝私服技术交流Push edp
- ?# U# `0 e9 a* U- @! f; P ~bbs.mocwww.comMov ebp,esp
: E9 `& R6 s! a( F" }" E7 Y+ o' xMov edx,[ebp+8]
1 } o% M, r/ o- Q2 q8 U* O$ m魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表获取当前等级的下一级存到edx
: I$ s3 ?% q3 `" m9 Y$ w6 N: S; y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート6 y; P1 b* i7 ?# `+ x4 R$ B
Cmp edx,7eh
( W5 i ^/ i! X7 P2 p" Q- I) K魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表将edx与7eh也就是10进制数130比较 1 T+ ?) D- e6 ]( B
% l6 l0 L8 ?: J* P9 F9 k魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表Jbe shortloc_80740C0
1 B9 q' D, b& ]' ^: T妖城在线论坛如果edx小于7eh则进行跳转到80740C0 魔力私服,最新魔力宝贝私服技术交流# l' ]3 h1 x0 F% p3 ^
魔力私服,最新魔力宝贝私服技术交流3 m5 G. W9 `- V q8 X( K
Push ecx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート/ C* s* Z& m1 e3 J$ q3 W' j
Mov ecx,7 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表9 C& s- ?* O9 u# `; j
给ecx赋值7
- Q0 r: I2 ?- u9 |, Q' w" k
! A$ g5 z9 G1 L; K7 d. ?* {) s8 I魔力私服,最新魔力宝贝私服技术交流Push edx
- I; `2 B2 _& [- G ~: I—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートMov eax,edx 魔力私服,最新魔力宝贝私服技术交流4 A1 h5 m# \& I; x1 R) h" G. N C
把当前等级+1的值给eax
' ^' E' d, Y# S9 w* a. [8 g魔力私服,最新魔力宝贝私服技术交流% L. w1 [3 a9 |" m# X5 p# g
Imul eax,edx bbs.mocwww.com1 B, B5 }+ V+ j
把eax与edx相乘,结果存在eax —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート7 z% x0 n' O! a! K' @
- u+ b* f! W8 {3 n4 Y
Imul eax,ecx
5 S' \3 `# q6 q; l. y8 {! E" A把eax与ecx相乘,结果存在eax bbs.mocwww.com7 ^& o/ W) A/ S" v
—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート. T' N6 F* H& i0 r" m
Leave
, x b! q& H* C* Q: y—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートRetn - g) u* T2 a& Q* x' _4 q
退出这个过程吧,大概
3 J1 N+ m/ I3 Z" |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
) |( g& U9 w% g# L3 n5 {# bMov eax,dwordptrLevelUPtbl[edx*4]
1 K6 m; c# p, y* }0 U, u/ |妖城在线论坛这里是读取经验表的内容给eax,也就是查表读经验 妖城在线论坛4 ]: \, Q7 C2 X' b2 \
! y( e8 h" @; S7 m魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表jmp short loc_80740B6
/ j; M+ w3 S: e+ s强制跳转到80740B6 魔力私服,最新魔力宝贝私服技术交流2 K( K' X1 K0 `! c$ ]" }# p
C3 d/ _3 v& y! b0 t; F妖城在线论坛好了,这段代码就这点意思,逻辑上不难理解。
6 l% P% D% G* C' N6 e4 U魔力私服,最新魔力宝贝私服技术交流虽然刚开始的时候我也是一头雾水,但是不要紧,随着一步步地摸索自然就会理解了。 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 u4 i$ _9 l" f. _( N$ D7 P
' Y1 o. A3 \1 x& r! K' L- P" {bbs.mocwww.com分析完了之后开始修改了,上面的代码具体作用如下:
8 n6 S2 K9 w* ~& f3 B判断等级下一级是否小于7eh,是则跳转到查表。 魔力私服,最新魔力宝贝私服技术交流6 m$ h+ |1 |" C8 E) s" H# m: Q
否的话也就是大于7eh时,按照下面算法运算
! b4 y/ s' } D7 b8 q.text:080740A3 push ecx 魔力私服,最新魔力宝贝私服技术交流, |. X1 W, E5 k. ]8 t' _; j8 P Y
.text:080740A4 mov ecx, 7
+ X* v5 H- R% \ D! v魔力私服,最新魔力宝贝私服技术交流.text:080740A9 push edx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート$ P5 o+ D p! Q' m% D$ l0 H, W
.text:080740AA mov eax, edx
, K5 g6 {% Y+ R( B+ U.text:080740AC imul eax, edx bbs.mocwww.com, Q, x5 L l; ]
.text:080740AF imul eax, edx
, b0 Z% t6 G. i/ v! r& m0 U& T) ^9 |魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表.text:080740B2 imul eax, ecx
2 K8 \/ P5 \2 n1 S7 d魔力私服,最新魔力宝贝私服技术交流也就是eax的三次方乘以ecx,这里可以改成我想要的。
2 c; l! z) B1 \( ^bbs.mocwww.com—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 b1 c3 Q0 ~( d, w
我的目标是改称等级的四次方除以50,但是问题来了。 魔力私服,最新魔力宝贝私服技术交流2 O7 \* K' Q. D0 C- r/ J
怎么做除法,怎么写代码到反汇编里,一步步来,先列出想要的代码。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表8 ^, P0 P. o) T) K$ S
- ~/ ^% P# m4 V8 j! f! [妖城在线论坛.text:08074098 public CHAR_GetLevelExp 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表0 F0 ?; H9 q, O* r( B
.text:08074098 CHAR_GetLevelExp:
' {0 P. @: v" \. ]( wbbs.mocwww.com.text:08074098
E/ v, Y$ W0 ?, x7 f' w, x/ T" Cbbs.mocwww.com.text:08074098 push ebp 魔力私服,最新魔力宝贝私服技术交流3 I: d# c; \; Y
.text:08074099 mov ebp, esp
" `7 V9 ]# u6 F2 D# r—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:0807409B mov edx, [ebp+8] —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート8 v$ X, k; F. `' S( S9 C' N
.text:0807409E cmp edx, 0FFh
" [2 h9 y( d$ u, q8 T, ~7 t+ t魔力私服,最新魔力宝贝私服技术交流.text:080740A4 jg short loc_80740C0 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表5 t- I/ X' T* H$ U
.text:080740A6 push ecx
2 R! ?& R- ]* l.text:080740A7 mov ecx, 32h
[9 S$ Z$ g0 N( T; ?. D a妖城在线论坛.text:080740AC push edx 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表9 w! B) O5 k5 ?! X5 j
.text:080740AD mov eax, edx 妖城在线论坛2 k$ g% E2 m" {8 b' a
.text:080740AF imul eax, edx
4 d0 T' h6 C! e1 o: G—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740B2 imul eax, edx 妖城在线论坛' ]/ u7 j1 X$ Y. c) k
.text:080740B5 cdq
% p* |2 K9 Z6 n& y1 T6 ?7 I—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート.text:080740B6 idiv ecx —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート% e/ b8 ?! U% p4 e
.text:080740B8 mov edx, [ebp+8]
! O9 L" m. m W H& D2 W魔力私服,最新魔力宝贝私服技术交流.text:080740BB imul eax, edx
4 G9 o& N) E& |8 Y8 Mbbs.mocwww.com.text:080740BE
0 b6 x3 D0 \; f& p) {, V: W' ^8 \bbs.mocwww.com.text:080740BE locret_80740BE: 魔力私服,最新魔力宝贝私服技术交流4 Z& _ m# C; L& l+ f5 D
.text:080740BE leave
3 F+ {* C+ h- m# p& Hbbs.mocwww.com.text:080740BF retn 妖城在线论坛 g/ n" i! N [
.text:080740C0 loc_80740C0: R* F$ f& l( L* _0 n
.text:080740C0 mov eax, 0FFFFFFFFh —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート2 f& [/ _- `: |
.text:080740C5 jmp short locret_80740BE 魔力私服,最新魔力宝贝私服技术交流8 c1 C/ |/ `5 e- y2 k# K- A
妖城在线论坛" ]3 J" S0 i) p! X2 A; ^6 B4 H* ]
方便起见这里直接把我改好的代码贴出来,与原来不同的地方: bbs.mocwww.com2 I, l6 X0 q9 v* |- U8 Y& t
Cmp edx,0FFh 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表: w& @* w# |5 J/ k6 Q4 |
Jg shortloc_8074C0 bbs.mocwww.com& G- c% l; F' v0 d
判断等级是否大于255是的话跳转80740C0
8 e$ F! v% |; Y6 O Z8 Sbbs.mocwww.com否的话进入我们的等级公式:
0 [+ o: B: ~! C4 I' W, vbbs.mocwww.com(等级*等级*等级除以50)*等级
: X& e( F6 J7 N+ }—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート也就是等级三次方除以50再乘以等级 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート; ?# B0 q* R# t4 s- N4 n# S
为什么要这么做而不是直接四次方乘以50是因为防止溢出数据。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 C$ |9 V+ f) \/ P$ v
216的四次方是2176782336,这个数字正好可以让下级经验变负,呵呵。 魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表5 H* R3 e$ }7 W; r% s J
所以先除50再乘到第四次方的时候就不会变负了,这是我摸索了很久突然领悟的真理。 $ O; J$ p( ^! l8 B- o: H
魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表6 O2 J8 ~7 F; a+ b% `9 x! N
接下去做公式:
2 l8 Q5 V$ p2 h( E( H0 h1 SPush ecx,32h 这里是经验倍率,就是公服经验除以ecx等于你的经验 bbs.mocwww.com$ E, h8 H m4 b7 Q
Mov eax,edx 将下一等级的值赋值给eax & n: u s5 R1 Z ^9 {9 d& J
Imul eax,edx 将eax,edx相乘,结果存到eax —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート5 o# o& W/ w6 O7 T: F0 N0 ? |
Imul eax,edx 同上
! I9 f! ?" x9 U4 Y) j—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲートCdq 这个做除法不加就会出错,用户登录后服务器当机 魔力私服,最新魔力宝贝私服技术交流$ v1 e5 p5 ^- l4 ]2 C
Idiv ecx eax除以32h算到50倍经验
, ?7 y7 p! g# s, w0 ~4 _魔力私服,最新魔力宝贝私服技术交流Mov edx,[ebp+8] 从新获取下一等级的值 —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート+ u$ ^- E( U8 }) U/ l
Imul eax,edx 将eax,edx相乘,结果存到eax
' c3 M* f2 h( F2 g( f& Q魔力私服,最新魔力私服,魔力宝贝私服,魔力宝贝私服技术,魔力宝贝私服,私服架设技术,妖城,FLASH,电影,黑客,网络,网吧,破解,入侵,注册表
4 @8 A, H. r7 k好了,这样就完成了运算过程。 妖城在线论坛, J- v& ?! t! S0 ]: N# k/ y
2 a5 g4 S, v4 z4 L: p2 ].text:080740C0 loc_80740C0:
5 H% ?: \ p' K) j3 z* `妖城在线论坛mov eax, 0FFFFFFFFh
9 l9 m o. l0 m2 g* Ibbs.mocwww.comjmp short locret_80740BE
1 C' G7 @+ P) w- r—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート这一段代码就是等级超过你设置的上限之后返回-1。 魔力私服,最新魔力宝贝私服技术交流7 j9 }0 N G4 o7 G$ u' y
" U4 B( h9 S# a# b
# L/ l$ _1 T3 j% H6 d0 n, S9 W下面有个很严重的问题,新手比较难适应的就是如何写入你的代码。 9 f/ H- G! R9 ~- M
这里就要用到FlexHex了。
% f# w8 e, X* m- N+ ?7 |- L—魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート# A6 D! [& ? w) j4 B
首先将我们的汇编代码转成机器码,这一步需要非常的耐心细致。 bbs.mocwww.com$ G2 v9 ]* a1 [. a4 M: L* ]: c
如下对应:
V1 u8 k2 y2 P; g+ s! Ubbs.mocwww.comCmp edx,0ffh 81 FA FF 00 00 00
' j- ~8 v9 g0 G4 g6 p5 S1 Y' w& e5 u" E, ~魔力私服,最新魔力宝贝私服技术交流jg short loc_80740C0 71 FA —魔力私服,魔力宝贝私服技术,DELPHI编程,魔力寶貝, 魔力宝贝, 크로스게이트,クロスゲート8 e1 ^# }9 C. b [+ |: H, \( ^
mov ecx, 32h B9 32 00 00 00
5 S9 z. d& E& K/ z! s妖城在线论坛bbs.mocwww.com0 v& J' B" S; U3 ?. ]$ O' a! j
依次类推,都可以在IDA中搜索到你要的代码然后做相应修改。
2 V8 W6 s2 [" s: g, S. D+ ubbs.mocwww.com这个挺有乐趣可以自己慢慢享受摸索。 bbs.mocwww.com7 f L' p3 R' `% O6 m: Z+ L* S
/ K- r7 s+ }" T% L2 B2 ^0 k! Ubbs.mocwww.com以上是我通宵玩了20多小时的个人心得体会,谢谢网上一些老人们的教程给了我很多指引和启示。