<转>我对菜鸟成长的看法

俺发现这里有很多人不懂汇编,居然也在学破解。

俺认为,不懂汇编的人永远只能是菜鸟!

也许你认为不懂汇编也能够从寄存器或堆栈中找到注册码,可是用
注册码 = f(用户名或机器码)  算法的软件肯定会越来越少,而用
F(注册码,用户名或机器码) 算法会成为主流,应用程序本身将不
再含注册机功能,真正的注册码也永远不会在寄存器或内存中出现,
你上哪找去?

也许你认为找不到注册码还可以爆破,但是你找到爆破点的依据不
是靠理解了程序的算法,而是根据程序在完成注册子过程中提供的
各种操作提示信息,但是程序可以在完成注册子过程之外任意可能
的地方重新验证注册码而且不做任何提示就取消注册标志,你将连
这些重新验证的地方都找不到?怎么爆破?事实上程序可以有无数
种方法让得不到真正注册码的爆破者失去注册资格,这样爆破最终
还是死路一条!

所以,破解学习的正道还是要研究算法,要能够读懂汇编代码,最
终要能够自主制作注册机。

俺学破解也只有一个星期的时间,俺也不懂汇编,但是俺懂C++,
了解编程的原理,所以能够很快大致地理解汇编,仅仅知道汇编指
令的含义是不够的,这里将我对汇编的一些理解罗列如下:

1、关于函数调用,在分析汇编代码时总是要遇到无数的Call,对
  于这些Call,尽量要根据Call之前传递的参数和Call的返回值
  来判断Call的功能,特别当调用的是系统函数时,不要见Call
  就跟,在Call之前所做的所有PUSH动作以及对寄存器的操作都
  可能是在给函数传递参数,而函数的返回值十有八九在 EAX里
  面,因为程序绝大多数都使用高级语言开发,而几乎所有的高
  级语言编译器都默认将函数的返回值存放到EAX。

2、关于堆栈,善于使用 ESP会收到事半功倍的效果,在一个算法
  中,任何可能使用的常量、变量和函数地址都必然在当前 ESP
  中留下蛛丝马迹,由于变量是以地址的形势进行存储的,所以
  建议经常使用dd ESP指令来观察堆栈内容,注意在汇编代码中
  凡是[ESP+XXXXXXXX]都代表着堆栈中的第XXXXXXXX个房间住的
  那个房客。

3、关于变量的赋值,能否了解到对变量的赋值过程在算法研究中
  是非常重要的。由于变量是用地址访问的,,因此对形如
  MOV [AAA],BBB
  的代码要高度关注,它通常是修改变量(地址为AAA,或AAA为
  寄存器时地址为AAA的值)的值为BBB(BBB为寄存器时取BBB的
  值)。

4、另外,汇编中会有很多特定的结构与高级语言中的语句相对应,
  如最简单的

  001 CMP AAA,BBB
  002 JNZ 00N
  003 ...
  ...
  00N ...
  相当于
  if(AAA==BBB){003...00M}
 
  001 MOV ESI 00000000
  002 MOV EBX 0000000A
  003 ...
  00K INC ESICMP ESI EBX
  00L CMP ESI EBX
  00M JL  003
  00N ...  
  相当于
  for(int i=0;i<10;i++){003...00J}

  001 MOV EDI 00000004
  002 AND EAX 00000003
  003 JMP [EAX+EDI]
  004 ...
  005 ...
  006 ...
  007 ...
  相当于
  switch(EAX%4)
  {
     case 0:004;
     case 1:005;
     case 2:006;
     case 3:007;
  }  
 
   等等,这些结构都必须熟悉。

   说到底,俺自己也是菜鸟一个,遇到了麻烦,在这里等高手解答,闲来无
事,就灌一篇激励各位菜鸟朋友上进吧!

你可能感兴趣的:(成长)