昨天是11月11日,光棍节,是个值得纪念的日子,因此我决定从今天也就是11月12日开始在看雪论坛上写我的菜鸟日记,不出意外的话,应该是每两天一篇。
刚来看雪,看了一些必须看的须知后,就开始看 CCDebuger的OllyDBG 入门系列,看了
OllyDBG 入门系列(三)时,就想自己分析代码了,在分析到如下代码时出了问题:(00401328 地址处的那条指令)
00401328 |. E8 A5000000 CALL CrackHea.004013D2 ; 关键,要按F7键跟进去
用F7跟进去以后,分析里面的代码
004013D2 /$ 56 PUSH ESI
004013D3 |. 33C0 XOR EAX,EAX
……
……
00401405 |. 81F6 53757A79 XOR ESI,797A7553
0040140B \. C3 RETN
这里面的代码分析了几次都没读懂,后来看了CCDebuger版主的注释,才能勉强懂,但也没全懂。
有以下学得:
CMP AL,2D 原来是比较AL中的字符是否为负号。
SUB AL,30 原来是把字符转化成对应的数字(这一点自己知道,但在分析时想不起
来,比如我们输入的是“3”,这是一个字符,在电脑里存放的是3的
ASCII,要把其转化成数字“3”,就要减去30)
XOR EAX,EDX 如果EDX是-1,那么就是把EAX取反。
OR AL,AL
JNZ SHORT CrackHea.004013F0 这两条指令原来是用来判断是否已把用户输入
的注册码计算完
下面是求助:
求助一:
004013D5 |. 8D35 C4334000 LEA ESI,DWORD PTR DS:[4033C4] ; 把注册码框中的数值送到ESI
这行代码应该是把[4033C4]的偏移地址送入ESI,[4033C4]的偏移地址应该就是4033C4,但注释是“把注册码框中的数值送到ESI”, 后来试着改变注册框中的数值(一开始是12345666,后来是我自己改的45),而在信息栏中,ESI=(恒等于)4033C4,但是后面紧跟的ASCII就变了,一开始是12345666,后来变成45.
这是怎么回事?既然ESI=(恒等于)4033C4,那么ASCII不就应该是4033C4对应的ASCII吗?为什么会发生变化??
求助二:
LEA ECX,DWORD PTR DS:[ECX+ECX*4] 把前面运算后保存在ECX中的结果乘5再送到ECX
LEA ECX,DWORD PTR DS:[EAX+ECX*2] 每位字符运算后的值与2倍上一位字符运算后值相
加后送ECX
这两条指令为什么要这样计算啊??这样计算是为了什么啊?
求助三:
说白了,就是CrackHea.004013D2这个子程序的目的是为了干嘛啊?是为了计算注册框中的计算值吗?应该是为了比较CMP EAX,ESI,但为什么还要进行计算?
[注意]传递专业知识、拓宽行业人脉——看雪讲师团队等你加入!