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

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

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

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

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

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

1、前言:为什么要这么做
$ e* P2 M: @; j3 ?$ F& A/ b+ B1 d, f很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。
2 i' v" v; Y% D7 j% A4 K
1 E5 {0 Z0 r9 K( U% x) C$ N在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。
7 I, b1 r! u+ E; ]) h5 t5 j* f( h; p5 \3 i+ f
2、技术基础:已经了解PE结构 , D: X3 C7 w4 W2 b
0 u2 H: ^. c; H$ m. J' J, {
3、分类: 8 N0 G. C3 N$ A$ d9 k
(1)有导出表的DLL和EXE文件--非常简单 * ]% o* X7 e4 s+ E* H  t  f
对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。
' ^3 v8 Y! T, P6 Q+ z+ m2 [  V(2)没有导出表的EXE文件--稍微复杂
1 j0 e/ e% u: K因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。
, G0 B: x" i# w( S8 Y0 z
1 Q+ C4 K' }9 _; D3 f; C$ w4、举例说明:
+ q1 z' _9 m( c/ @test.exe:ImageBase=0x00400000
5 C9 \" h/ i5 O) Y3 M+ }发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。
6 p, b- y- L/ f* G9 s! g! I, \: a/ N( t
(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 0 j0 D6 W" U. l1 `/ u" N! \
(2)构造导出表:
! W: e  z, S. D; Y9 p/ }My_Export_Table dd 0 ;Characteristics " m. @: c% V& t' [! A* Q$ t: y
My_TimeDateStamp dd 0 ;TimeDateStamp , `5 k5 j% G# F& V7 N+ }! V1 n8 d
dw 0 ;MajorVersion * K( H; @7 @' _. V
dw 0 ;MinorVersion # F6 w/ J: z% H; v
My_nName dd My_DLL_nName-ImageBase ;nName
( S1 g* L9 G" Q% Xdd 1 ;nBase 5 I" `9 ~1 u$ N: q' K% {4 I) \
dd 1 ;NumberOfFunctions ' A$ G1 `4 p. T" i" [
dd 1 ;NumberOfNames 4 z4 ^! ?8 n$ h( ~
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions
5 L  a# V! v: T2 z+ fMy_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames ! Y$ `+ p3 T' }& P# l/ P
My_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals 7 A4 A. x; f5 f! ?; C7 q
---------------------------------------------------------------------
  L3 h" i$ P& Q: o: A( k3 A2 K; KMy_Fun_Name db 'MyFunction',0 5 W* g/ o  s+ L# Y& m
My_DLL_nName db 'test.exe',0
+ T7 n0 a+ ~* y. K
. v+ g7 }* w9 z6 j% e5 V8 ?/ U% J3 k1 ](3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。
/ b! g, k7 _! a, ]% M  O8 i3 l3 @
Spirng.W/2005.3.14
+ l7 @" ]  ?! k
1 U% ?' V5 R6 R# g( V& G% I. a2 ?* Q0 U7 U
--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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