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

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

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

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

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

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

1、前言:为什么要这么做
: w4 p, u- u9 w4 n5 d很多时候,我们发现一个PE(EXE或DLL)中非常有用且功能独立的函数(call xxxxxxxx),并且已经知道了这个函数的各个入口参数的类型和具体含义,我们想在其他的软件中使用这个函数。于是,我想到了将这个PE中的函数改成一个导出函数,这样,我们就可以在任何软件中通过“LoadLibrary("ThisPE.EXE")”等API来使用这个函数了。 0 A+ ]6 n6 @  x. b) V+ ?/ v

/ L2 v6 z) ~' ]在汉化中的应用是可以直接调用游戏中的解包,压包函数来解包,压包,以及访问游戏中的文本显示函数等等。。。
3 Q( D2 ?$ S$ \2 o& P) P7 e5 ]' E3 ^# E' T- \3 m4 N
2、技术基础:已经了解PE结构
/ A9 I: H0 ^  p
5 P, c3 W" _; x  n3、分类:
! f9 b" f$ I" o( E$ e6 O* [( S(1)有导出表的DLL和EXE文件--非常简单 7 V* p1 f' g/ N# V# a! {9 ~
对于这类PE文件,要简单的多,因为只要修改一下PE中的Export,增加上一个导出函数,并把这个导出函数的入口指向我们要导出的call的调用地址(RVA格式)就可以了。甚至可以更简单的处理:找个不用的导出函数,改一下入口就可以了。 % F. Q$ K" x+ L5 @- u
(2)没有导出表的EXE文件--稍微复杂 & U7 F9 }" ~4 R5 h
因为大部分EXE文件没有导出表,所以我们必须要给它增加一个导出表。其实也很简单,给EXE增加一个节,并在这个节中按照导出表的格式构造一个导出函数,并将这个函数入口指向我们要导出的call的调用地址的RVA,并在PE头中指出其位置和大小。 3 }0 r. T: T: ?2 y$ G' e
9 \- O! o2 m% }. t( t
4、举例说明: : w1 ~* Q( A, K7 c
test.exe:ImageBase=0x00400000 / A4 T( `  V& a: V
发现test.exe 的 0x00408050 处为call 0x0040A012 的 0x0040A012是我们要导出的函数,我们将它导出为MyFunction函数。 * q3 l' D0 H$ ^
+ w2 x$ `! r: @3 o0 O; I6 f: h9 y
(1)给test.exe增加一个节:RVA=0x28000,size=0x1000 9 U1 [) Y) j+ ?
(2)构造导出表:
8 d( q4 q/ b; VMy_Export_Table dd 0 ;Characteristics
& b: L" o% Y2 i1 U7 `2 DMy_TimeDateStamp dd 0 ;TimeDateStamp
" I( _8 W5 f$ W; ~5 f$ R. T  _dw 0 ;MajorVersion
/ ]$ @% y2 W; x& B4 I, s- Y0 n& L# Adw 0 ;MinorVersion * Y2 N: }; Y" i3 w7 Y+ j
My_nName dd My_DLL_nName-ImageBase ;nName / h4 [8 V5 u+ Z/ X
dd 1 ;nBase ( N  n! G% @/ B) o- v' M8 v
dd 1 ;NumberOfFunctions
4 C! _. W6 w$ _' v$ B; `dd 1 ;NumberOfNames & ?+ q  \$ y* C) I8 R( n( o
My_AddressOfFunctions dd 0x0040A012-ImageBase ;AddressOfFunctions
/ V6 K$ i- J; T$ x% s2 \My_AddressOfNames dd My_Fun_Name-ImageBase ;AddressOfNames
4 s! H  Z# n5 T/ V6 GMy_AddressOfNameOrdinals dd 0 ;AddressOfNameOrdinals
( h+ I/ E7 m% Y# D- O: n--------------------------------------------------------------------- 5 @& J0 U* u9 P9 u- \
My_Fun_Name db 'MyFunction',0
. h3 D8 o$ m; s) Q3 Q- H: n5 `My_DLL_nName db 'test.exe',0 . {! v7 e9 t6 ?: B% Q

5 p& O0 F7 B+ B(3)LoadPe修改PE头,将导出表地址填入0x28000,大小填入0x1000,保存。
7 ?1 \1 n. E" v7 y
/ O$ Y! [1 q% {2 M0 \Spirng.W/2005.3.14 ! r. [4 K9 y8 Y* n( T% ^/ @0 w3 E9 k
* \# R  ^$ ]1 q& A# t, Z

) E6 t/ x% s' [, W--------------------------------------------------------------------------------
分享到:  QQ好友和群QQ好友和群 QQ空间QQ空间 腾讯微博腾讯微博 腾讯朋友腾讯朋友
收藏收藏 分享分享 很美好很美好 很差劲很差劲
回复

使用道具 举报

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

本版积分规则

冒险解谜游戏中文网 ChinaAVG

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

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

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

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