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

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

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

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

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

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

1、前言:为什么要这么做
! }# j1 k+ b  ]& y/ L5 {很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。
% m8 i4 v" M+ Y, V8 [) m1 o; ?2 d$ f) K. n+ N' _' |1 z
在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。
; w6 \9 e0 a. k0 }: U! U
0 W( m; n5 r& D! x( j5 V2、技术基础:已经了解PE结构 $ w+ a- g2 G6 s9 C! D

& X# b0 K% t* r  \3、分类: . w) S8 x- s& _8 d7 c
(1)有导出表的DLL和EXE文件--非常简单
# S% u9 N- G7 k5 n5 m1 P6 N对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。
# m' Y7 r6 I2 |  l% T# I1 I3 `(2)没有导出表的EXE文件--稍微复杂
5 @$ r7 F% B. O因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。 5 o% _8 }/ b; ]9 [# J5 ^

6 i' W  R  i3 F7 Q2 t4、举例说明:
4 n! l# Q3 @0 ^( f. z/ U2 c' l9 p) g: ztest.exe:ImageBase=0x00400000
: Y) j5 H1 E( K发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。
1 K" O4 O$ k4 w) ?* ^" _% A  P
; Y9 @/ ^  W) L, O3 @0 [(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 ' j. A- I) {7 [! n1 K
(2)构造导出表: / O- @! m4 ]8 ^: r# b6 d$ g
My_Export_Table dd 0 ;Characteristics 5 S+ {/ f4 \; R* x% {( a0 }4 ?
My_TimeDateStamp dd 0 ;TimeDateStamp
" Q3 A: M' `& N5 Z; s, j: ndw 0 ;MajorVersion
% f; C' K1 o  m8 D* t* p/ _dw 0 ;MinorVersion
2 c$ \, [, G, ^  n9 C. V; eMy_nName dd My_DLL_nName-ImageBase ;nName
( |7 [/ L1 p7 @( I+ c" Wdd 1 ;nBase
0 ?1 R% j+ G$ j1 u5 u( wdd 1 ;NumberOfFunctions 8 H: v5 Q6 A+ K# h0 B3 `' U
dd 1 ;NumberOfNames 2 N8 y( {1 k8 a: R6 r  X+ A3 a  W- F( r
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions
- Z8 T/ ~8 ^' |  GMy_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames
9 H  t# ?. c. _1 u; @My_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals 4 C$ [8 v- y; V" Y5 O, c$ u" @
---------------------------------------------------------------------   Y1 j. \& X! P2 d  G4 R/ ]4 `* {
My_Fun_Name db 'MyFunction',0
; F) u3 t9 s2 O: tMy_DLL_nName db 'test.exe',0
+ Y* M1 B. I& Q- T; q$ C- C1 w3 H3 v9 U( M; a' z
(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。
) f5 N# j; J8 ^, L% v
- W* [/ R1 `  J8 D) R5 {' fSpirng.W/2005.3.14
( g* I9 S4 t) w# y1 a4 F0 }" s* ]4 ?( f2 L) S) Z! U- Z

$ Z; `( [( k# @0 ?. D/ f# A--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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