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

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

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

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

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

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

1、前言:为什么要这么做
; u2 e! K! m3 v, z% ?很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。 : l6 \5 q* E3 O; d
) \# e$ t6 T+ C! `+ q+ Z
在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。* a6 H# W+ _/ S' {" W; }

8 N5 }6 y; s& q/ v! O$ M6 R  R: S1 A" Q2、技术基础:已经了解PE结构
) T3 G  j5 {- }+ C! K4 O
, D! P7 U$ h" g' \; ?' j/ |3、分类:
- Z" K. s" h! T(1)有导出表的DLL和EXE文件--非常简单
/ {9 t" |3 g. D2 V对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。
  k0 C4 {  C$ h, F& L(2)没有导出表的EXE文件--稍微复杂 ( [, k1 v5 i9 X# C: J
因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。
4 X! Y( u6 d$ e: y7 q$ [5 g1 T! b+ U; m9 w+ ^3 ~5 ?. f# t
4、举例说明:
" R2 Q3 {6 d1 L* ]% e; b1 \2 Jtest.exe:ImageBase=0x00400000 6 w0 Y( P+ ?: t+ S1 u: Z" M
发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。
* R0 M, \' |, A6 l9 ?
: y  s% i3 B  m+ E' ^(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 # O% |+ _" S* [6 Y  F
(2)构造导出表:
7 M: A0 h# z7 Q* V2 A2 ~+ ?/ MMy_Export_Table dd 0 ;Characteristics 4 P* [* F* Y9 O! G3 o: I
My_TimeDateStamp dd 0 ;TimeDateStamp 7 \3 o5 ?) B: Y) b
dw 0 ;MajorVersion ; T) U) I- {+ _9 T: B& P0 `" P# F
dw 0 ;MinorVersion
) ^) W8 P5 C1 @, r5 |9 pMy_nName dd My_DLL_nName-ImageBase ;nName
5 Q+ c$ ?5 W3 k* @  n1 h& jdd 1 ;nBase ) j8 L. H* p% j  t, R# @$ q# H3 ?
dd 1 ;NumberOfFunctions
4 K' g$ X) c% ~% Add 1 ;NumberOfNames ) j* b: F* z5 @% a  W) W; k" l
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions
4 F7 W. @% [* F4 t& v7 U# n1 aMy_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames / H! Q& G: f! }: y1 ^: i: N, v4 Y
My_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals # G/ x5 Z$ o: W/ t9 x6 u9 ^
---------------------------------------------------------------------
, ?* k+ z% \) O9 j! G! f7 eMy_Fun_Name db 'MyFunction',0
7 J! \2 N, N' pMy_DLL_nName db 'test.exe',0
6 `3 N: p. Y/ ^
+ |" C' i7 i0 t8 K+ T(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。 # H) @8 b: }8 _" K

3 V3 T5 G' ?8 \& GSpirng.W/2005.3.14
/ w5 _6 o8 m8 G5 r/ O+ e) \) a1 M& q

5 d4 r- M  T* M: K--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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