首页
社区
课程
招聘
[旧帖] [原创]一切浅中行 ---新兵日记 0.00雪花
发表于: 2008-3-10 16:41 5964

[旧帖] [原创]一切浅中行 ---新兵日记 0.00雪花

2008-3-10 16:41
5964
看雪中有这个新兵板块,但是实际上还有很多想涉足这个行业(不知道算不算行业)的人连新兵的等级都不够。我在93年学习了汇编(那本表面黄黄的书),95年(记得是95年)买了第一本《加密与解密》,后来弄丢了,惭愧。
很早就来过看雪,可是没坚持下来,现在下定决心涉足这个行业,勉强算个新兵。

看了很多资料,初级,中级,高级的,只得到一个结论,就是加密解密不是一天就能学会的,所以决定多学习几天,为了督促自己学习下去,决定日记的形式记录一下学习过程。网上的资料基本上上来就给读者一顿猛捶,告诉你要学习很多知识才能开始这个东方不败的秘籍学习。我好几次就是被这猛捶给打退的(尽管要求的知识我都学过,可这威慑力还是不小)。
所以在此尽量用简单易懂的话记录学习得到的经验技术。给后来的新兵铺点平坦的路。

注意:日记中说的不一定都是对的,所以大家不要当成教材来看,如果有怀疑或者明确认为不对的地方,请指正。没用的回帖我会删除,有用的会整理。大家多交流,多讨论,希望早点步入新兵的行列。

由于是在单位和家里同时写,所以会出现写到一半就发表的情况,大家见谅,不过我觉得这样更真实。

好,演出开始了-----------

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

收藏
免费 0
支持
分享
最新回复 (21)
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
先占个楼用来汇总日记
2008-3-10 16:42
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
3
再站个楼用来补充前两天的日记,我不是从今天开始学习的。

08年03月06号 也没早开始几天。。。。

软件开发语言和我们说的中文一样,而且比中文的逻辑低得多得多,中文你都会,学习语言一定没问题,我经常这么鼓励自己。
学习以OllyDbg 1.10为基础。我用的是英文版。
用OllyDbg打开了一个crackme,左上边的区域里面全都是密密麻麻的代码(汇编代码)。。。。。。看来人家说的是对的,要先学习点汇编了。不过汇编学起来比较枯燥,看看就没兴趣了,还是从这个crackme开始学习汇编吧。
每天都有个主题,这天我复习了一下寄存器。
主要的寄存器有

4个数据寄存器(EAX,EBX,ECX,EDX)都是32位的。
EAX的下16位是AX,AX的上8位是AH,下8位是AL。EBX,ECX,EDX依此类推。

EAX 一般用来做返回值,然后配合CMP,JNZ啥的,玩死人。。。

ECX 经常用于记数。

2个变址和指针寄存器(EDI,ESI)
EDI的下16位是DI,ESI的下16位是SI,DI,SI不可再分割成8位。

EDI 和ESI可以用来进行字符串操作
比如: 将字符串放到  [esi]  
然后 inc esi
然后 byte ptr [esi] 就可以。。。。
都是32位的了,用EAX是不是也一样?

2个指针寄存器(EBP,ESP)
EBP的下16位是BP,ESP的下16位是SP,BP,SP不可再分割成8位。

在win32的环境下EBP寄存器用与存放在进入call以后的ESP的值,便于退出的时候回复ESP的值,达到堆栈平衡的目的。
这也就是为什么call函数中经常有如下结果的原因。

push ebp
mov ebp, esp
leave                         等同于     pop ebp
retn

对于上面的这种情况,如果有[ebp+n]的处理,那就是在调用堆栈中的数据了。

push ebp ;保存当前ebp
mov ebp,esp ;EBP设为当前堆栈指针
sub esp, xxx ;预留xxx字节给函数临时变量.

1个指令指针寄存器(EIP) EIP主要用来存放下一步要执行命令的地址。

2008-3-10 16:42
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
4
08年03月10号 进展缓慢呀。。。。。

几个简单的汇编命令

MOV上面的图为记了,可以大概明白。

MOV DWORD PTR DS:[402004],12345678  该地址的数据:78 56 34 12

ADD,SUB 加减算
INC,DEC 自加自减 相当于 i++, i--

00401000 MOV EAX,3                  把3放到EAX
00401005 MOV EBX,5                  把5放到EBX
0040100A ADD EAX,EBX                EAX+EBX 结果放到EAX
0040100C SUB EAX,2                  EAX-2   结果放到EAX
0040100F SUB EBX,EAX                EBX-EAX 结果放到EBX
00401011 INC EAX                    EAX-1   结果放到EAX
00401012 DEC EBX                    EBX-1   结果放到EBX

MUL, IMUL  

MUL src

src的位数不同,结果存放位置不同

src 位数      8                   16                   32
              AL*src              AX*src               EAX*src
结果存放      AX                  DX,AX                EDX,EAX

IMUL src              和MUL src一样
IMUL desc, src        desc*src 结果放在desc,desc必须是寄存器,src可以是寄存器,内存参照和数值
IMUL desc, src1, src2 src1*src2结果放在desc, desc必须是寄存器,src1可以是寄存器,内存参照, src2是数值

DIV src

srvc位数          实行的计算       商       余数
BYTE              AH:AL/src        AL       AH
WORD              DX:AX/src        AX       DX
DWORD             EDX:EAX/src      EAX      EDX
2008-3-10 16:43
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
5
祝楼主学习愉快,感觉能坚持的人最难能可贵
2008-3-10 17:25
0
雪    币: 1505
能力值: (RANK:210 )
在线值:
发帖
回帖
粉丝
6
别抱着这个心理发帖子,火不火都无所谓啊,只要能坚持别人就会很敬佩的,楼主多发收获让我们学习 嘿嘿
2008-3-10 17:27
0
雪    币: 4583
活跃值: (3567)
能力值: ( LV12,RANK:230 )
在线值:
发帖
回帖
粉丝
7
前面你不是说"我在93年学习了汇编",怎么这里又来了一段看上去自相矛盾的话啊,不明白。
2008-3-11 09:05
0
雪    币: 201
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
8
大家一起加油吧,俺也没入门,白天看教程,晚上看汇编。
2008-3-11 12:01
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
9
08年03月12号

关于跳转命令

JMP dest 就是直接跳转到dest, 把desc记入EIP。

CMP desc, src 比较desc和src,实际上是根据desc-src的结果设置各个标识位;
JE  比较结果相同就跳转;
JNE 比较结果不同就跳转;
JZ  ZF为0跳转;
JNZ ZF不为0跳转;
JB  desc < src 跳转;
JNB desc >= src 跳转;
JA  desc > src 跳转;
JNA desc <= src 跳转;

汇编语言中两个数比较实现转移时要看这两个是无符号数还是带符号数:
无符号数的高于转移用JA(JMP ABOVE),低于转移用JB(JMP BELOW);
带符号数的大于转移用JG(JMP GREATER),小于转移用JL(JMP LESS)。

TEST 配合 JNZ等               执行两个操作数的逻辑与运算,并更新标志位。该操作只修改标志位,不保留运算结果值。

TEST EAX, EAX                  如果TEST的目的和源两个操作数为同一个的时候,就是判断这个操作数是否为零。
JNZ XXXXXXXX

OR Al, AL                      判断AL是否为零,只有为零自身或的结果才能为零
JNZ XXXXXXXX
2008-3-11 13:43
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
10
同学习,共勉!!!
2008-3-11 17:05
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
11
的楼,一起学习.
EDI和ESI是干什么的?经常看见他们,但是对他们还是陌生的很啊
2008-3-11 21:24
0
雪    币: 433
活跃值: (1875)
能力值: ( LV17,RANK:1820 )
在线值:
发帖
回帖
粉丝
12
写日记啊,有点偷窥他人隐私的感觉,呵呵…
2008-3-11 21:34
0
雪    币: 224
活跃值: (10)
能力值: ( LV6,RANK:90 )
在线值:
发帖
回帖
粉丝
13
贵在坚持  坚持看你的日记  呵呵
2008-3-12 10:04
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
14
也站一层楼吧,楼主的学习精神可嘉,值得学习,讲到汇编,学习起来是满枯燥的,我每次看 汇编时间最长不会超过15分钟就没兴趣了,怪不的我学习成绩一直不好,呵呵
2008-3-12 14:45
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
15
这两个都是计算机里的32位通用寄存器
它的低16位对应以前CPU中的SI和DI
SI 存储器指针、串指令中的源操作数指针
DI 存储器指针、串指令中的目的操作数指针
2008-3-12 16:08
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
16
08年03月14日

几个函数,先记这

GetModuleHandleA--处理 Ansi 字符串
GetModuleHandleW--处理 Unicode 字符串
2008-3-14 10:44
0
雪    币: 109
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
17
你的日志我都COPY下来了  有空研究研究 嘿嘿。。。
我新手!
2008-3-14 12:32
0
雪    币: 200
能力值: (RANK:10 )
在线值:
发帖
回帖
粉丝
18
向楼主学习,坚持住
2008-3-14 13:12
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
19
太谢谢你了。新手就的有你这样领路的人在啊,!!!!
2008-3-14 18:00
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
20
08年03月15日

PE是Portable Executable File Format(可移植的执行体)简写,它是目前Windows平台上的主流可执行文件格式。

SEH : SEH("Structured Exception Handling"),即结构化异常处理.是操作系统提供给程序设计者的强有力的处理程序错误或异常的武器.

http://www.pediy.com/bbshtml/bbs4/kanxue310.htm
http://www.pediy.com/bbshtml/BBS4/kanxue370.htm

OEP : 程序的入口点,软件加壳就是隐藏了OEP(或者用了假的OEP), 只要我们找到程序真正的OEP,就可以立刻脱壳。
2008-3-15 16:33
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
21
汇编我也学的七七八八了`~~现在的困难是怎样找入口和出口~~~怎样去断点等等.......楼主有这方面的心得吗??可以分享一下吗??自己摸索了很就,手动脱壳还没有成功过~~~
2008-3-15 17:03
0
雪    币: 208
活跃值: (10)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
22
都说了我是新兵,而且我的方向和你不一样,我不是学习脱壳。我主要向学习逆向。你手动脱壳还没成功过,我还没开始过,就做了几个crackme。只能同情你。
2008-3-15 17:46
0
游客
登录 | 注册 方可回帖
返回
//