OllyDBG 入门系列(三)-函数参考
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
这里留下了一个题目:那个 ESI 寄存器中的值是从哪运算出来的?先不管这里,我们接着按 F8 键往下走,离开 0040140B 地址处的那条 RETN 指令(这里可以经过在调试选项的“命令”标签中勾选“使用 RET 取代 RETN”来更改前往指令的表现方式),再按一下 F8,我们就走出 00401328 地址处的那个 CALL 了。现在我们回到了这里:
0040132D |. 3BC6 CMP EAX,ESI ; 比较
0040132F |. 75 42 JNZ SHORT CrackHea.00401373 ; 不等则完蛋
光标停在了 0040132D 地址处的那条指令上。凭据后面的阐发,我们晓得 EAX 中寄存的是我们输入的注册码经过盘算后的值。我们来看一下信息窗口:
ESI=E6B5F2F9
EAX=FF439EBE
左键选择信息窗口中的 ESI=E6B5F2F9,再按右键,在弹出菜单上选“修正寄存器”,我们会看到这样一个窗口:
- 文章作者: 福州军威计算机技术有限公司
军威网络是福州最专业的电脑维修公司,专业承接福州电脑维修、上门维修、IT外包、企业电脑包年维护、局域网网络布线、网吧承包等相关维修服务。
版权声明:原创作品,允许转载,转载时请务必以超链接形式标明文章原始出处 、作者信息和声明。否则将追究法律责任。
TAG:
评论加载中...
|
上一篇: OllyDBG 入门系列(二)-字串参考
下一篇: 手脱UPX的三种方法