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

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

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

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

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

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

1、前言:为什么要这么做
+ ]: m2 Y7 b6 A/ g很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。
8 b8 _8 v1 @8 V0 A1 y( j$ E, F
6 d; _# T3 @7 j2 r$ ~在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。
7 D) w9 C: V+ c' N/ ?9 u+ L/ G, \% \1 Y; R9 U
2、技术基础:已经了解PE结构
' ^$ t( D8 f; o" ?% r' H) M: W4 h- |8 t+ ~
3、分类:
- }# k7 w2 t0 U" I5 f(1)有导出表的DLL和EXE文件--非常简单 # ~" q  w" I3 m- u/ S/ G4 V
对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。 $ h$ P, Y7 c0 _* X) ^
(2)没有导出表的EXE文件--稍微复杂
5 m6 e% E; w' H5 Q. b3 v# Y因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。 : w1 A/ D7 M! C* s1 w
' X; \* X4 U4 E2 a8 C. a2 o
4、举例说明: % U8 k, G& H1 q/ d. K" `' F
test.exe:ImageBase=0x00400000
5 C9 @/ \4 ~3 y. A, Z发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。 # k- S7 p! h+ v! E
8 X* O0 G/ O# S9 ]
(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 . A/ o" B/ y1 a# o; |- p* N1 F
(2)构造导出表: - m3 ?! l3 q/ s) u1 w0 ?( M
My_Export_Table dd 0 ;Characteristics 4 q& `/ @3 T3 B, `
My_TimeDateStamp dd 0 ;TimeDateStamp * j, ~9 \- C! a  M/ `
dw 0 ;MajorVersion % Z0 c5 }! e' r, I# l8 i+ L
dw 0 ;MinorVersion 8 V  d/ l0 S) K, @5 @
My_nName dd My_DLL_nName-ImageBase ;nName + i6 x% J- {5 m! l
dd 1 ;nBase , U  W9 u$ |; J7 m/ M8 G
dd 1 ;NumberOfFunctions
/ M' C+ h$ `0 i2 h3 ddd 1 ;NumberOfNames
3 B+ T( O  _4 K2 {. dMy_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions
! W. ^# R: q: AMy_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames - d+ N- G: z+ s. a" [: c( m
My_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals
5 f7 }1 l0 _8 d; s* v$ J/ y---------------------------------------------------------------------   n4 v/ X2 u* Q- i# l+ b/ O4 @
My_Fun_Name db 'MyFunction',0 3 R/ _8 L4 t6 G! k. b
My_DLL_nName db 'test.exe',0 ' }& {" m: x) p1 [. N1 b: k

, m# n; o5 ^# `0 c- A(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。
6 C- x0 @/ B+ o6 n4 k; ^
, G3 u, h4 c" ~" f# g1 l/ n4 iSpirng.W/2005.3.14
+ V' d8 z8 S/ G& F4 V6 s, ~
% S! A1 m( v5 D* ]$ @7 r: e# i% z7 [5 R2 A: n* P$ A# M
--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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