WEB开发网
开发学院网络安全黑客技术 OllyDBG 入门系列(三)-函数参考 阅读

OllyDBG 入门系列(三)-函数参考

 2010-09-30 16:54:16 来源:WEB开发网   
核心提示: 怎么办?别急,我们按一下ALT+F9组合键,OllyDBG 入门系列(三)-函数参考(5),呵,回来了:00401328|.E8A5000000CALLCrackHea.004013D2;关键,如果我们输入的是负数,则此处功能就是把EAX中的值取反00401404|.5EPOPESI;ESI出栈

怎么办?别急,我们按一下 ALT+F9 组合键,呵,回来了:

00401328 |. E8 A5000000        CALL CrackHea.004013D2                     ; 关键,要按F7键跟进去
0040132D |. 3BC6               CMP EAX,ESI                                ; 比较
0040132F |. 75 42              JNZ SHORT CrackHea.00401373                ; 不等则完蛋

光标停在 00401328 地址处的那条指令上。现在我们按 F7 键跟进:

004013D2 /{$selection}nbsp;56                PUSH ESI                                    ; ESI入栈
004013D3 |. 33C0              XOR EAX,EAX                                 ; EAX清零
004013D5 |. 8D35 C4334000     LEA ESI,DWORD PTR DS:[4033C4]               ; 把注册码框中的数值送到ESI
004013DB |. 33C9              XOR ECX,ECX                                 ; ECX清零
004013DD |. 33D2              XOR EDX,EDX                                 ; EDX清零
004013DF |. 8A06              MOV AL,BYTE PTR DS:[ESI]                    ; 把注册码中的每个字符送到AL
004013E1 |. 46                INC ESI                                     ; 指针加1,指向下一个字符
004013E2 |. 3C 2D             CMP AL,2D                                   ; 把取得的字符与16进制值为2D的字符(即“-”)比较,这里主要用于判断输入的是不是负数
004013E4 |. 75 08             JNZ SHORT CrackHea.004013EE                 ; 不等则跳
004013E6 |. BA FFFFFFFF       MOV EDX,-1                                  ; 如果输入的是负数,则把-1送到EDX,即16进制FFFFFFFF
004013EB |. 8A06              MOV AL,BYTE PTR DS:[ESI]                    ; 取“-”号后的第一个字符
004013ED |. 46                INC ESI                                     ; 指针加1,指向再下一个字符
004013EE |> EB 0B             JMP SHORT CrackHea.004013FB
004013F0 |> 2C 30             SUB AL,30                                   ; 每位字符减16进制的30,因为这里都是数字,如1的ASCII码是“31H”,减30H后为1,即我们平时看到的数值
004013F2 |. 8D0C89            LEA ECX,DWORD PTR DS:[ECX+ECX*4]            ; 把前面运算后保存在ECX中的结果乘5再送到ECX
004013F5 |. 8D0C48            LEA ECX,DWORD PTR DS:[EAX+ECX*2]            ; 每位字符运算后的值与2倍上一位字符运算后值相加后送ECX
004013F8 |. 8A06              MOV AL,BYTE PTR DS:[ESI]                    ; 取下一个字符
004013FA |. 46                INC ESI                                     ; 指针加1,指向再下一个字符
004013FB |> 0AC0              OR AL,AL
004013FD |.^ 75 F1            JNZ SHORT CrackHea.004013F0                 ; 上面一条和这一条指令主要是用来判断是否已把用户输入的注册码计算完
004013FF |. 8D040A            LEA EAX,DWORD PTR DS:[EDX+ECX]              ; 把EDX中的值与经过上面运算后的ECX中值相加送到EAX
00401402 |. 33C2              XOR EAX,EDX                                 ; 把EAX与EDX异或。如果我们输入的是负数,则此处功能就是把EAX中的值取反
00401404 |. 5E                POP ESI                                     ; ESI出栈。看到这条和下一条指令,我们要考虑一下这个ESI的值是哪里运算得出的呢?
00401405 |. 81F6 53757A79     XOR ESI,797A7553                            ; 把ESI中的值与797A7553H异或
0040140B \. C3                RETN

编缉推荐阅读以下文章

  • OllyDBG 入门系列(五)-消息断点及 RUN 跟踪
  • OllyDBG 入门系列(四)-内存断点
  • OllyDBG 入门系列(二)-字串参考
  • OllyDBG 入门系列(一)-认识OllyDBG

上一页  1 2 3 4 5 6 7  下一页

Tags:OllyDBG 入门 系列

编辑录入:爽爽 [复制链接] [打 印]
赞助商链接