好友
阅读权限30
听众
最后登录1970-1-1
|
CrackMe.rar
(6.38 KB, 下载次数: 25)
修改前的CrackMe.rar
(5.01 KB, 下载次数: 17)
原CrackMe的破解文章的链接地址:
引言:
我看了半天,也没看明白是怎么回事,他说在0x492290下断,我下了,但是按了好几次shift+f9都没有到那个指令地址,而ollydebug又没有提供相应的功能自动跳到那个指令,所以按了半天放弃(因为有循环),后来认真按了几十次,终于到了那个比较的指令地址,但是我还是不知道注册码的生成算法,所以我觉得写破解文章的那个作者完全是在忽悠的。认真思考了一番,我知道SEH主要就是故意在有实际功能的代码中加入些异常,然后跳到异常,使得跟踪者很容易跟丢,或者放弃,既然这样,我们解除SEH的反跟踪的大体思路就是直接将注册码算法的代码串接起来,将引起一场全部去掉。分析过程如下。
大体过程:
1. 获取上次0xCC(中断指令) 的地址 (如00401914)
2. 读取该中断地址的下个BYTE的数据 (如 [00401915] = 0x8c)
3. 该字节数据 (0x8c) 经过算法后,产生另外一个数,再该数和上次中断的EIP相加,定位到新的EIP地址.
重定位EIP算法: (0x8c ===> ) (该算法在未处理异常程序中,地址0x4012f0, 未处理异常加入很多jmp,不用管!~~~)
mov edx, 40164b ;从该指令开始
inc edx ;取下个字节的数据
move cl, byte ptr [edx]
mov cl, 0x8c ; 0x8c是举例
mov al, cl
shl al, 6
shr cl, 2
add al, cl
xor al, 0D
mov cl, al
shr cl, 5
shl al, 3
add cl, al
add cl, 11 ; HEX数据
mov al, cl
shl al, 5
shr cl, 3
add al, cl
xor al, 51
mov cl, al
shl cl, 7
shr al, 1
add cl, al
sub cl, 6F
and ecx, 0FF
and ecx, 80000007
add edx, ecx ; edx 保存异常地址的下个字节的地址 ( 如00401915)
inc edx ; 此时,edx 保存 异常处理后恢复的指令地址 (00401917) === 00401915(00401914+1) + ecx + 1;
处理方法:
直接跳到有实际作用的EIP(是0xCC的全部跳过), 写个程序自动修改跳转指令 (从第一个INT3开始修改为 jmp)
需要一步判断将要跳转的地址的数据是否为0xCC,如果是继续往下查找,直道找到一个不是0xCC的,然后跳到这里来
相关信息:
1. 第一条INT3 指令地址 0x40164b --- > 从这里开始跳转,跳到下个有实际作用的EIP地址
附:
附加一个修改程序的源代码和修改后的cm
ps: 在比较注册码的指令后,如果比较错误,而我们在olldebug又单步调试的话,会当机,因为程序没有写处理单步异常的代码, 不过这已经不重要了
[ 本帖最后由 wgz001 于 2009-1-13 08:42 编辑 ] |
免费评分
-
查看全部评分
|
发帖前要善用【论坛搜索】功能,那里可能会有你要找的答案或者已经有人发布过相同内容了,请勿重复发帖。 |
|
|
|
|