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

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

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

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

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

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

1、前言:为什么要这么做 5 h# t. }' |( N; T* q
很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。
& B0 @: c# B* V6 q1 |
; N5 B1 s7 y) ~+ o" _4 g: r在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。2 v- g5 q4 H0 P2 K5 ]) u

' w5 Q8 @$ m; s. V' ]2、技术基础:已经了解PE结构
( j/ K( a5 ~6 x( W4 p  f
- C( Z! t/ @. Q3 H. Z3、分类: 4 H0 K  l, s" N/ ?- f2 w* s
(1)有导出表的DLL和EXE文件--非常简单
/ Q  T8 v$ }/ K% V1 [+ i对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。
+ D$ K  `  T  l  _0 D% o(2)没有导出表的EXE文件--稍微复杂
8 f! e6 x/ Z0 F/ H- p* s$ {因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。
/ h9 o0 q& D: i* `' B8 g  P- Y+ l
4、举例说明:
. B5 d; l7 d2 Z+ [test.exe:ImageBase=0x00400000
5 o" I) w. P5 Y! G) F, X发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。 - m2 x4 W& a/ Y
. M0 O& y; }% ~
(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 ; N/ v: b5 l% c2 K: Q$ W6 i
(2)构造导出表:
% }  x4 }1 F% v) M5 O/ {My_Export_Table dd 0 ;Characteristics 3 K8 G: c- D4 e$ M5 b: a: _! C
My_TimeDateStamp dd 0 ;TimeDateStamp
8 N; l) E5 `% C) W- Mdw 0 ;MajorVersion
, J1 r; p" @3 F5 H, Ndw 0 ;MinorVersion 3 {% v. x2 }! E4 b
My_nName dd My_DLL_nName-ImageBase ;nName # N! d5 U0 B4 t; P  i
dd 1 ;nBase
+ g7 [, v) e9 v! |% U+ Y% Hdd 1 ;NumberOfFunctions
7 ~3 _, u! ~; w6 i' \dd 1 ;NumberOfNames 2 t/ P$ e, T# \$ o
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions / C* f  d6 g" d- g3 D9 N# J3 ^8 {
My_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames 7 d* b0 q9 X; a. e8 Y1 k& i2 v  a
My_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals
; P' P6 c8 g7 M+ p, z4 X. z---------------------------------------------------------------------
! ]2 x" U, K+ ~" IMy_Fun_Name db 'MyFunction',0
6 x! l; F; Q) n/ H5 ^# y/ B7 r, dMy_DLL_nName db 'test.exe',0
9 }. o1 B5 _7 _$ o9 J9 y  B( T2 F" |
(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。
2 B  j8 P6 E# h* N% v3 }  C1 a( |3 T: X) q, S' v7 K1 M2 [
Spirng.W/2005.3.14
9 w9 ~6 I; e  b+ I/ ~5 g
4 T6 ?# t0 z7 Q  K/ I4 A7 c; q" }# e+ x7 N  c
--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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