首页
社区
课程
招聘
[求助]关于0D和反汇编的一些疑问
发表于: 2009-5-20 21:23 3944

[求助]关于0D和反汇编的一些疑问

2009-5-20 21:23
3944
小弟初学破解,对反汇编工具和汇编语言都不是很熟悉,因此自己用VC6.0写了一个C语言的小程序来熟悉一下。。结果有很多疑问,这里提出来,希望看雪的各位高手能指点一下小弟。以下是我写的程序
   #include <stdio.h>
void main()
{
        int password=123456;
        int input=0,i=0;
        while(i<=3&&password!=input)
        {
        printf("请输入密码\n");
        scanf("%d",&input);
        i++;
        if(password!=input)
                printf("密码错误");
        else
        {
                printf("密码正确");
                break;
        }
        }
}
编译后有OD打开生成的EXE文件(debug版)的,发现OD停留在00401200处
如图
看一下代码发现不是我写的程序的代码。。然后往上找在发现了大量的int 3这种代码(不知道什么用)终于在00401000附近找到了我写的代码如图2

经过小小的修改后实现了一个小小的破解。。不过,使用后发现问题N多,第一个问题是,exe文件的入口为什么不是程序开始的地方呢?文件入口的那些代码是干什么用的。。第二个问题,我发现整个OD里面有很都代码,可问题是我这么个小小的程序根本只要几行代码就行了,那些剩下的代码到底有什么用?我试着nop了底下那些代码保存后发现程序还是能运行。

[培训]内核驱动高级班,冲击BAT一流互联网大厂工作,每周日13:00-18:00直播授课

上传的附件:
收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 2110
活跃值: (21)
能力值: (RANK:260 )
在线值:
发帖
回帖
粉丝
2
有一种东西叫做库。

编译器负责将你写的代码翻译成目标格式。

连接器将编译器生成的文件与为中的代码连接到一起,才构成了最后的程序。

手动执行一下cl  /c和link命令,搞清楚编译器和连接器各自的作用。

PS:程序不是一定要带有库中的代码的,如果确定不使用库,可以不把库连接进来。
2009-5-20 22:27
0
雪    币: 576
活跃值: (1495)
能力值: ( LV12,RANK:210 )
在线值:
发帖
回帖
粉丝
3
二楼的答案正解,我在解释一下啊!

计算机有三种编程语言,最底层的是用“0,1”编程(现在谁要是会0,1编程。那他就不是人了,他是神。)。中间的是汇编语言(精通汇编,代码的价格是论行算的,一行代码8美元哦!),高级语言(c,c++,Delphi等)。而计算机能识别的就是“0”和“1”,所以,你用高级语言要通过

高级语言程序-->编译程序-->汇编程序-->绝对的机器码(也就是0和1)

举个例子吧:printf,是一个关键字,是输出的意思,但是计算机不认识printf,这时候,就需要有部分代码告诉计算机printf是输出,就好比你和你弟弟的同学,你们两个不认识,但是,经过你弟弟一介绍。你们就认识了。

说了这么多,不知道你理解不,不过我的表达能力不是很好。你就将就着看吧,高手莫笑我呀!
2009-5-21 07:41
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
还是不明白这库跟我的问题有什么关系..难道OD载入的位置是库开始的位置而不是程序开始的位置?还有这么多的代码是库的代码?应该不会吧?如果调用一个库的函数就要把库的全部内容加载那不是太大了.
2009-5-21 09:25
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
5
载入处是初始化部分,这是编译器作的工作,
2009-5-21 09:33
0
雪    币: 415
活跃值: (34)
能力值: ( LV5,RANK:60 )
在线值:
发帖
回帖
粉丝
6
你需要看编译原理,这本书。比我们哪个的回答都正确
2009-5-21 09:34
0
雪    币: 2384
活跃值: (766)
能力值: (RANK:410 )
在线值:
发帖
回帖
粉丝
7
VC的默认真正入口函数是叫WinMainCRTStartup(mainCRTStartup),而不是你的WinMain(main)函数,在这个函数里VC会初始化各种数据,之后才会调用你写的的WinMain(main)函数,所以你的程序才会有那么多代码。
2009-5-21 09:46
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
哦。。谢谢各位大虾
2009-5-21 18:02
0
雪    币: 1753
活跃值: (840)
能力值: ( LV8,RANK:120 )
在线值:
发帖
回帖
粉丝
9
前面载入看到的是 该程序的启动函数
``执行完启动函数才会跳转到`你所写代码的入口~
上传的附件:
2009-5-21 18:17
0
游客
登录 | 注册 方可回帖
返回
//