首页
社区
课程
招聘
[旧帖] [原创]从零开始学免杀与加壳(三) 分析gh0st运行原理1 0.00雪花
发表于: 2009-11-23 18:01 2182

[旧帖] [原创]从零开始学免杀与加壳(三) 分析gh0st运行原理1 0.00雪花

2009-11-23 18:01
2182
(题外话)作为一个程序员的忠告:
哈哈 我又来了,哎每天都有新发现,每天都有好心情,希望大家跟我一样都有个好心情,哈哈,在这里我告诉大家一个实现目标的好方式,那就是把目标定得容易实现一点(路人甲:靠!我早就知道了)其实知道和行动是有很大差别的,不过我是行动了,我定了一个计划,就是做一个星期的瑜伽,哈哈,告诉大家,我竟然实现了,看文章的读者肯定无奈了,正犯嘀咕:“你呀这么好的时光你去做瑜伽干什么啊?”说句实在话,我现在是一个今天(2009年10月07日 阴历)刚满23岁的年轻小伙子,从事软件行业也2年了,但就是这两年时间,我发现我体力直线下降,头疼的次数越来越多,肚子越来越大,典型一个要预备步入中年期的人了,遥想20岁的时候,我还在大学踢足球,唱歌,现在,都快成了只会敲键盘的“呆子”了,当然,肯定还有很多编码厉害,头脑厉害的人,身体一样好,但是肯定还有一部分人跟我一样,业余生活就是去玩一盘真三或者是一盘DOTA,在或者是一些其他的电脑游戏,很少体育活动了,所以,希望广大程序员,在看了这个忠告后,没有体育活动的朋友,尽量找一个你愿意,或者你觉得可以实行的一个运动,尝试着坚持一个星期,你会发现,坚持一个东西其实就是一个星期而已,而且除了电脑,还有很多让你心情放松的东西,哈哈,多了多了,说得多了,但是这个是我亲身体会,希望大家也有个好身体!以下是我练瑜伽的那个视频,有兴趣的朋友可以去练练!
http://www.tudou.com/programs/view/DvKrR1KmZPI/
好了,题外话就到这,该进入正题了

今天学习的思路我觉得是这样的:
    从gh0st(服务端:也就是我们常说的“木马”)运行的入口开始理清整个程序运行的过程,然后针对涉及到的每个知识点,可以做一个简单介绍(我也是刚学,不对的地方,还希望知道的朋友来指点指点),然后做一个例子,然后再分析,直到我们自己编写的程序,编程一个“木马”为止。

1.我们先打开VC,然后Open gh0st源码,这个过程已经在上一篇文章说了,如果有不明白的朋友可以去上一篇文章看看
2.在左边的框里,找到install.cpp打开他

中间的代码区就出现代码了,接下来我们分析代码了

3.程序入口:WinMain(这个函数就是当你点击一个exe程序时候运行的第一个函数,代码就是从这开始的)我们来看看他的申明
int APIENTRY WinMain(HINSTANCE hInstance,
                     HINSTANCE hPrevInstance,
                     LPSTR     lpCmdLine,
                     int       nCmdShow)

找到上面这段代码,这个是WinMain的完整申明,第一个参数是。。。其实也不知道是什么意思,我们可以有两种方式去知道他是代表什么,一个是百度或者GOOGLE,还有一种是查MSDN,呵呵,这里我们就选择第二种吧,首先我们下载一个不完整版的MSDN,因为完整的太大了,我们就先下载一个WIN32的API先,在看雪的官方网站有下的,一下是链接
http://www.pediy.com/Document.htm
有两个版本的
Win32 API reference 8M   较完整的Win32 API手册(英文).  
Windows API 函数(中文)   774个Win32函数,中文,CHM格式。
一看就明白,我两个都下了,英文的比较全,中文的很多函数都没,呵呵,不怕就算没有我们有百度和GOOGLE
等下好了API文档之后,我们打开英文的那个API文档,就是那个问号的图标,我们就会看到下面的界面

我们选择索引,然后把WinMain这个函数名复制进去,点击显示,就会看到一个更大更详细的框了,这里就有介绍这个函数是干什么用的,参数是干什么的了,英语好的朋友现在就占便宜了,哈哈,我英语也是个二把手,所以就不翻译了,我也就打算说一个参数,就是,hInstance参数,不懂得朋友就会郁闷了,怎么只说这个一个,其实我们学编程要习惯一个学习习惯,拿到一个新鲜东西的时候,我们不要管他所有的东西是干什么的,我只要关心我们要用到的,这里我们就用到了一个东西hInstance参数,这个参数就是应用程序一个实例,你也可以把他叫做句柄,随便你怎么叫,只有用到了你就能体会了。哈哈

接下来我们继续分析代码
	//////////////////////////////////////////////////////////////////////////
	// 让启动程序时的小漏斗马上消失
	GetInputState();
	PostThreadMessage(GetCurrentThreadId(),NULL,0,0);
	MSG	msg;
	GetMessage(&msg, NULL, NULL, NULL);
	//////////////////////////////////////////////////////////////////////////

这段代码的作用就像那个注释里写的那样,让程序加载的时候,漏斗动画马上消失的作用,那我们就不去分析他了,因为就算你分析清楚了他还是这样用,所以你就照写就是了,至少我认为我学会让小漏斗消失的方法了,原因很简单,只要复制这三个函数就可以了,哈哈

接下来定义了4个变量
	char	*lpEncodeString = NULL;
	char	*lpServiceConfig = NULL;
	char	*lpServiceDisplayName = NULL;
	char	*lpServiceDescription = NULL;

这里需要说明一下的是每个变量名前面的那个 * 号,这个是表示指针的意思,指针是什么呢?就好象一个邮箱,邮箱他有自己的“地址”,邮箱里还放了自己“物品”,当你要查找这个邮箱的地址是,就去查找地址,想要拿去邮寄的物品时,就拿物品,就这么简单,你也不要认为他有多神秘,还记得大学我刚学C++的时候,光指针就研究了一个通宵,简直是。。。哎。所以不要走我的老路,等你需要理解一个真正要用到东西的时候再去理解他,如果不用它,你就别去碰他。
    这里的4个变量我们先不去解释他的潜在含义,我们看看类型,都是char*型的,char*是一个字符指针,比如说“你好啊?”,“abcd”,“哈哈ss#$%”,这些都是可以的,知道这些就够了,我们继续看下面的

。。。。。 没时间了,我要下班了,我也是一个苦命的程序员啊,早9晚5。
总结一下这篇教程学到知识吧:
1 WinMain 函数的作用 和 该函数的第一个参数的字面意思
2 利用API文档查找相应的函数解释
3 程序加载,小漏斗动画消失的方法
4 字符指针。

很多吧,呵呵 ,每天坚持学一点,相信大家肯定会成为高手。哈哈

[课程]Android-CTF解题方法汇总!

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 16
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
2
看不懂?
2009-11-24 17:17
0
雪    币: 139
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
嘿嘿 有点意思。
2010-3-3 20:39
0
雪    币: 203
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
每天坚持学一点
谢谢
2010-5-22 12:45
0
雪    币: 3
活跃值: (12)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
一起学习了 呵呵
2010-5-22 12:57
0
雪    币: 173
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
学习一下!~~
2010-5-22 13:22
0
雪    币: 9
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
7
路过,顶一下,
2010-5-24 17:41
0
雪    币: 15
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
继续学习ing
2010-5-24 17:44
0
雪    币: 58
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
支持!期待后续章节!
2010-6-3 20:59
0
游客
登录 | 注册 方可回帖
返回
//