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

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

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

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

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

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

1、前言:为什么要这么做
* m4 h* |& }" q+ E6 W4 M很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。
1 `8 ~: k9 B6 a0 I1 O. w4 F; j
' r- i6 ^2 q+ Q在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。
: a# O. l# q9 Y2 O# V
- o( a" _$ [' T* H6 q* F  A# D2、技术基础:已经了解PE结构
5 ^6 `5 N$ D7 D, A" Q3 A5 R6 ?% ]! @( I8 O* j" ~
3、分类:
9 b: V7 b2 k/ J1 A3 h(1)有导出表的DLL和EXE文件--非常简单 9 S4 D: L; s  C# U2 I
对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。
* o; f1 V! ~0 R8 q- e4 o6 [(2)没有导出表的EXE文件--稍微复杂 ' U) `, D; X0 E0 o) Z6 B; `/ Q
因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。
; e+ j% ?+ ~. n! r; r
) B4 v( o, X, O/ K4 y1 U4、举例说明: + A1 {5 `& ~3 M# Z, \; v
test.exe:ImageBase=0x00400000
+ l" K' U4 v9 b: u发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。
/ G# W5 a/ t9 v# v; Q( E# W9 h/ X  o# c5 w& q0 I
(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 . t% K5 i" e& }" x+ e+ R! K
(2)构造导出表: : t) m- K# z" B. b0 y( `
My_Export_Table dd 0 ;Characteristics + S+ e* n0 u6 F6 p* M5 ?' C' c% V
My_TimeDateStamp dd 0 ;TimeDateStamp & `* [. n8 U% ^' E
dw 0 ;MajorVersion * ~; R+ z! c. E( E1 W
dw 0 ;MinorVersion . k2 G4 i6 A0 u9 r1 N# {: Z
My_nName dd My_DLL_nName-ImageBase ;nName
; I+ D  }0 p/ @% Y1 r( Cdd 1 ;nBase
( g: H; {3 @/ \0 O0 ~dd 1 ;NumberOfFunctions
% v1 q5 x% j' mdd 1 ;NumberOfNames : v2 @7 Y1 A  h$ g6 w& C/ O
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions % U/ T9 k7 v+ g7 Q) X  P: b: L
My_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames
" C- ~* v4 f7 UMy_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals
. @3 W7 p; M" i$ _: k--------------------------------------------------------------------- # _6 U' a9 E$ \) N7 C" U% G
My_Fun_Name db 'MyFunction',0
6 y" w) i  ^8 U9 b. h' QMy_DLL_nName db 'test.exe',0 ! ~! \* X( }% v& {& u5 u

2 R6 i' p3 b+ {/ l(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。 ! y9 N/ M2 g2 m3 l; L$ ]
& x" A& [% y0 n7 x6 {7 E! X
Spirng.W/2005.3.14
( \9 p! G7 [5 u( l, G8 S+ J+ R, [1 r! a! |5 W

1 n+ 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日,是全球华人共同的冒险解谜类游戏家园。我们致力于提供各类冒险游戏资讯供大家学习交流。本站所有资源均不用于商业用途。

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