首页
社区
课程
招聘
[求助]怎么做到的?谢谢~~~~~~~
发表于: 2005-12-31 23:53 3807

[求助]怎么做到的?谢谢~~~~~~~

2005-12-31 23:53
3807
来这个论坛好一阵子了
看到论坛的规定,一般情况也不敢发贴
看了很长时间的精华贴,虽然有了不少进步
但是有一种情况,我想了半天,也没想出来~~~
明天是元旦,于是我大着胆子问问老大们一个很难的问题:

我看到别人分析反汇编的时候,在后边加的注释
他们是怎么知道的?
他们是怎么知道些软件的作者的算法的?
也就是说,通过学什么知识能做到这些呢?

比如说这个例子:

0167:0047AD4B  MOV      EAX,[EBP-44]
0167:0047AD4E  LEA      EDX,[EBP-40]
0167:0047AD51  CALL     004683F4
0167:0047AD56  MOV      EDX,[EBP-40]     ;这是真的注册码的内存地址,是以后的分析得出的!
0167:0047AD59  POP      EAX              ;假的注册码99999999是我输入的
0167:0047AD5A  CALL     00404B84         ;这可是关键的 call主要作用对输入的注册码进行验证!
0167:0047AD5F  JNZ      0047ADC4         ;这可是关键jmp一跳就完了!
0167:0047AD61  MOV      EAX,0047AEE8
0167:0047AD66  CALL     00436ED4
0167:0047AD6B  LEA      EAX,[EBP-50]
0167:0047AD6E  CALL     00468A04
0167:0047AD73  MOV      EAX,[EBP-50]
下面让我们看看 call  00404b84的程序吗!
167:00404B84  PUSH     EBX
0167:00404B85  PUSH     ESI
0167:00404B86  PUSH     EDI
0167:00404B87  MOV      ESI,EAX         ;用esi做eax 的镜像
0167:00404B89  MOV      EDI,EDX         ;用edi做edx的镜像
0167:00404B8B  CMP      EAX,EDX         ;比较真假注册码的地址是否一样,一样就跳到注册码错误
0167:00404B8D  JZ       NEAR 00404C22
0167:00404B93  TEST     ESI,ESI         ;看假注册吗的地址是不是0是零,跳到错误
0167:00404B95  JZ       00404BFF
0167:00404B97  TEST     EDI,EDI         ;看注册吗的地址是不是0是零,跳到错误
0167:00404B99  JZ       00404C06
0167:00404B9B  MOV      EAX,[ESI-04]    ;获取假注册吗的位数放到eax
0167:00404B9E  MOV      EDX,[EDI-04]    ;获取真注册吗的位数放到edx
0167:00404BA1  SUB      EAX,EDX         ;比较真假注册吗位数的大小
0167:00404BA3  JA       00404BA7
0167:00404BA5  ADD      EDX,EAX         ;假注册吗的位数放到edx
0167:00404BA7  PUSH     EDX            
0167:00404BA8  SHR      EDX,02           ;移2位
0167:00404BAB  JZ       00404BD3          ;为零跳到错误
0167:00404BAD  MOV      ECX,[ESI]          ;获取假注册吗的前4位
0167:00404BAF  MOV      EBX,[EDI]          ;获取真注册吗的前四位
0167:00404BB1  CMP      ECX,EBX          ;  比较
0167:00404BB3  JNZ      00404C0D         ;不相等跳到错误
0167:00404BB5  DEC      EDX              ;把输入的注册吗的位数再减1
0167:00404BB6  JZ       00404BCD         ;为零跳到错误
0167:00404BB8  MOV      ECX,[ESI+04]      ;获取假注册吗的后四位
0167:00404BBB  MOV      EBX,[EDI+04]      ;获取真注册吗的后四位
0167:00404BBE  CMP      ECX,EBX           ;比较
0167:00404BC0  JNZ      00404C0D          ;不等跳到错误
0167:00404BC2  ADD      ESI,BYTE +08      ;把假注册吗的地址加8位
0167:00404BC5  ADD      EDI,BYTE +08      ;把真注册吗的地址家8位
0167:00404BC8  DEC      EDX               ;再把假注册吗的位数再减1
0167:00404BC9  JNZ      00404BAD          ;不为零跳到上面再比较
0167:00404BCB  JMP      SHORT 00404BD3   
0167:00404BCD  ADD      ESI,BYTE +04
0167:00404BD0  ADD      EDI,BYTE +04
0167:00404BD3  POP      EDX                ;取出保存假注册吗的位数
0167:00404BD4  AND      EDX,BYTE +03       ;把假注册吗的位数和三与一下
0167:00404BD7  JZ       00404BFB           ;为零跳到错误
0167:00404BD9  MOV      ECX,[ESI]          ;取出假注册吗后面的4位数
0167:00404BDB  MOV      EBX,[EDI]          ;取出真注册吗后面的4位数
0167:00404BDD  CMP      CL,BL              ;比较
0167:00404BDF  JNZ      00404C22            ;不相等跳到错误
0167:00404BE1  DEC      EDX                 ;把假注册吗的位数减一
0167:00404BE2  JZ       00404BFB            ;为零跳到错误
0167:00404BE4  CMP      CH,BH               ;比较前两位   
0167:00404BE6  JNZ      00404C22            ;不等跳到错误
0167:00404BE8  DEC      EDX                 ;把假注册吗的位数再减一
0167:00404BE9  JZ       00404BFB            ;为零跳到错误  
0167:00404BEB  AND      EBX,00FF0000         
0167:00404BF1  AND      ECX,00FF0000
0167:00404BF7  CMP      ECX,EBX              ;比较后两位
0167:00404BF9  JNZ      00404C22             ;不等跳到错误
0167:00404BFB  ADD      EAX,EAX                          
0167:00404BFD  JMP      SHORT 00404C22
0167:00404BFF  MOV      EDX,[EDI-04]

看,后面的注释多么详细~~
难道就是通过前面的指令吗?
我自学汇编一个多月
我只能看出什么比较呀,跳转呀之类的
我为什么就看不出这些算法呢?

高手们,我应该学些什么知识才能向这些高手那样
一眼就能看出这些复杂的算法呢?

谢谢~~~~

[培训]传播安全知识、拓宽行业人脉——看雪讲师团队等你加入!

收藏
免费 0
支持
分享
最新回复 (8)
雪    币: 207
活跃值: (84)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
2
你先看看加密与解密一书
看看实例
2006-1-10 02:18
0
雪    币: 71
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
3
谢谢
但我还是不太明白!!

觉得有劲没地方使
2006-1-13 22:03
0
雪    币: 245
活跃值: (55)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
4
我也是呀楼主,到底高手是怎么炼成的呢?
2006-1-14 20:07
0
雪    币: 206
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
5
高手不是靠灌水炼成的就是了~

搞这些东西,1靠脑筋2靠耐心外加一点天才在里面。
当然努力是不可缺少之物~

多多看高手贴,多多自己动手,有些东西自然就明白了~

千万不要跟我一样,头天破解成功一个程序,第二天居然忘记是如何破解的~
2006-1-14 22:01
0
雪    币: 200
活跃值: (10)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
6
顶 好好学习  顶
2006-1-16 17:36
0
雪    币: 212
活跃值: (40)
能力值: ( LV4,RANK:50 )
在线值:
发帖
回帖
粉丝
7
最好自己写一个,然后反汇编了学。思路与算法自己心里有数再对照着学。如果还是不懂就没办法了
2006-1-16 18:15
0
雪    币: 50
活跃值: (145)
能力值: ( LV12,RANK:290 )
在线值:
发帖
回帖
粉丝
8
先去找一些简单的软件,好久以前的练手
2006-1-16 23:58
0
雪    币: 1334
活跃值: (15)
能力值: ( LV2,RANK:10 )
在线值:
发帖
回帖
粉丝
9
主要留意标志寄存器的状态,因为反编译出来并不是纯ASM,所以还要看标志寄存器
2006-1-17 00:27
0
游客
登录 | 注册 方可回帖
返回