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

【汉化资料】改造PE中的函数为导出函数

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

【汉化资料】改造PE中的函数为导出函数

跳转到指定楼层
楼主
发表于 2008-10-29 07:57 | 只看该作者 回帖奖励 |正序浏览 |阅读模式

【汉化资料】改造PE中的函数为导出函数

1、前言:为什么要这么做
/ p5 c( y" I$ s$ t9 f9 ^很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。 ) q5 M7 E  ^" T+ P8 L* r

7 |! N6 _1 M8 T& d. P! z& ?7 q在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。& d' C0 I$ F* x' o: n+ c9 f
  a0 x" E, S7 U, r2 j
2、技术基础:已经了解PE结构 9 c8 z9 D( q$ @; ^8 b
( D; m6 P9 u' l  k+ Q  @+ I3 W
3、分类:
: _4 [# m% Q" n$ N; ~0 s% Q(1)有导出表的DLL和EXE文件--非常简单
4 m# q- ^6 d& L1 A4 c: h- Z: F对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。
, `. p; d, i' @  W9 H5 @(2)没有导出表的EXE文件--稍微复杂
" ?2 l3 U) _1 ?4 C. V+ b因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。 2 N1 Y6 I# y. N. o4 G% |, V

! a% F5 ]0 e: _! X4 w4、举例说明:
) @% {  i. }' I( `9 ltest.exe:ImageBase=0x00400000
. F" ?% n; t0 A+ G# D+ w8 |. c; _发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。 0 M8 a' m, r5 u7 M! `: E0 A7 x

1 p# n2 ^  S2 S3 K  I' h(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 . [  z. z* v( j9 ^. K) ]
(2)构造导出表:
! P. @1 ~4 O0 e' K% NMy_Export_Table dd 0 ;Characteristics $ H* M  {& J0 o* c' Y( i& b- I2 z
My_TimeDateStamp dd 0 ;TimeDateStamp   _5 G& ~3 D7 d8 T
dw 0 ;MajorVersion
  w) o0 S: a$ ?. ~dw 0 ;MinorVersion ; _. }7 Y5 K; j0 i( T
My_nName dd My_DLL_nName-ImageBase ;nName
' U* B" t3 B# edd 1 ;nBase
- N" I; L( h6 I# K$ i; h% _dd 1 ;NumberOfFunctions " M3 M2 e/ S( q' b; q
dd 1 ;NumberOfNames 7 ~; f" A% R0 }9 Q. O* i
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions " o/ g4 }, s& I( G
My_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames - p1 U5 C9 o3 ^+ [& P5 @
My_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals % l. [6 T9 A4 Q+ J) ]
--------------------------------------------------------------------- 3 y  ?4 t/ Z& b7 h1 I& I
My_Fun_Name db 'MyFunction',0 * \2 |* A# ^7 a2 j5 t+ s4 b: W
My_DLL_nName db 'test.exe',0
) G) B6 Q9 `$ l/ `) P/ }7 w& }9 J
(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。
7 l- i; j* P$ F
, D* H% G) h8 D! a, GSpirng.W/2005.3.14 ) `, b- @4 [5 S" S( `* D' n2 `; L

/ v5 ^" t( u  o
# \6 K  |# H& ?" `/ c3 N--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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