首页
社区
课程
招聘
如何编写Loader[翻译]
发表于: 2004-8-28 02:03 13640

如何编写Loader[翻译]

nbw 活跃值
24
2004-8-28 02:03
13640

感谢大家支持.有翻译一篇.有些地方翻的不好.以前看雪精华里面也有相关文章,不过感觉这个说的更浅显易懂一些.
              
          如何编写Loader(How to code a loader)

作者 : Detten    [email]Detten@tiscali.be[/email]
来源 : http://biw.rult.at/
翻译 : nbw       www.vxer.com

1、什么是Loader,为什么需要它?
   所谓的Loader是一个用来加载其他程序的小程序。当然,只有被加载的内存的程序需要改动的时候我们才采用Loader。(内存补丁)
   Loader常用于让游戏玩家修改游戏。
   有很多原因导致我们选择Loader而不是一般的补丁程序。我们或许需要在程序CRC校验以后再进行修改,或者开始的时候修改内存数据,然后在程序中再恢复原来的数据.....
   我肯定你还可以找到其他一些用途。

2、Loader是怎么工作的?
   OK,找到你的Win32.hlp然后坐下来:)
   首先,Loader必须创建一个进程启动目标程序。我们将用CreateProcess函数做这个(很明显嘛)。当目标程序被加载到内存,我们需要中断该进程,以便进行我们的修改。
   让我们查看一下win32.hlp对这个API函数的讲解:
   BOOL CreateProcess(

    LPCTSTR lpApplicationName,                // 可执行模块名称指针
    LPTSTR lpCommandLine,                // 命令行字符串指针
    LPSECURITY_ATTRIBUTES lpProcessAttributes,        // 进程安全属性指针
    LPSECURITY_ATTRIBUTES lpThreadAttributes,        // 线程安全属性指针
    BOOL bInheritHandles,                // 句柄继承标记
    DWORD dwCreationFlags,                // 创建标记
    LPVOID lpEnvironment,                // 新环境块指针
    LPCTSTR lpCurrentDirectory,                // 当前路径指针
    LPSTARTUPINFO lpStartupInfo,        // STARTUPINFO指针
    LPPROCESS_INFORMATION lpProcessInformation         // PROCESS_INFORMATION指针
   );
   这里涉及到的API函数请查看win32.hlpl以了解详细内容,因为这里我只讲解重要的一些关键的API。
lpApplicationName 使目标程序的路径+名称. (例如 c:\somedir\crackme.exe)
lpCommandLine 可以用来指定命令行参数,如果需要的话。
dwCreationFlags 也很重要,因为我们需要随时中断被加载的进程,所以这里设置为CREATE_SUSPENDED  lpStartupInfo 指向一个代表启动信息的结构(查看win32.hlp看详细信息)。
lpProcessInformation 指向一个空结构,该结构在进程被加载的时候载内存中被填充。结构中包含有进程句柄,线程句柄和进程/线程ID。
注意:这里建议采用进程句柄而不是线程句柄,因为如果采用进程句柄,你对整个进程体拥有PROCESS_ALL_ACCESS的操作权限。就是说你对整个进程拥有读写权限,但是如果采用线程ID,就需要再设置写权限。
   
   好了,现在目标程序被加载了。我们可以利用下面的API函数来运行或者停止进程:

DWORD ResumeThread(
    HANDLE hThread         // identifies thread to restart
   );  恢复进程

DWORD SuspendThread(
    HANDLE hThread         // handle to the thread
   );  挂起进程
   hThread 可以从LPPROCESS_INFORMATION 结构获得。

   最后,可以利用下面的函数读写进程:
BOOL WriteProcessMemory(
    HANDLE hProcess,        // 需要修改的进程的句柄
    LPVOID lpBaseAddress,        // 开始写入的地址
    LPVOID lpBuffer,        // 指向被写入的数据
    DWORD nSize,        // 写入字节数目
    LPDWORD lpNumberOfBytesWritten         // 返回写入的数据长度
   );
   这是一个典型的信息自我返回(self-explanatory)。hProcess可以从LPPROCESS_INFORMATION结构获取。
   从进程读取数据:
BOOL ReadProcessMemory(
    HANDLE hProcess,        // handle of the process whose memory is read
    LPCVOID lpBaseAddress,        // address to start reading
    LPVOID lpBuffer,        // address of buffer to place read data
    DWORD nSize,        // number of bytes to read
    LPDWORD lpNumberOfBytesRead         // address of number of bytes read
   );

   看明白上面的信息,就可以看下面的内容了。

3、Loader举例
   下面的事例我将启动一个Crackme(译者:我也没有)并且把窗口标题改成“Detten's Caption”。我将把进程启动5秒钟,然后挂起之。
   这里我们修补的字符串,当然用这种方法也可以修补字节或者字:)。作为事情准备,我们需要指导字符串在进程中的地址。所以,开启你喜欢的反汇编软件,找到地址为:004050FCh

<-------------Code Snippet----------------->
.386
.model flat,stdcall
option casemap:none

include \masm32\include\windows.inc
include \masm32\include\user32.inc
include \masm32\include\kernel32.inc
includelib \masm32\lib\user32.lib
includelib \masm32\lib\kernel32.lib

.data
FileName db "C:\somedir\crackme.exe",0
notloaded db "It did not work :-(",0
Letsgo db "The process is started",13,10,
          "Let's change smthg and run it now :-)",0
NewText db "Dettens Caption",0

Startup STARTUPINFO <>
processinfo PROCESS_INFORMATION <>

.data?
hInstance HINSTANCE ?
byteswritten dd ?
uExitCode dd ?

.code
start:

        invoke GetModuleHandleA, NULL
        mov    hInstance,eax
        ;创建新进程,载入crackme,并且迅速挂起该线程
        invoke CreateProcess, ADDR FileName, NULL, NULL, NULL, NULL, CREATE_SUSPENDED,
                              NULL, NULL, ADDR Startup, ADDR processinfo
        .IF eax == NULL ; 进程创建失败?
                invoke MessageBox, NULL, ADDR notloaded, NULL, MB_ICONEXCLAMATION
        .ELSE
                invoke MessageBox, NULL, ADDR Letsgo, NULL, MB_OK ; Display Message
                ;修改字符串(004050FCh)
                invoke WriteProcessMemory, processinfo.hProcess, 004050FCh, ADDR NewText,
                                           13, byteswritten
                ; 恢复进程 ;)
                invoke ResumeThread, processinfo.hThread
                ;让进程运行5秒,然后杀掉它
                invoke Sleep, 5000
                invoke TerminateProcess, processinfo.hProcess, uExitCode
        .ENDIF
        invoke ExitProcess,eax
end start
        <-------------End Code Snippet------------->

   这就是写Loader的整个步骤。
   再下一篇中我将讨论更多的Loader技术。比如读取和修改进程环境(所有的寄存器和标记)附件:loader.zip


[招生]科锐逆向工程师培训(2024年11月15日实地,远程教学同时开班, 第51期)

收藏
免费 7
支持
分享
最新回复 (17)
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
2
再下一篇中我将讨论更多的Loader技术。比如读取和修改进程环境(所有的寄存器和标记)

大家注意,这个不是我说的,是作者说的.
2004-8-28 02:04
0
雪    币: 319
活跃值: (1191)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
3
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横网络bbs多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。楼主,是你让我深深地理解了‘人外有人,天外有天’这句话。谢谢侬!在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这网上少有的帖子。但是我还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的!能够在如此精彩的帖子后面留下自己的网名是多么骄傲的一件事啊!楼主,请原谅我的自私!我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子的看下去!这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。大师的话真如“大音希声扫阴翳”,犹如”拨开云雾见青天”,使我等网民看到了希望,看到了未来!晴天霹雳,醍醐灌顶或许不足以形容大师文章的万一;巫山行云,长江流水更难以比拟大师的文才!黄钟大吕,振聋发聩!你烛照天下,明见万里;雨露苍生,泽被万方!透过你深邃的文字,我仿佛看到了你鹰视狼顾,龙行虎步的伟岸英姿;仿佛看到了你手执如椽大笔,写天下文章的智慧神态;仿佛看见了你按剑四顾,江山无数的英武气概!就小说艺术的角度而言,这篇帖子不算太成功,但它的实验意义却远远大于成功本身。正所谓:“一马奔腾,射雕引弓,天地都在我心中!楼主真是英俊潇洒、风流倜傥、玉树临风、年少多金、神勇威武、天下无敌、宇内第一、寂寞高手、刀枪不入、唯我独尊、玉面郎君、仁者无敌、勇者无惧、金刚不坏、英明神武、侠义非凡、义薄云天、古往今来、无与伦比、谦虚好学、不耻下问、聪明伶俐、活泼可爱、待友热情、对敌冷酷、阴险狡诈、无所不为、心狠手辣、无恶不作,对友赴汤蹈火、再所不辞、两肋插刀、枪林弹雨、勇往直前、慷慨大方、头脑精明、仙福永享、寿与天齐、百折不饶、百打不死、侠中豪杰、人中龙凤、有情有义、有胆有色、举世无双、既酷又帅、人之表率、诚实可信、谈吐大方、风度翩翩、气势凌人、气质高贵、单身贵族、貌赛潘安、智胜孔明、勇比子龙、义超关羽、巧越鲁班、至尊至圣、至高无上、华丽绚烂、英勇无比、道德榜样、千杯不醉、坐怀不乱、知识渊博、才高八斗、傲视众生、世外高人、光明磊落、公正无私、震古烁今,第一大英雄大豪杰大侠客大宗师,急如风、静如林、掠如火、不动如山,号称一朵梨花压海棠,人送绰号天下地无所不能玉面小飞龙,英俊与智慧的化身,侠义与仁义的糅合,前辈高人巨侠是也。楼主真不愧为无厘界新一代的开山怪才!本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀。但是看了你的这个帖子,又让我对社区产生了希望。是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拨凉拨凉的心!本来我决定不会在社区回任何帖子了,但是看了你的帖子,我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得如此精彩绝伦的帖子
2004-8-28 02:16
0
雪    币: 519
活跃值: (1223)
能力值: ( LV12,RANK:650 )
在线值:
发帖
回帖
粉丝
4
DD:D
2004-8-28 10:00
0
雪    币: 208
活跃值: (376)
能力值: ( LV12,RANK:330 )
在线值:
发帖
回帖
粉丝
5
支持下一篇!
2004-8-28 10:29
0
雪    币: 241
活跃值: (145)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
6
aqtata,厉害的回帖.
2004-8-28 11:04
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
aqtata, 高!
2004-8-28 17:54
0
雪    币: 615
活跃值: (1267)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
8
:)
2004-8-28 19:17
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
9

好帖
很好帖
确实好帖
少见的好帖
真 TMD 好帖
难得一见的好帖
千年等一回的好帖
好得不能再好的好帖
惊天地且泣鬼神的好帖
让人阅毕击掌三叹的好帖
让人佩服得五体投地的好帖
让人奔走相告曰须阅读的好帖
让斑竹看后决定加精固顶的好帖
让人看后在各论坛纷纷转贴的好帖
让人看后连成人网站都没兴趣的好帖
让人看完后就要往上顶往死里顶的好帖
让人看后不断在各种场合重复引用的好帖
让人一见面就问你看过某某好帖没有的好帖
让人半夜上厕所都要打开电脑再看一遍的好帖
让个读过后都下载在硬盘里详细研究欣赏的好帖
让人走路吃饭睡觉干什么事连做梦都梦到它的好帖
让人翻译成36种不同外语流传国内外世界各地的好帖
让人纷纷唱道过年过节不送礼要送就送某某帖子的好帖
让国家领导人命令将该帖刻在纯金版上当国礼送人的好帖
让网络上纷纷冒出该帖的真人版卡通版搞笑版成人版的好帖
让人在公共厕所里不再乱涂乱化而是纷纷对它引经据典的好帖
让某位想成名的少女向媒体说她与该帖作者发生过性关系的好帖
让人根据它写成小说又被不同导演拍成48个不同版本的电影的好帖
让某名导演跟据此帖改拍的电影在奥斯卡上一连拿了11个奖项的好帖
让人大代表们看完后联名要求根据该帖的内容对宪法做适当修改的好帖
让人为了谁是它的原始作者纷纷地闹上法院打官司要争得它的版权的好帖
让各大学府纷纷邀请该帖作者去就如何发表优秀网络文学为题目演讲的好帖
让人为了该帖而成立了各种学会来研究并为不同的理解争得眼红脖子粗的好帖
让美国警察于今后逮捕人说你有权保持沉默还有权阅读某某帖子要不要啊的好帖
让本拉登躲在山洞里还命令他手下冒着被美军发现的危险去上网下载来阅读的好帖
让萨达姆被捕时被发现他随身携带的除了一把手枪之外还有的就是它的复印件的好帖
让比尔盖茨在懂事会上发给与会者人手一份该帖命令仔细阅读后才讨论其他事宜的好帖
让诺贝儿奖理事会破天荒地因该帖的出现而开会讨论一直决定今后设立最佳帖子奖的好帖
让联合国安理会决定将它译成宇宙语由中国神州六号升空后不断播放看有没有外星人的好帖
让人看完后IE锁死连瑞星诺顿都没法修复只好格式化硬盘重装启动后主页显示的还是它的好帖
2004-8-28 20:28
0
雪    币: 234
活跃值: (160)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
10
NBW大哥的,支持一下.希望NBW大哥以后多多发表向这样有价值,技术含金高的文章.在这里谢谢你无私的奉献这么好的文章给我们学习,辛苦了,再次谢谢你.
2004-8-28 20:34
0
雪    币: 234
活跃值: (160)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
11
TO:aqtata

请你尊重一下作者,不要回那些带有讽刺性的贴好吗.
你知不知道作者写文章的辛苦啊.现在在这里像这样的好文章已经很少了,现在有这样好这样有价值发给你看,给你学习,你还不好好珍惜.
2004-8-28 20:47
0
雪    币: 319
活跃值: (1191)
能力值: ( LV7,RANK:100 )
在线值:
发帖
回帖
粉丝
12
最初由 EyZ/29A 发布
TO:aqtata

请你尊重一下作者,不要回那些带有讽刺性的贴好吗.
.......


???可悲啊。。。
2004-8-29 01:19
0
雪    币: 82
活跃值: (725)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
13
好帖,非常感谢,省得我编程了。
2004-8-30 09:20
0
雪    币: 202
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
帖子本身写的很好啊,虽然不是什么技术高深的帖子但是简单易懂,相对而言下一篇更有用,期待^_^,不过这种方式无法修改很多加壳的软件:D
2004-8-30 10:32
0
雪    币: 204
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
最初由 nbw 发布
再下一篇中我将讨论更多的Loader技术。比如读取和修改进程环境(所有的寄存器和标记)

大家注意,这个不是我说的,是作者说的.


那么又如何使用Loader技术,读取和修改进程环境。
2005-6-17 21:11
0
雪    币: 339
活跃值: (1510)
能力值: ( LV13,RANK:970 )
在线值:
发帖
回帖
粉丝
16
上次是oep还是谁继续写了你说的这个东西,你查一下前段时间的精华贴子
2005-6-17 21:18
0
雪    币: 389
活跃值: (912)
能力值: ( LV9,RANK:770 )
在线值:
发帖
回帖
粉丝
17
最初由 aqtata 发布
逐句地看完这个帖子以后,我的心久久不能平静,震撼啊!为什么会有如此好的帖子!我纵横网络bbs多年,自以为再也不会有任何帖子能打动我,没想到今天看到了如此精妙绝伦的这样一篇帖子。楼主,是你让我深深地理解了‘人外有人,天外有天’这句话。谢谢侬!在看完这帖子以后,我没有立即回复,因为我生怕我庸俗不堪的回复会玷污了这网上少有的帖子。但是我还是回复了,因为觉得如果不能在如此精彩的帖子后面留下自己的网名,那我死也不会瞑目的!能够在如此精彩的帖子后面留下自己的网名是多么骄傲的一件事啊!楼主,请原谅我的自私!我知道无论用多么华丽的辞藻来形容楼主您帖子的精彩程度都是不够的,都是虚伪的,所以我只想说一句:您的帖子太好看了!我愿意一辈子的看下去!这篇帖子构思新颖,题材独具匠心,段落清晰,情节诡异,跌宕起伏,主线分明,引人入胜,平淡中显示出不凡的文学功底,可谓是字字珠玑,句句经典,是我辈应当学习之典范。大师的话真如“大音希声扫阴翳”,犹如”拨开云雾见青天”,使我等网民看到了希望,看到了未来!晴天霹雳,醍醐灌顶或许不足以形容大师文章的万一;巫山行云,长江流水更难以比拟大师的文才!黄钟大吕,振聋发聩!你烛照天下,明见万里;雨露苍生,泽被万方!透过你深邃的文字,我仿佛看到了你鹰视狼顾,龙行虎步的伟岸英姿;仿佛看到了你手执如椽大笔,写天下文章的智慧神态;仿佛看见了你按剑四顾,江山无数的英武气概!就小说艺术的角度而言,这篇帖子不算太成功,但它的实验意义却远远大于成功本身。正所谓:“一马奔腾,射雕引弓,天地都在我心中!楼主真是英俊潇洒、风流倜傥、玉树临风、年少多金、神勇威武、天下无敌、宇内第一、寂寞高手、刀枪不入、唯我独尊、玉面郎君、仁者无敌、勇者无惧、金刚不坏、英明神武、侠义非凡、义薄云天、古往今来、无与伦比、谦虚好学、不耻下问、聪明伶俐、活泼可爱、待友热情、对敌冷酷、阴险狡诈、无所不为、心狠手辣、无恶不作,对友赴汤蹈火、再所不辞、两肋插刀、枪林弹雨、勇往直前、慷慨大方、头脑精明、仙福永享、寿与天齐、百折不饶、百打不死、侠中豪杰、人中龙凤、有情有义、有胆有色、举世无双、既酷又帅、人之表率、诚实可信、谈吐大方、风度翩翩、气势凌人、气质高贵、单身贵族、貌赛潘安、智胜孔明、勇比子龙、义超关羽、巧越鲁班、至尊至圣、至高无上、华丽绚烂、英勇无比、道德榜样、千杯不醉、坐怀不乱、知识渊博、才高八斗、傲视众生、世外高人、光明磊落、公正无私、震古烁今,第一大英雄大豪杰大侠客大宗师,急如风、静如林、掠如火、不动如山,号称一朵梨花压海棠,人送绰号天下地无所不能玉面小飞龙,英俊与智慧的化身,侠义与仁义的糅合,前辈高人巨侠是也。楼主真不愧为无厘界新一代的开山怪才!本来我已经对这个社区失望了,觉得这个社区没有前途了,心里充满了悲哀。但是看了你的这个帖子,又让我对社区产生了希望。是你让我的心里重新燃起希望之火,是你让我的心死灰复燃,是你拯救了我一颗拨凉拨凉的心!本来我决定不会在社区回任何帖子了,但是看了你的帖子,我告诉自己这个帖子是一定要回的!这是百年难得一见的好贴啊!苍天有眼啊,让我在有生之年得以观得如此精彩绝伦的帖子


你是从哪里抄来的句子啊.
真是百年难得一见的回复贴.
2005-6-17 22:58
0
雪    币: 172
活跃值: (212)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
18
谢谢楼主,正查找这方面的资料,顶一下
2005-12-11 23:52
0
游客
登录 | 注册 方可回帖
返回
//